godking.xinput 手柄支持库

光庆 9小时前 56

使用微软 XInput Game Controller API,使应用程序能够从控制器接收输入。

可以写支持手柄的程序了。

undefined

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();


上传的附件:
最新回复 (1)
  • cgfriend 9小时前
    0 2
    这个有点牛逼了
返回