1

私のプログラムのアイデアは、画像を作成し、その画像をグラフィカルウィンドウで上に移動させることです。これは、まさにこのrollBall()メソッドが行うことです。メソッドをメソッドに入れると、rollBall()メソッドは機能しrun()ます。しかし、問題は、rollBall()メソッドをメソッド内に配置すると実行できないことkeyPressed()です。

acm.jarライブラリは、Javaグラフィカルプログラムをはるかに簡単に作成するための便利なツールであるため、私はライブラリを使用しています。

誰かが私を正しい方向に向けてくれませんか。

これは私のコードです...

import java.awt.Color;
import java.awt.event.KeyEvent;

import acm.graphics.GImage;
import acm.graphics.GOval;
import acm.program.GraphicsProgram;
import acm.util.RandomGenerator;

public class BallDrop extends GraphicsProgram {

    /** width and height of application window in pixels */
    public static final int APPLICATION_WIDTH = 900;
    public static final int APPLICATION_HEIGHT = 768;

    private static final double GRAVITY = 1;

    /** Radius of the ball in pixels */
    private static final int BALL_RADIUS = 50;
    private static final int WIDTH = APPLICATION_WIDTH;

    public void run() {         
        setSize(APPLICATION_WIDTH, APPLICATION_HEIGHT);
        addKeyListeners();
    }

    public void keyPressed(KeyEvent e){ 
        char linkMoveRightKey = e.getKeyChar();
        if(linkMoveRightKey == 'z'){
            rollBall();
        }   
     }

     private void rollBall(){
         setup_Ball();          
         game_Loop();
     }

    private void setup_Ball(){
         pic = new GImage("link.png");
         add(pic,gameBallInitialLocationX, gameBallInitialLocationY);
    }

    private void game_Loop(){
         while(pic.getX() > 0 ){            
              move_Ball();
              pause(DELAY);
         }
    }

    private void move_Ball() {
         ballVelocityX = 0;
         ballVelocityY -= GRAVITY;
         pic.move(ballVelocityX, ballVelocityY);
    }

    private RandomGenerator rgen = RandomGenerator.getInstance();
    private GImage pic;
    private int gameBallInitialLocationX = 500;
    private int gameBallInitialLocationY = 500;
    private int ballVelocityX = (int) rgen.nextDouble(3.0, 5.0);
    private int ballVelocityY =10;
    private static final int DELAY = 50;
 }
4

1 に答える 1

1

マニュアルを読んだばかりですが、間違ったメソッドを呼び出していることを理解しています。

メソッドを呼び出す代わりに、run()メソッドを定義しますinit()

また、内部ではなく内部にあるsetup_Ball()必要があります -キーが押されるたびではなく、プログラムの開始時にのみボールを初期化する必要があります。init()rollBall()

したがって、メソッドを定義して削除する代わりに、次のrun()ようinit() にします。setup_Ball()rollBall()

public void init() {
    setSize(APPLICATION_WIDTH, APPLICATION_HEIGHT);
    setup_Ball();
    addKeyListeners();
}

注:このrun()メソッドは、キーが押されるのを待たずにプログラムの起動時にアニメーションを表示する場合に使用できます。その場合、で適切なメソッドを呼び出すことができますrun()

于 2012-06-06T02:03:18.503 に答える