问下对于DAS各位程序员是怎么实现的?
俄罗斯方块吧
全部回复
仅看楼主
level 12
搞了半天都感觉和真正的DAS相去甚远 感觉自己对DAS的理解不是很透彻 所以在实现上有困难所以特地来求助~[惊讶] 求贴代码和分析[惊讶]
2013年02月14日 12点02分 1
level 14
没有现成的代码,但我可以讲解一下DAS
若你按下左/右键一段时间【可设置】,将以更快的速度【可设置】移动,方便移动到墙边
2013年02月14日 13点02分 5
那以更快的速度移动时 程序应该代替了部分人的击键吧 也就是程序本身额外移动了几格
2013年02月14日 14点02分
level 12
有一个想法 不知是否可行
var
LastKeyDownTime:TDateTime;
//...
proc cbMove(m:Integer); //控制移动 不具体实现
//...
proc Timer3_OnTimer(); //在按下左右键一段时间后 自动移动方块
begin
if Key=RightKey then cbMove(+cbWidth)
else cbMove(-cbWidth);
end;
proc App.OnMessage(Msg:TMessage);//响应信息
var
CurrentTime:TDateTime;
begin
if Msg.Message=WM_KeyDown then begin
if (Msg.wParam=LeftKey) or (Msg.wParam=RightKey) then begin
CurrentTime:=Now();
If (CurrentTime-LastKeyTime)<=持续按下后所需时间 then begin {} Timer3.NeedTime:=重复时间; //设定计时时长
Timer3.Enabled:=True;//启动Timer3 开始计时 到时间时自动移动一
//格
Key:=Msg.wParam;
end;
//...
end;
LastKeyTime:=CurrentTime;
//...
end ;
if Msg.Message=WM_KeyUp then
if Timer3.Enabled=True then Timer3.Enabled:=False;
//...
end;
//...
2013年02月14日 14点02分 6
level 12
我想起一个fart的比喻【忘了是不是fart的了
DAS的实质就跟输入字一样,按一下输入一个w,按住到一定时候就会重复wwwwwwwwwwwwww
【跟主题相关但不解决问题。。。
2013年02月15日 01点02分 7
也就是不断的按下同一移动键后 即使人没有键入那么多次它也替人代劳了 对么?
2013年02月15日 04点02分
回复 坚定支持goo :不对吧。。DAS是指按住一段时间后自动重复,如果你连续按的话,那么就是一下一下的。【一下一下的叫tap】
2013年02月15日 04点02分
回复 永远旋转的炸弹 :是这个意思 根据我对各类PC上的具体实现的研究上来看 不断地按下某个键就会不断的触发WM_KeyDown消息 但是好像WM_KeyDown的个数没有移动的格数多…… 所以我觉得好像是在程序内部额外的移动了
2013年02月15日 04点02分
@坚定支持goo 去了。(没那么简单吧?)
2013年02月15日 08点02分
level 12
2013年02月15日 01点02分 8
level 14
其实我刚刚发现微软的输入也自带DAS,例如:
Yo→0.5sYoo→0.1sYooooooooooooooooooooooooooooooooo
2013年02月15日 03点02分 9
[啊!]这个能叫das吗 貌似能
2013年02月15日 04点02分
回复 永远旋转的炸弹 :a.a
2013年02月15日 07点02分
level 12
目前我用的DAS方法是暂停方块下落 任由玩家移动方块 请问这样对么?……
2013年02月15日 08点02分 10
这两个操作要同时啊同时……(步步高的叠方块在1000-的时候来回左右移动会不下落……)
2013年02月15日 10点02分
明显不对=w=
2013年02月15日 13点02分
1