Идея моей программы заключается в создании изображения и увеличении этого изображения в графическом окне, что и делает метод rollBall()
. Метод работает, когда я помещаю метод rollBall()
в метод run()
. Но проблема заключается в том, что он не может работать, когда я помещаю метод rollBall()
внутри метода keyPressed()
.Создание движущегося объекта, когда пользователь нажимает клавишу (Java)
Я использую библиотеку 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;
}
никогда не слышал о библиотеке 'acm', но я использовал свой собственный пакет, разработанный за все эти годы с нуля. Вы прочитали руководство, нужно ли вам «обновлять» любые контейнеры после перемещения с помощью 'pic.move (ballVelocityX, ballVelocityY),' – Subs
, что не требуется. – Nicholas