【发布时间】:2020-07-01 06:35:56
【问题描述】:
所以我想制作一个射击游戏,其中一个物体射击东西,我想添加键盘监听器(wasd,箭头键)。谁能告诉我实现键盘监听器的最佳方法是什么?我的最终目标是也能够使用键盘(WASD 和箭头键)移动绿色圆圈。
import acm.graphics.*;
import acm.program.*;
import java.awt.*;
import java.awt.event.*;
public class survivor2 extends GraphicsProgram {
public static final int APPLICATION_WIDTH = 800;
public static final int APPLICATION_HEIGHT = 500;
GOval redBall, greenball;
GObject gobj;
GLabel timeLabel;
GRectangle redBallbox, greenballbox;
double lastX, lastY;
int redBallXJump, redBallYJump, time, leveltime, speed;
final int DIAM = 50;
final int WAIT = 2;
public void init( ) {
time = 0;
leveltime = 0;
timeLabel = new GLabel("Time survived: " + time);
timeLabel.setFont("*-BOLD-16");
add(timeLabel, 0, 16);
timeLabel.setVisible(false);
redBallXJump = 1;
redBallYJump = 1;
speed = 1;
redBall = new GOval(1, 1, DIAM, DIAM);
redBall.setFilled(true);
redBall.setColor(Color.RED);
add(redBall);
greenball = new GOval(300, 115, 100, 70);
greenball.setFilled(true);
greenball.setColor(Color.GREEN);
add(greenball);
addMouseListeners( );
waitForClick();
} //init
public void mousePressed(MouseEvent e) {
lastX = e.getX( );
lastY = e.getY( );
gobj = getElementAt(lastX, lastY);
if (gobj != null) {
gobj.sendToFront(); }
} //mousePressed
public void mouseDragged(MouseEvent m) {
if (gobj != null) {
int xDisplacement = (int) (m.getX( ) - lastX);
int yDisplacement = (int) (m.getY( ) - lastY);
gobj.move(xDisplacement, yDisplacement);
lastX = m.getX( );
lastY = m.getY( ); }
} //mouseDragged
public void run( ) {
while(true){
GRectangle redBallbox = redBall.getBounds();
GRectangle greenballbox = greenball.getBounds();
pause(WAIT);
time = time + WAIT;
leveltime = leveltime + WAIT;
if (leveltime == 10000){
}
if (redBallbox.intersects(greenballbox)==true){
timeLabel.setVisible(true);
timeLabel.setLabel("Time survived: " + time/1000+ " seconds");
break;
}
if (redBall.getY( ) <= 0) //at top of window?
{
redBallYJump = 1;
}
else if (redBall.getY( )+DIAM >= APPLICATION_HEIGHT) //at bottom?
{
redBallYJump = -1;
}
else if (redBall.getX( ) <= 0) //at left?
{
redBallXJump = 1;
}
else if (redBall.getX( )+DIAM >= APPLICATION_WIDTH) //at right?
{
redBallXJump = -1;
}
redBall.move(redBallXJump, redBallYJump);
}
}
}
【问题讨论】:
标签: java