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、レンダリングが異なるレートで発生している間にループを実行できるようにするか、各フレームで何をすべきかを認識しているステートマシンのようなコードを実装する必要があります (例:鳥を 100ms ごとに 15 回動かします)。

于 2014-02-17T05:42:56.180 に答える