We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hey guys, im trying to make a program that shoots a projectile at specified angle, but my code draws both the projectile shooting at a pre-determined angle, and asks the user for input at the same time. Im at a loss for what to do here.... I want to get user input for an angle, and then draw the projectile being fired AT the angle the user typed in.
float currT, maxT, xpos, ypos, angle, v, g, deltaT;
String typing = "";
String saved = "";
PFont f;
void setup() {
background(255);
size(500,500);
f = createFont("Arial",16,true);
// Time starts at 0
currT = 0;
// Enter the angle below in degrees(angle)
angle = 45;
// Below converts angle from degrees to radians
angle = (angle) * PI / 180;
// Enter the velocity below (v)
v = 75;
// Gravity is equal to 9.8 m/s (g)
g = 9.8;
// How quickly it updates is deltaT (for faster draw times, use a higher number)
deltaT = .01;
// This is the max time the animation will run (when ypos is less than or equal to 0)
maxT = 2*v*sin(angle) / g;
// This is the position on the x-axis
xpos = v * currT * cos(angle);
// This is the position on the y-axis
ypos = (v * currT * sin(angle)) - .5 * (g * (sq(currT)));
}
void draw() {
int indent = 25;
textFont(f);
fill (0);
text("Click in the applet and type an angle. \nHit return to save what you typed. ", indent, 40);
text(typing,indent,90);
text(saved,indent,130);
noLoop();
}
void keyPressed() {
if (key == '\n' ) {
saved = typing;
typing = "";
angle = (Float.valueOf(saved));
angle = (angle) * PI / 180;
drawYes();
} else {
typing = typing + key;
}
}
void drawYes() {
// Advance currT
currT = currT + deltaT;
// Test if the simulation should be stopped (if the current time is greater than max time)
if(currT > maxT) {
noLoop();
}
// Calculate the new x & y position based on currT
xpos = v * currT * cos(angle);
ypos = (v * currT * sin(angle)) - 0.5 * (g * (sq(currT)));
// Draw the current information in the window
drawPosition();
// Draw the ellipse in the window
drawShot();
loop();
}
void drawPosition() {
fill(255);
stroke(255);
rect(0,0,500,30);
stroke(0);
fill(0);
String text = "time:" + nf(currT, 4, 2)
+ " xpos:" + int(xpos) + " ypos:" + int(ypos);
text(text, 10, 20);
}
void drawShot() {
ellipse(xpos, 500-ypos, 1, 1);
}
Answers
I believe JOptionPane would be more painless. Check it out this example: ~O)
http://docs.Oracle.com/javase/8/docs/api/javax/swing/JOptionPane.html
So i've more or less modified it to the below, but im getting an error "unexpected token: void" for the drawPosition method
You haven't closed draw() curly brace pair! Please use CTRL+T inside IDE in order to format your code and make it easier to spot such mistakes! 3:-O
Eheheheh. Fixed. :P
So, now the simulation for the projectile stops at timestamp 0000.01. O.o I went ahead and separated it to avoid having to put in an angle every single milisecond.