gpt4 book ai didi

java - 一旦达到某个障碍,如何停止动画?

转载 作者:行者123 更新时间:2023-12-02 03:42:02 25 4
gpt4 key购买 nike

今天困扰我的问题就是这样。我正在创建一个程序,允许用户跳跃并向左或向右移动,问题是每当我尝试跳跃时程序就会卡住...我的代码背后的想法很简单,每当用户按下空格(跳跃)时矩形“跳”起来,如果矩形的 y 位于障碍物上方一定高度内(在本例中,尺寸为 brickx、bricky、brickw 的矩形,brickh 是障碍物),则动画应该停止,并且矩形应该在障碍物顶部等待下一个命令。为此,在 while 循环的每次迭代期间调用stayOnBrick 方法并进行检查;在跳转过程中,如果 y 在所需的范围内,并且如果 y 是则设置 boolean 跳转 = true ,这应该在下一次迭代中打破循环并将 y 设置为所需的值。但是当按下空格时,什么也没有发生,或者我应该说程序卡住了。想法?

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyTest extends Core implements KeyListener{
Window w;
public int x,y;
boolean jump = true;
public int brickx, bricky, brickw, brickh;
public static void main(String args[]){
new KeyTest().run();
}

private String mess = "";

//init also called init from superclass
public void init(){
super.init();
Window w = s.getFullScreenWindow();
w.setFocusTraversalKeysEnabled(false);
w.addKeyListener(this);
y = s.getHeight()-15;
mess = "Press esc to exit";
}


@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
e.consume();
}

@Override
public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_ESCAPE){
stop();
}else if(keyCode == KeyEvent.VK_SPACE){
mess = "Pressed: " + KeyEvent.getKeyText(keyCode);
while(y>s.getHeight()-200){
stayOnBrick();
if(jump==false){break;}
else{ try{
y-=20;
w.repaint();
Thread.sleep(40);
}catch(Exception jumpError){
System.out.println("Error in Jumping");
}
}

while(y<s.getHeight()-15){
stayOnBrick();
if(jump==false){
w.repaint();
break;}
else{
try{
y+=20;
Thread.sleep(40);
w.repaint();
}catch(Exception jumpError){
System.out.println("Error in Jumping");
}
}
}
}
}

else if(keyCode == e.VK_RIGHT){
if(x>=s.getWidth()-30){x=s.getWidth()-30;}
x+=20;
w.repaint();
}
else if(keyCode == e.VK_LEFT){
if(x<=0){x=0;}
x-=20;
w.repaint();
}

e.consume();
}


@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
int keyCode = e.getKeyCode();
mess = "Released: " + KeyEvent.getKeyText(keyCode);
jump = true;
e.consume();
}
@Override
public synchronized void draw(Graphics2D g){
brickx=0; bricky=s.getHeight()-100; brickw=300; brickh=20;
Window w = s.getFullScreenWindow();
g.setColor(w.getBackground());
g.fillRect(0, 0, s.getWidth(), s.getHeight());
g.setColor(w.getForeground());
g.fillRect(x, y, 30, 15);
g.drawString(mess, 30, 30);
g.setColor(Color.BLUE);
g.fillRect(brickx, bricky, brickw, brickh);


}

public void stayOnBrick(){
if(y<bricky && y>bricky-30){
y=bricky-15;
jump = false;
}
else{jump = true;}
}
}

最佳答案

whenever I try to jump the program freezes

我首先看一下 Concurrency in Swing问题的原因。

我建议看看How to use Swing Timers寻找可能的解决方案。

我还建议您查看 How to Use Key Bindings使用 KeyListener

解决与焦点相关的问题

你可能会发现How to make sprite jump in java?JApplet creates a ball that bounces and gets progressively less high in Java有帮助

关于java - 一旦达到某个障碍,如何停止动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com