我可以使用循环同时水平和垂直移动吗?

时间:2014-05-14 23:18:14

标签: java loops keyboard focus paint

我正在制作这个简单的游戏(只是为了好玩),当我说简单时,我真的希望它很简单。到目前为止,我有一个方格,我可以移动到任何我想要的地方。我正在使用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);

    }
}

2 个答案:

答案 0 :(得分:1)

首先,你不能在方法之外声明一个循环。 要解决您的问题,您应该删除循环,而是更改您的vely / velx分配。 要同时注册多个密钥,您应该只将一个变量设置为1或-1,而只留下另一个变量。

if (code == KeyEvent.VK_DOWN){
   vely = 1;
}

现在因为你要注册多个键,你还必须在keyreleased方法中区分它们,你现在应该将适当的速度设置为0,让另一个保持原样。

答案 1 :(得分:0)

只需删除未在方法或构造函数中声明的while (loop = 0) {


我已经在完全相同的上下文中发布了完整的代码,以便同时水平和垂直地进行。

请查看以下帖子

enter image description here