单次按下按钮手柄

我正在创建一个程序来玩一个视频游戏。当它读取到内存值0x0016中有一个敌人时,它需要按下B键。我想可能是由于我的while循环B键被过度按下了?我不确定。目前,在FCEUX上它说B键被按下了,但它仍然是橙色的。我需要B键只按下一次。

这是我的代码:

JoypadB = {B=true}
JoypadRight = {right=true}

while (true) do
   c = memory.readbyte(0x0016);

   if (c == 6 ) then
      joypad.set(1,JoypadB)

   else
      joypad.set(1,JoypadRight)

   end;

   gui.text(100,100,c);
   emu.print(c);

    emu.frameadvance();
end;
点赞
用户4253427
用户4253427

这个问题实际上不是关于FCEUX,也不是关于Lua。它95%是关于编程,但是一点游戏常识会有帮助。按钮会因为0x0016中包含6而被重复按下。添加一个开关来让连续射击在存在敌人的情况下生效。你可能需要选择一个不同的连发间隔,而这个示例中使用的是每隔一次:

JoypadB = {B=true}
JoypadRight = {right=true}
toggle = 0
while (true) do
    c = memory.readbyte(0x0016);
    if (c == 6) then
        if(toggle==0) then
            joypad.set(1,JoypadB)
            toggle = 1;
        else
            joypad.set(1,JoypadRight)
            toggle = 0;
        end
    else
        joypad.set(1,JoypadRight)
    end;
    emu.frameadvance();
end;

或者,按照你所说的,只要敌人只需要一枪就能死,那么只需按下按钮一次,等待敌人消失再重新出现:

c = memory.readbyte(0x0016);
joypad.set(1,JoypadRight)
if (c == 6) then
    if(toggle==0) then
        joypad.set(1,JoypadB)
        toggle = 1;
    end
else
    toggle = 0;
end;
2016-03-04 21:30:42