最近仿照马士兵的贪食蛇自己也写了一个。但是发现有一个问题
蛇走的方法 repaint()我放在一个线程中 设置每隔200毫秒执行一次
例如:蛇在向右运动 然后快速按 下和左蛇就会朝自己撞死自己 也就是按下下之后 线程还没有刷新 我又按了左他就撞死了.
线程类
class thread extends Thread{
public void run(){
while(ture){
p.s.move();
p.repaint();
try {
Thread.sleep(200);
}
catch (InterruptedException e)
{
}
}
}
}
添加监听后 按键执行的方法
public void direction(KeyEvent e) {
int dir = e.getKeyCode(); switch(dir){
case KeyEvent.VK_UP :
if(head.dir!=Dir.D){
head.dir=Dir.U;
break;
}
case KeyEvent.VK_DOWN :
if(head.dir!=Dir.U){
head.dir=Dir.D;
break;
}
case KeyEvent.VK_RIGHT:
if(head.dir!=Dir.L){
head.dir=Dir.R;
break;
}
case KeyEvent.VK_LEFT :
if(head.dir!=Dir.R){
head.dir=Dir.L;
break;
}
}
}不知道各位能听懂我的描述不·我想了一些解决方法都不太妥当 总觉得 监听器自己就是一个线程一旦添加不好控制线程
蛇走的方法 repaint()我放在一个线程中 设置每隔200毫秒执行一次
例如:蛇在向右运动 然后快速按 下和左蛇就会朝自己撞死自己 也就是按下下之后 线程还没有刷新 我又按了左他就撞死了.
线程类
class thread extends Thread{
public void run(){
while(ture){
p.s.move();
p.repaint();
try {
Thread.sleep(200);
}
catch (InterruptedException e)
{
}
}
}
}
添加监听后 按键执行的方法
public void direction(KeyEvent e) {
int dir = e.getKeyCode(); switch(dir){
case KeyEvent.VK_UP :
if(head.dir!=Dir.D){
head.dir=Dir.U;
break;
}
case KeyEvent.VK_DOWN :
if(head.dir!=Dir.U){
head.dir=Dir.D;
break;
}
case KeyEvent.VK_RIGHT:
if(head.dir!=Dir.L){
head.dir=Dir.R;
break;
}
case KeyEvent.VK_LEFT :
if(head.dir!=Dir.R){
head.dir=Dir.L;
break;
}
}
}不知道各位能听懂我的描述不·我想了一些解决方法都不太妥当 总觉得 监听器自己就是一个线程一旦添加不好控制线程
/^\/^\
_|__| O|
\/ /~ \_/ \
\____|__________/ \
\_______ \
`\ \ \
| | \
/ / \
/ / \\
/ / \ \
/ / \ \
/ / _----_ \ \
/ / _-~ ~-_ | |
( ( _-~ _--_ ~-_ _/ |
\ ~-____-~ _-~ ~-_ ~-_-~ /
~-_ _-~ ~-_ _-~
~--______-~ ~-___-~
本身不可以往后走吧,把这个方向去掉就可以了