关于DelphiX与手柄铵钮状态的问题

Crystal_Boy 2005-03-24 02:37:11
怎样知道手柄的某个Button按钮的状态呀?
就像TButton对象的KeyDown或KeyUp的事件那样

我下面是这样写的,当手柄Button1一直按着时,这个条件就不停地通过,像连发一样,我不想要,我想单发的,就是按一下后放开就算一次.

if (isUp in DXInput1.States) or (isButton1 in DXInput1.States) then
if vAspect + 1 <= 3 then Inc(vAspect) else vAspect := 0;
.....

我看过DirectInput里的Drun Pad例子,它处理的方法如下
....
for( j = 0; j < dwItems; j++ )
{
// Non-axis data is recieved as "button pressed" or "button
// released". Parse input as such.
BOOL bState = (adod[j].dwData == 0x80 ) ? TRUE : FALSE;
INT index = (INT) adod[j].uAppData;

if( button_states[index] == FALSE && bState )
{
g_lpDrumPad->Play(index, 0, 0);
g_boxColors[index] = 255.0f;
}

button_states[index] = bState;
}
...
DelphiX里有不有像BOOL bState = (adod[j].dwData == 0x80 ) ? TRUE : FALSE;这行的函数啊?
...全文
194 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crystal_Boy 2005-03-26
  • 打赏
  • 举报
回复
问题自己解决了
Crystal_Boy 2005-03-25
  • 打赏
  • 举报
回复
楼上的理解错了,我是说DelphiX里是否有0x80这个功能呀,就是判断是否是"button pressed"状态或者是"button released"状态的函数?
chijingde 2005-03-25
  • 打赏
  • 举报
回复
delphiX只是个控件罢了

三元运算符在delphi里必须要分开写啦

if then
else

这样
Crystal_Boy 2005-03-25
  • 打赏
  • 举报
回复
Up
Crystal_Boy 2005-03-25
  • 打赏
  • 举报
回复
我看过TDXInput.TJoystick.Update函数里的源码
找到这相关的代码
for i:=0 to 31 do
if Fdijs.rgbButtons[i] and $80<>0 then
FStates := FStates + [TDXInputState(Ord(isButton1)+i)];

按了那个键都存在FStates集合里,要用也是我上在贴的那条件判断的那个方法吧
isButton1 in DXInput1.States

chijingde 2005-03-25
  • 打赏
  • 举报
回复
……
Crystal_Boy 2005-03-25
  • 打赏
  • 举报
回复
当然知道呀,问题是它封装后的在(TDXInput.TJoystick)里,但是那个成员函数可以有这个功能呀
这个我找不到,请帮介召一下是那个成员函数或属性
chijingde 2005-03-25
  • 打赏
  • 举报
回复
是否有0x80这个功能呀
=================================

一个常量而已吧?


判断是否是"button pressed"状态或者是"button released"状态的函数?

============================================================================
DelphiX也是对DX进行的封装

应该可以的

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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