使用微软 XInput Game Controller API,使应用程序能够从控制器接收输入。
可以写支持手柄的程序了。


import console;
import godking.xinput
var x = godking.xinput(1/*手柄序号*/,/*XInput文件*/);
for(i=1;10000;1){
console.dump(x.getState(true/*是否自动解析ButtonList表*/));
sleep(30);
}
console.pause();import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="点我开始移动";left=300;top=335;right=475;bottom=415;bgcolor=0x00FF00;color=0x000080;font=LOGFONT(h=-16);z=1};
button2={cls="button";text="别碰到我";left=290;top=50;right=475;bottom=140;bgcolor=0x0000FF;color=0x00FFFF;font=LOGFONT(h=-35);z=2}
)
/*}}*/
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="点我开始移动";left=300;top=335;right=475;bottom=415;bgcolor=0x00FF00;color=0x000080;font=LOGFONT(h=-16);z=1};
button2={cls="button";text="别碰到我";left=290;top=50;right=475;bottom=140;bgcolor=0x0000FF;color=0x00FFFF;font=LOGFONT(h=-35);z=2}
)
/*}}*/
import godking.xinput
import godking.message
//定义input对象,检测是否有手柄
var xinput = godking.xinput(1/*手柄序号*/,/*XInput文件*/);
if !xinput {
winform.msgErr("没有检测到手柄!");
}
//定义一个全局定时器
var timer;
winform.button.oncommand = function(id,event){
if !timer {
//禁用按钮
winform.button.disabledText = ["✶","✸","✹","✺","✹","✷"]
//启用定时器
timer = winform.setInterval(
function(){
//获取手柄按键状态
var state = xinput.getState(true/*是否自动解析ButtonList表*/);
//获取按钮坐标
var x,y = winform.button.getPos();
//根据左摇杆位置,计算按钮偏移距离
x += state.LX/3276;
y -= state.LY/3276;
//移动按钮到新位置
winform.button.setPos(x,y);
//计算两个按钮是否碰撞
var rect = winform.button.getRect();
var rect1 = winform.button2.getRect();
if rect.left<rect1.right and rect.right>rect1.left and rect.top<rect1.bottom and rect.bottom>rect1.top {
//清除定时器
winform.clearInterval(timer);
timer = null;
//使手柄震动
xinput.vibrate(100/*左强度*/,100/*右强度*/);
//定时500ms后取消震动
winform.setTimeout(xinput.vibrate,500,0,0);
//弹出提示框
winform.msgGreat("您成功碰到我了");
}
},50 //定时器间隔50ms
)
}
}
winform.show();
win.loopMessage();