| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1472 人关注过本帖
标题:键盘输入导致的运动延迟问题??!!
取消只看楼主 加入收藏
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
 问题点数:0 回复次数:8 
键盘输入导致的运动延迟问题??!!
我先引用一下前几天的经典的乌龟程序:

import java.awt.*;
import java.awt.event.*;
import java.util.EventListener;
/*打算你按上,乌龟上爬,按下,乌龟下爬。但是一直没有repaint,怎么回事呀,请教下什么地方错了,怎么才能动。*/

public class WuGui{
public static void main(String args[]){
Frame f = new Frame();
f.setSize(1024, 860);
MyPanel m = new MyPanel();
f.add(m);
f.setVisible(true);
}
}

class MyPanel extends Panel implements KeyListener{

int b = 250;//body Y
int h = 200;//head Y
int f1 = 270;//hand F
int f2 = 270;//hand F
int s1 = 400;//hang S
int s2 = 400;//hang S
int ey = 220; boolean a = true;
public MyPanel(){
this.addKeyListener(this);
}
public void paint(Graphics g){
//super.paint(g);
g.setColor(Color.BLUE); /* draw backGround begin*/
g.fillRect(1,1,1024,860);
g.setColor(Color.GREEN);
g.fillOval(330,b,140,200); /* draw body */
g.fillOval(370,h,60,100);
g.setColor(Color.BLACK);
g.fillOval(370,ey,10,10);
g.fillOval(420,ey,10,10); /* draw head */
g.setColor(Color.GREEN);
g.fillOval(310,f1,70,30); /* draw left up */
g.fillOval(310,s1,70,30); /* draw left down */
g.fillOval(420,f2,70,30); /* draw right up*/
g.fillOval(420,s2,70,30); /* draw right down*/

}

public void keyTyped(KeyEvent e) {
}

public void keyPressed(KeyEvent e) {
// TODO: Add your code here

if(KeyEvent.VK_UP == e.getKeyCode())
{
if(a == true)
{
a = false;
f1=f1-10;
s2=s2-10;
b=b-5;
h=h-5;
ey=ey-5;
}else{
a = true;
f2=f2-10;
s1=s1-10;
b=b-5;
h=h-5;
ey=ey-5;
}
repaint();
}
if(KeyEvent.VK_DOWN == e.getKeyCode())
{
if(a == true)
{
a = false;
f2=f2+10;
s1=s1+10;
b=b+5;
h=h+5;
ey=ey+5;
}else{
a = true;
f1=f1+10;
s2=s2+10;
b=b+5;
h=h+5;
ey=ey+5;
}
repaint();
}



}

public void keyReleased(KeyEvent e) {
}

}
大家运行时候一定会发现,当你持续按住up或down键时候,乌龟先移动一点,然后暂停一下,最后才持续运动,各位有没有办法让乌龟持续运动,而没有延迟
搜索更多相关主题的帖子: 键盘 import java awt 延迟 
2006-10-17 21:25
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
我的想法就是,只要你按住移动键,乌龟就会一直运动,而中间不会延迟或暂停

J3D的摸瞎人
2006-10-17 22:01
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
那如果我的程序做的很大,画面上需要重画的东西特别多,也就是说我必须全屏重绘,那么我们用来交互的时候该怎样修改运动延迟问题啊

J3D的摸瞎人
2006-10-18 12:56
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
除了修改调用repaint()的时间,还有其他方法没??!!

J3D的摸瞎人
2006-10-21 09:26
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
版主,给我们写一段没有延迟的代码加在上面的程序里

J3D的摸瞎人
2006-10-21 16:51
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
那也就是说,以后一旦用到连续输入的keyPress()事件,就必须把输入和绘制两个事件放到两个单独的线程里,那为什么用鼠标控制就不会有这种延迟的状况呢,就比如我用mouseMoved()来控制

J3D的摸瞎人
2006-10-22 08:57
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
我用mouseMoved(),他的速度也应该是非常快的,为什么没有延迟呢,难道鼠标和重绘不是在一个线程里面么

J3D的摸瞎人
2006-10-22 09:55
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
不是,我的意思是用e.getX()和e.getY()获得dx,dy然后让他运动

J3D的摸瞎人
2006-10-22 10:04
999hits
Rank: 1
等 级:新手上路
威 望:1
帖 子:227
专家分:0
注 册:2005-10-2
收藏
得分:0 
其实我是想做一个和"反恐"一样的视角控制程序,但是前后左右移动总是延迟,还有旋转矩阵,我有点弄不懂
Matrix3d(),AxisAngle(),Tuple4d(),Quat4d()这几个函数,我用的是J3D做的,望各位赐教

J3D的摸瞎人
2006-10-23 09:09
快速回复:键盘输入导致的运动延迟问题??!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039490 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved