我正在制作这个简单的游戏(只是为了好玩),当我说简单时,我真的希望它很简单。到目前为止,我有一个方格,我可以移动到任何我想要的地方。我正在使用KeyListeners(完全正常,我不想对当前项目使用KeyBindings),我想知道是否可以使用循环以使其同时水平和垂直。 在此代码中,您可以看到我的 尝试 放入循环,并且在一段时间内它给了我一个错误:
时令牌上的语法错误
我有两个问题 1.循环是否会得到我想要的东西? 如果不是,你有什么建议? 2.如果是,我的while循环出了什么问题?
谢谢
我的代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class MyGame extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
int x = 0, y = 0, velx =0, vely =0, loop = 0;
public MyGame() {
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(x,y,50,30);
}
public void actionPerformed(ActionEvent e) {
if(x < 0)
{
velx=0;
x = 0;
}
if(x > 530)
{
velx=0;
x = 530;
}
if(y < 0)
{
vely=0;
y = 0;
}
if(y > 330)
{
vely=0;
y = 330;
}
x += velx;
y += vely;
repaint();
}
while (loop = 0) {
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_DOWN){
vely = 1;
velx = 0;
}
if (code == KeyEvent.VK_UP){
vely = -1;
velx = 0;
}
if (code == KeyEvent.VK_LEFT){
vely = 0;
velx = -1;
}
if (code == KeyEvent.VK_RIGHT){
vely = 0;
velx = 1;
}
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {
velx=0;
vely=0;
}}
public static void main (String arge[]){
JFrame f = new JFrame();
MyGame s = new MyGame();
f.add(s);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(600,400);
f.setVisible(true);
}
}
答案 0 :(得分:1)
首先,你不能在方法之外声明一个循环。 要解决您的问题,您应该删除循环,而是更改您的vely / velx分配。 要同时注册多个密钥,您应该只将一个变量设置为1或-1,而只留下另一个变量。
if (code == KeyEvent.VK_DOWN){
vely = 1;
}
现在因为你要注册多个键,你还必须在keyreleased方法中区分它们,你现在应该将适当的速度设置为0,让另一个保持原样。
答案 1 :(得分:0)
只需删除未在方法或构造函数中声明的while (loop = 0) {
。
我已经在完全相同的上下文中发布了完整的代码,以便同时水平和垂直地进行。
请查看以下帖子