这是我的代码:
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import acm.graphics.GLabel;
import acm.program.GraphicsProgram;
import javax.imageio.ImageIO;
import acm.util.MediaTools;
public class FlappyBird extends GraphicsProgram {
public Background background; //background image
public UpTube uptube; //one of the pipes
public DownTube downtube; //other pipe
public Bird bird;
//image for the bird
public static final int APPLICATION_WIDTH = 882;
public static final int APPLICATION_HEIGHT = 772;
public void run(){
addKeyListeners();
background = new Background();
add(background);
uptube = new UpTube();
add(uptube);
downtube = new DownTube();
add(downtube);
bird = new Bird();
add(bird);
public void jump(){
for(int i =0;i<5;i++){
bird.move(3,-7);
pause(100);
}
for(int i =0;i<15;i++){
bird.move(5, -4);
pause(100);
}
for(int i =0;i<15;i++){
bird.move(7,0);
pause(100);
}
for(int i =0;i<15;i++){
bird.move(5,7);
pause(100);
}
for(int i =0;i<15;i++){
bird.move(3,-7);
pause(100);
}
}
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_SPACE){
jump();
但是,当我按下空格键时,它不会显示鸟的个别动作,只是在每个pause(100)
结束后将鸟传送到最终位置for
声明。如何在每次移动时更新鸟的位置?
答案 0 :(得分:0)
我不知道您正在使用的API,但我已经在java中制作了许多图形实用程序,游戏和程序,并且您必须知道一些基本原则;你似乎有一个'问题'的那个是你假设渲染是在另一个线程完成(在这个代码运行时发生)或者只要鸟移动就完全重绘 - 在大多数图形渲染器中不是这种情况,而是他们只是在每一帧的所有处理后重新绘制
所以,你需要做的是要么在另一个线程上进行渲染,这样for
循环可以在渲染以不同的速率发生时运行,或者,实现更多类似状态机的代码,它知道它应该是什么做每一帧(例如每100毫秒移动一次,15次)。