繁体   English   中英

Java键绑定和箭头键

[英]Java Key Bindings and Arrow Keys

我正在与一个由箭头键控制的二维数组中移动的玩家编写一个小型的自顶向下游戏。
我一定已经看过有关键绑定的所有教程,但是我无法获取用于更新主要“地板”对象的键绑定。 救命! 很抱歉,我不能相信这三个文件的上下文。 谢谢!

编辑:SSCCE

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package palace.hero;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class SSCCE 
{
    public static void main(String[] args) 
    {    
        JPanel gridPanel = new JPanel();

        int xCoord = 0;
        int yCoord = 0;

        //Key Bindings        
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_W, 0), "up");
        gridPanel.getActionMap().put("up", new SSCCEKA(xCoord, yCoord, "up"));
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_S, 0), "down");
        gridPanel.getActionMap().put("down", new SSCCEKA(xCoord, yCoord, "down"));
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "left");
        gridPanel.getActionMap().put("left", new SSCCEKA(xCoord, yCoord, "left"));
        gridPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_D, 0), "right");
        gridPanel.getActionMap().put("right", new SSCCEKA(xCoord, yCoord, "right"));

        //Window
        JFrame window = new JFrame("Window");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        int windowHeight = 1125;
        int windowWidth = 900;
        window.setPreferredSize(new Dimension(windowHeight, windowWidth));

        window.add(gridPanel);
        window.pack();
        window.setVisible(true);

        gridPanel.requestFocusInWindow();
    }
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package palace.hero;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class SSCCEKA extends AbstractAction
{
    String direction;
    int x = 0;
    int y = 0;

    public SSCCEKA(int x, int y, String direction) 
    {
        this.x = x;
        this.y = y;
    }

    @Override
    public void actionPerformed(ActionEvent ae) 
    {
        if(direction.toLowerCase().equals("up"))
        {
            x++;
        }
        if(direction.toLowerCase().equals("down"))
        {
            x--;
        }
        if(direction.toLowerCase().equals("left"))
        {
            y--;
        }
        if(direction.toLowerCase().equals("right"))
        {
            y++;
        }
    }
}

当您创建像游戏这样复杂的内容时,应使用模型/视图/控制器模式

因此,让我们创建一个模型类。

public class GameModel {

    private int xCoordinate;
    private int yCoordinate;

    public int getxCoordinate() {
        return xCoordinate;
    }

    public void setxCoordinate(int xCoordinate) {
        this.xCoordinate = xCoordinate;
    }

    public int getyCoordinate() {
        return yCoordinate;
    }

    public void setyCoordinate(int yCoordinate) {
        this.yCoordinate = yCoordinate;
    }

}

您可以通过构造函数将GameModel类传递给SSCCEKA类。

请记住,只有控制器类可以修改游戏模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM