我的程序的想法是创建一个图片并让图片在图形窗口中向上移动,这正是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;
}
答案 0 :(得分: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()