Java中的精灵运动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的精灵运动相关的知识,希望对你有一定的参考价值。
我开始学习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();
}
}
谢谢!
答案
有几个问题:
- 您没有创建Move实例,因此没有任何内容正在侦听键。
- 我认为你甚至不需要在后台线程中运行的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获得更多帮助。
另一答案
如果在Race类中调用Move类,请执行以下操作:
public Move move;
然后在你的Race构造函数下调用它:
move = new Move();
在你移动类你做一个像这样的构造函数:
public Move()
{
run();
}
这应该让它移动:)
对于抬头,您需要将按键d更改为向右而不是向左。
以上是关于Java中的精灵运动的主要内容,如果未能解决你的问题,请参考以下文章
html 在http://burnmind.com/tutorials/dr上发布的“如何将精灵的拖动运动限制在Phaser的X和Y轴上”教程的代码