响应OnKeyDown函数的问题

mmidd 2007-05-01 09:30:12
我做了一个方块,捕获键盘消息 使按->键方块向右移动,按<-键方块向左移动,

但如果按住->或<-时,方块不能马上连续移动,要停顿约一秒才能连续移动,

有什么办法解决这个问题??
...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CALCULUS 2007-05-02
  • 打赏
  • 举报
回复
刚帮你找了找,用GetAsyncKeyState()可以

The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState.
CALCULUS 2007-05-02
  • 打赏
  • 举报
回复
把控制面板-》键盘-》速度-》重复延迟调成最短~哈哈
其实长按键产生的键盘消息是间断的,就像打字时长按键一样
所以要监测键盘长按状态。怎样监测就不清楚了,DirectInput应该可以吧
mmidd 2007-05-02
  • 打赏
  • 举报
回复
帮忙啊
mmidd 2007-05-01
  • 打赏
  • 举报
回复
比如俄罗斯方块,我想左右移动下降的方块,当我按住->时,正在下降的方块只向右移动了一个步长,隔近一秒才连续地向右移动,按住->时向右连续移动的过程中间停顿的间隔小一点
菜牛 2007-05-01
  • 打赏
  • 举报
回复
那得看你怎么来移动的了,可以在按键后立即刷新界面,绘制新的位置。
mmidd 2007-05-01
  • 打赏
  • 举报
回复
二楼!不是那个意思,是如果按住->这个键不放, 要停顿一下才能一直连续移动
finalwei 2007-05-01
  • 打赏
  • 举报
回复
直接响应->&&<- 2个键一起按响应什么 就可以了
package com.vai; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.SurfaceHolder.Callback; /** * * @author Himi * */ public class MySurfaceView extends SurfaceView implements Callback, Runnable { public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); sfh = this.getHolder(); sfh.addCallback(this); paint = new Paint(); paint.setColor(Color.WHITE); paint.setAntiAlias(true); setFocusable(true); } private SurfaceHolder sfh; private Paint paint; private Thread th; private boolean flag; private Canvas canvas; private int screenW, screenH; // /** * SurfaceView初始化函数 */ /** * SurfaceView视图创建,响应函数 */ @Override public void surfaceCreated(SurfaceHolder holder) { screenW = this.getWidth(); screenH = this.getHeight(); flag = true; //实例线程 th = new Thread(this); //启动线程 th.start(); } /** * 游戏绘图 */ public void myDraw() { try { canvas = sfh.lockCanvas(); if (canvas != null) { canvas.drawColor(Color.BLACK); paint.setTextSize(15); canvas.drawText("这里是游戏视图-SurfaceView", 40, 40, paint); } } catch (Exception e) { // TODO: handle exception } finally { if (canvas != null) sfh.unlockCanvasAndPost(canvas); } } /** * 触屏事件监听 */ @Override public boolean onTouchEvent(MotionEvent event) { return true; } /** * 按键事件监听 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } /** * 游戏逻辑 */ private void logic() { } @Override public void run() { while (flag) { long start = System.currentTimeMillis(); myDraw(); logic(); long end = System.currentTimeMillis(); try { if (end - start < 50) { Thread.sleep(50 - (end - start)); } } catch (InterruptedException e) { e.printStackTrace(); } } } /** * SurfaceView视图状态发生改变,响应函数 */ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } /** * SurfaceView视图消亡时,响应函数 */ @Override public void surfaceDestroyed(SurfaceHolder holder) { flag = false; } }

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧