0

这是我的代码:

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语句结束后将鸟传送到结束位置。我如何让它在我每次移动它时更新鸟的位置?

4

1 回答 1

0

我不知道您使用的 API,但我用 Java 制作了许多图形实用程序、游戏和程序,并且您必须了解一些基本原则;您似乎遇到“问题”的是您假设渲染是在另一个线程中完成的(在此代码运行时发生),或者在鸟移动时会完全重绘 - 大多数图形渲染器都不是这种情况,而是他们只是在处理完每一帧后重新绘制。
因此,您需要做的是在另一个线程上进行渲染,以便for循环可以在渲染以不同的速率发生时运行,或者,实现更多状态机之类的代码,它知道每帧应该做什么(例如每 100 毫秒移动一次鸟,15 次)。

于 2014-02-17T05:42:56.180 回答