ChucK джойстик управления
Я пытаюсь получить вход от джойстика. После того, как вход получен, должен быть сгенерирован звук. Это работает, но реагирует как на нажатие, так и на отпускание кнопок джойстика. Как мне заставить его реагировать только на толчки, а не на релизы.
Более того, как заставить слушателя события реагировать на 180-градусные движения джойстика. В настоящее время, когда я перемещаю джойстик, он продолжает генерировать звук, даже спустя долгое время после его отпускания.
Hid myHid;
HidMsg msg;
0=>int device;
if(!myHid.openJoystick(device)){
<<<"Couldn't">>>;
me.exit();
}
<<<"Ready">>>;
SndBuf coin=>dac;
0.6=>coin.gain;
0=>coin.pos;
while(1){
myHid=>now;
while(myHid.recv(msg)){
<<<"Rev">>>;
me.dir()+"/audio/smw_jump.wav"=> coin.read;
.2::second=>now;
}
}
1 ответ
// make HidIn and HidMsg
Hid hi;
HidMsg msg;
SndBuf jump=>dac;
SndBuf coin=>dac;
SndBuf power_up=>dac;
SndBuf blaster=>dac;
0.85=>coin.gain;
0=>coin.pos;
.6=>jump.gain;
0=>jump.pos;
.85=>power_up.gain;
0=>power_up.pos;
.6=>blaster.gain;
0=>blaster.pos;
// which joystick
0 => int device;
// get from command line
if( me.args() ) me.arg(0) => Std.atoi => device;
// open joystick 0, exit on fail
if( !hi.openJoystick( device ) ) me.exit();
<<< "joystick '" + hi.name() + "' ready", "" >>>;
// infinite event loop
while( true )
{
// wait on HidIn as event
hi => now;
// messages received
while( hi.recv( msg ) )
{
// joystick axis motion
if( msg.isAxisMotion() )
{
//this is where we pan
<<< "joystick axis", msg.which, ":", msg.axisPosition >>>;
// OR
//if (msg.which == 0) <<< "joystick axis", msg.which, ":", msg.axisPosition >>>;
//if (msg.which == 1) <<< "joystick axis", msg.which, ":", msg.axisPosition >>>;
}
// joystick button down
else if( msg.isButtonDown() )
{
<<< "joystick button", msg.which, "down" >>>;
if(msg.which==0){
me.dir()+"/audio/Laser Blasts-SoundBible.com-108608437.wav"=> blaster.read;
.2::second=>now;
}
if(msg.which==4 || msg.which==2 ||msg.which==3 ||msg.which==5){
me.dir()+"/audio/smw_coin.wav"=> jump.read;
.2::second=>now;
}
}
// joystick button up
else if( msg.isButtonUp() )
{
<<< "joystick button", msg.which, "up" >>>;
}
// joystick hat/POV switch/d-pad motion
else if( msg.isHatMotion() && msg.idata==0)
{
<<< "joystick hat", msg.which, ":", msg.idata >>>;
me.dir()+"/audio/smb_powerup.wav"=> power_up.read;
.2::second=>now;
}
}
}