-1

私はJavaゲームをプログラミングしているだけで、スペースを押すと、キャラクターが5秒間戦闘モードになり、それから離すことをしたいです。1回押すとファイトモードが有効になり、もう一度押すと解放されますが、このように試してみると(下部のコード)、ゲームは5秒間フリーズしますが、何も起こりません。エラーコードすら出ません。

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JPanel;

public class Zeichnen extends JPanel {

    int x = 10;
    int y = 335;
    int width = 100;
    int height = 106;
    int speed = 10;
    boolean left = false;
    boolean fight = false;
    String file = "res/character.png";
    Image character;

    public void paint(Graphics g) {
        super.paintComponent(g);
        character = Toolkit.getDefaultToolkit().getImage(file);
        g.drawImage(character, x, y, width, height, this);
    }

    public void moveLeft() {
        if (left == false) {
            left = true;
            if (fight == true) {
                x = x + 129;
                width = -129;
            } else if (fight == false) {
                x = x + 100;
                width = -100;
            }
        }
        x = x - speed;
        rand();
        repaint();
    }

    public void moveRight() {
        if (left == true) {
            left = false;
            if (fight == true) {
                x = x - 129;
                width = 129;
            } else if (fight == false) {
                x = x - 100;
                width = 100;
            }
        }
        x = x + speed;
        rand();
        repaint();
    }

    public void moveUp() {
        y = y - speed;
        repaint();
    }

    public void moveDown() {
        y = y + speed;
        repaint();
    }

    public void fight() {
        long curTime = System.currentTimeMillis();
        fight = true;
        file = "res/character_fight.png";
        if (left == true) {
            width = -129;
        } else if (left == false) {
            width = 129;
        }
        repaint();
        if (System.currentTimeMillis() > curTime + 5000) {
            fight = false;
            file = "res/character.png";
            if (left == true) {
                width = -100;
            } else if (left == false) {
                width = 100;
            }
            repaint();
        }
    }

    public void rand() {
        if (x <= -130) {
            x = 770;
        } else if (x >= 770) {
            x = -130;
        }
    }
}
4

2 に答える 2

1

paintチェーン メカニズムを観察する必要がpaintComponentありますpaint。また、ペイント時に画像をロードせず、 のJPanel初期化時に画像をロードしてください。

于 2013-02-22T21:14:14.877 に答える
0

問題がわかりません。キーを押すと、キャラクターのイメージが 5 秒間変化しますか? この場合、リスナーを実装してから、タイマーを開いてタイマー タスクをスケジュールする必要があります。

TimerTask task = new TimerTask()  {
        @Override
        public void run() {
            //reset your character to normal state
            }
        }
};
new Timer().schedule(task, 5000);
于 2013-02-22T21:27:51.363 に答える