gpt4 book ai didi

java - Java中的 Sprite 运动

转载 作者:行者123 更新时间:2023-12-01 14:12:32 29 4
gpt4 key购买 nike

不久前我开始学习java作为一种爱好,因为我想制作一个小游戏。我学习了 Java 基础知识,并决定尝试解决游戏开发问题。我的 JFrame 和一切都很好,从技术上讲我没有错误,但我的小矩形家伙不会在屏幕上移动。这是我的代码:

package main;

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Race extends JFrame {

public int speed=5;
public int up=1;
public int left=2;
public int down=3;
public int right=4;
public int direction=0;

Rectangle p1 = new Rectangle (500,400,20,40);

public Race()
{
super("Race");
setSize(1000,800);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cont=getContentPane();
cont.setBackground(Color.orange);
setResizable(false);
}

public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.red);
g.fillRect(p1.x, p1.y, p1.width, p1.height);
}


public class Move extends Thread implements KeyListener
{
public void run()
{
addKeyListener(this);

while(true)
{
try
{
repaint();

if(direction==up)
{
p1.y-=(int)speed;
}
if(direction==down)
{
p1.y+=(int)speed;
}
if(direction==right)
{
p1.x+=(int)speed;
}
if(direction==left)
{
p1.x-=(int)speed;
}
Thread.sleep(75);
}
catch (Exception e)
{
break;
}
}
}

@Override
public void keyPressed(KeyEvent event) {
// TODO Auto-generated method stub

}

@Override
public void keyReleased(KeyEvent event) {
// TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent event) {
// TODO Auto-generated method stub
if(event.getKeyChar()=='w')
{
direction = up;
}
if(event.getKeyChar()=='d')
{
direction = left;
}
if(event.getKeyChar()=='s')
{
direction = down;
}
if(event.getKeyChar()=='a')
{
direction = left;
}
}

}





public static void main(String[] args)
{
new Race();
}

}

最佳答案

有几个问题:

  1. 您没有创建 Move 实例,因此没有任何东西在监听按键。
  2. 我认为您甚至不需要在后台线程中运行的 Move 类。获取 KeyListener 逻辑并将其放入 Race 类中,然后通过调用 addKeyListener(this); 来“启用”keyListener,以便它开始监听按键操作。

    Race extends JFrame implements KeyListener{

    Race(){
    ...
    addKeyListener(this);
    }

    @Override
    public void keyTyped(KeyEvent event) {

    if(event.getKeyChar()=='w')
    {
    direction = up;
    }
    if(event.getKeyChar()=='d')
    {
    direction = left;
    }
    if(event.getKeyChar()=='s')
    {
    direction = down;
    }
    if(event.getKeyChar()=='a')
    {
    direction = left;
    }
    repaint();
    }

另请参阅这个问题:Unresponsive KeyListener for JFrame以获得更多帮助。

关于java - Java中的 Sprite 运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384707/

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