加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java – 游戏代码在Mac和Windows之间的行为不同

发布时间:2020-12-15 04:37:50 所属栏目:Java 来源:网络整理
导读:import java.awt.*;import java.awt.event.*;import javax.swing.JFrame;public class Game extends JFrame implements KeyListener{ private int charX; private int charY; public Game() { charX = 250; charY = 450; this.setSize(500,500); addKeyListe
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;



public class Game extends JFrame implements KeyListener
{
    private int charX;
    private int charY;

    public Game()
    {
        charX = 250;
        charY = 450;
        this.setSize(500,500);
        addKeyListener(this);
        this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    }


    public void keyTyped(KeyEvent event)
    {
        if(event.getKeyChar() == 'a')
            charX-=5;
        else if(event.getKeyChar() == 'd')
            charX+=5;
        else if(event.getKeyChar() == 'w')
            charY-=5;
        else if(event.getKeyChar() == 's')
            charY+=5;
        if(charX > 485)
            charX-=6;
        else if(charX < 10)
            charX+=6;
        if(charY > 485)
            charY-=6;
        else if(charY < 30)
            charY+=6;
        repaint();
    }

    public void keyPressed(KeyEvent event)
    {
    }

    public void keyReleased(KeyEvent event)
    {
    }

    public void paint(Graphics g)
    {
        super.paint(g);
        g.setColor(Color.BLACK);
        g.fillRect(charX,charY,10,10);
    }

    public static void main(String args[])
    {
        Frame frm = new Game();
        frm.setVisible(true);
        frm.repaint();
    }
}

在学校我使用Mac,在家里我使用带有Windows 10的PC.在Mac上,此代码的行为与Windows版本不同.在Mac版本中,事情按预期进行,字符(方形)仅在每次按键时移动一点.但是在Windows上,如果按任意方向(如d),角色将继续向右移动,即使它只应该被调用一次.不仅如此,绘画时框架也不断闪烁.所以我想知道为什么Mac和Windows之间的版本之间存在差异,以及我如何解决Windows上的闪烁问题.我打算稍后添加keyPressed和keyReleased方法,所以我不认为我会有这么糟糕的时间.

解决方法

关键事件在操作系统之间不同.当Mac OS可能只创建一个键时,Windows可能会在键关闭时快速创建键入的事件.

解决方案是使用key bindings而不是关键事件,尽管您可能有幸找到了适用于两个操作系统的keyPressed和keyReleased的组合(仍然建议只使用键绑定).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读