【发布时间】:2016-04-18 17:01:00
【问题描述】:
你能看出问题所在吗?线程运行良好,但砖块不想响应关键侦听器。我尝试测试keylistener 是否最终获得了一个事件,但它甚至没有执行system.out.println
import java.awt.*;//imports
import java.util.*;
import java.applet.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
public class Start extends Applet implements Runnable, KeyListener// where i put the keylistener in
{
DrawBackground dbg = new DrawBackground();
Brick brick = new Brick();
Thread gameLoop;
public void init() {
addKeyListener(this);// i add the key listener
}
public void start() {
Thread gameLoop = new Thread(this);
gameLoop.start();
}
public void run() {
while (true) {
brick.update(1);
repaint();
try {
Thread.sleep(17);
}
catch (InterruptedException e) {
}
}
}
public void stop() {
}
public void paint(Graphics g)// with out any paint it works if im changing
// somthing like a lable
{
dbg.paint(g, this);
brick.paint(g, this);
}
public void keyPressed(KeyEvent e)// test to see if it works
{
System.out.println("why");
if (e.getKeyCode() == 37) {
brick.left();
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
这是我要移动的 Brick 类
import java.awt.*;
import java.util.*;
import java.applet.*;
public class Brick {
public int dy = 40;
public int yStart = -20;
public int time = 0;
public int dx = 0;
public int xStart = 0;
public int start = 1;
public void paint(Graphics g, Start sp) {
Dimension screenSize = sp.getSize();
int sheight = screenSize.height;
int swidth = screenSize.width;
if (start == 1) {
xStart = swidth - (int) (swidth / 2.5);
start = 0;
}
int bWidth = swidth / 15;
int bHeight = swidth / 15;
int time = 0;
g.setColor(Color.red);
g.fillRect(xStart, yStart, bWidth, bHeight);
}
public void update(int x) {
if (time == 60) {
time = 0;
yStart += dy;
}
else {
time += x;
}
}
public void left() {
xStart -= dx;
}
}
【问题讨论】:
-
那个线程有必要吗?它有什么作用?
-
是的,它使块向下移动
-
它的俄罗斯方块是我准备制作的游戏
-
我找不到问题
-
我已经学习了你的 Start 课程并删除了一些不必要的东西,看看 KeyListener 是否真的在这里工作:gist.github.com/dshields1/7653136。这对我来说运行良好,并且 KeyListener 有效。如果它对您不起作用,那么您运行小程序的方式可能存在问题。如果它确实有效,您可以尝试逐段添加代码,看看是什么部分导致了问题。
标签: java keylistener runnable