Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

d_aelion

[java] Java Animation

This topic is 5977 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hey guys! Im writing a physics simulator that graphs and animates quantum waves. I need a way to animate the wave and catch events (key press/button) to stop the wave, but all the code I have seen on threading causes problems when I integrate it into my code and I have yet to see a way use them. It would be cool to just do it in a loop in the main event thread and just check if keys were pressed, but I don''t think that is possible without catching events. I would rather not put the animation in a thread, but perhaps threading the events would work. Any ideas? Help!

Share this post


Link to post
Share on other sites
Advertisement
I have just been working on a particle system, so i''ve got some stuff that should help.
Email me if you have any questions!
harleyrana@telstra.com


public class SimFrame extends JFrame implements Runnable, KeyListener {

Simulator sim;
boolean running = false;
int repaint_delay = 60; /* For a sim thats probally to low but whatever you want*/
Thread repaintThread;

Image bufferImage;

int elapsed_time = 0;
long last_frame_time = System.currentTimeMillis();

// You could use an array, but this is less error prone
boolean isUpKeyDown = false;
boolean isDownKeyDown = false;
boolean isLeftKeyDown = false;
boolean isRightKeyDown = false;

public SimFrame(){

this.setSize(600,600);
this.show();
bufferImage = this.createImage(600,600);

repaintThread = new Thread(this);
repaintThread.setPriority(Thread.NORM_PRIORITY-1);
running = true;
repaintThread.start();

}

public static void main(String[] args){
new SimFrame();
}

public void run(){ // Only method from Runable you need.

while(running){

// Now we have can easily see which keys have been pressed
if(isUpKeyDown){
// do what ever!
}

// This is the interesting part!
/* First you need to establish how much time elasped
between your last frame, and use that to scale your
results when you intergrate them
*/

long time = System.currentTimeMillis();
int time_delta = (int)((time - last_frame_time) / 1000);
elapsed_time += time_delta;
last_frame_time = time;



sim.processUpdate(time_step); /* Intergrate your values with the elapsed time between frames */
Graphics g = bufferImage.getGraphics();
sim.renderScene(g); /* pass the graphics object to the sim
so it can draw its current state */

repaint(); //this will call your update(Graphics);


try{
repaintThread.sleep(repaint_delay);

}catch(InterruptedException ie){}


}


}



public void update(Graphics g){
// Now we need to move the buffer onto the sceen
g.drawImage(bufferImage,0,0,null);
}

public void keyReleased(java.awt.event.KeyEvent keyEvent) {
if(keyEvent.getKeyCode() == KeyEvent.VK_UP){

isUpKeyDown = false;
}else if(keyEvent.getKeyCode() == KeyEvent.VK_DOWN){

isDownKeyDown = false;
}else if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT){

isLeftKeyDown = false;
}else if(keyEvent.getKeyCode() == KeyEvent.VK_RIGHT){

isRightKeyDown = false;
}else if(keyEvent.getKeyCode() == KeyEvent.VK_SPACE){

isPrimaryFireDown = false;
}else if(keyEvent.getKeyCode() == KeyEvent.CTRL_MASK){

isSecondaryFireDown = false;
}
}

public void keyPressed(java.awt.event.KeyEvent keyEvent) {
if(keyEvent.getKeyCode() == KeyEvent.VK_UP){

isUpKeyDown = true;
}else if(keyEvent.getKeyCode() == KeyEvent.VK_DOWN){
isDownKeyDown = true;
}else if(keyEvent.getKeyCode() == KeyEvent.VK_LEFT){

isLeftKeyDown = true;
}else if(keyEvent.getKeyCode() == KeyEvent.VK_RIGHT){

isRightKeyDown = true;
}
}

public void keyTyped(java.awt.event.KeyEvent keyEvent) {
}

}

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!