GameInput.DEVICE_ADDED 应用程序启动时不触发
GameInput.DEVICE_ADDED not triggering at application startup
我发布这个问题是因为我在 adobe AIR 桌面应用程序中遇到了 GameInput API 的小问题。
我在测试应用程序中测试了 API,它工作得很好。但是,当我将它添加到我的真实应用程序(游戏)中时,它不再在启动时触发。
其他一切正常,如果我 disconnect/reconnect 控制器,一切正常。但是,回调函数的初始触发器不再起作用。
知道为什么吗?
这是我的做法:
if (GameInput.isSupported) //GAMEPADS SUPPORT
{
gameInput = new GameInput();
gameInput.addEventListener(GameInputEvent.DEVICE_ADDED, controllerAdded);
gameInput.addEventListener(GameInputEvent.DEVICE_REMOVED, controllerRemoved);
gameInput.addEventListener(GameInputEvent.DEVICE_UNUSABLE, controllerProblem);
} //GAMEPAD SUPPORT
public function controllerAdded(e:GameInputEvent):void
{
var vec:Vector.<String> = new Vector.<String>();
gamepad = GameInput.getDeviceAt(0);
vec[0] = gamepad.getControlAt(0).id;
gamepad.enabled = true;
gamepad.sampleInterval = 10;
gamepad.startCachingSamples(5, vec); // numSamples = 5
for (var i:int = 0; i < gamepad.numControls; ++i)
gamepad.getControlAt(i).addEventListener(Event.CHANGE, handleChangeEvent);
}
我猜这可能是焦点问题或相关问题,但我真的不明白为什么会这样。
我的应用程序如下所示:
Core(class 从 swf 调用并管理整个应用程序)
Screens(不同class继承movieclip但内部有逻辑的,比如game,optionscreen等)
Gameinput api 初始化在核心中完成,在对象实例化之后(使用 Event.ADDED_TO_STAGE)。
GameInputEvent class 表示在应用程序平台添加或删除游戏输入设备时调度的事件
因此,如果您启动该应用程序并且已经拥有设备,则不会触发任何事件,这听起来像是您的问题。为什么不在初始化期间检查设备,然后在此时使用它们?
if (GameInput.isSupported) //GAMEPADS SUPPORT
{
gameInput = new GameInput();
gameInput.addEventListener(GameInputEvent.DEVICE_ADDED, controllerAdded);
gameInput.addEventListener(GameInputEvent.DEVICE_REMOVED, controllerRemoved);
gameInput.addEventListener(GameInputEvent.DEVICE_UNUSABLE, controllerProblem);
if(GameInput.numDevices > 0) {
/*enter code here/*
}
}
看来 Adobe 的 GameInput API 太不稳定了。
我决定改用 AirControl,它的效果更好...
因此,我要结束这个问题。
我发布这个问题是因为我在 adobe AIR 桌面应用程序中遇到了 GameInput API 的小问题。 我在测试应用程序中测试了 API,它工作得很好。但是,当我将它添加到我的真实应用程序(游戏)中时,它不再在启动时触发。
其他一切正常,如果我 disconnect/reconnect 控制器,一切正常。但是,回调函数的初始触发器不再起作用。
知道为什么吗? 这是我的做法:
if (GameInput.isSupported) //GAMEPADS SUPPORT
{
gameInput = new GameInput();
gameInput.addEventListener(GameInputEvent.DEVICE_ADDED, controllerAdded);
gameInput.addEventListener(GameInputEvent.DEVICE_REMOVED, controllerRemoved);
gameInput.addEventListener(GameInputEvent.DEVICE_UNUSABLE, controllerProblem);
} //GAMEPAD SUPPORT
public function controllerAdded(e:GameInputEvent):void
{
var vec:Vector.<String> = new Vector.<String>();
gamepad = GameInput.getDeviceAt(0);
vec[0] = gamepad.getControlAt(0).id;
gamepad.enabled = true;
gamepad.sampleInterval = 10;
gamepad.startCachingSamples(5, vec); // numSamples = 5
for (var i:int = 0; i < gamepad.numControls; ++i)
gamepad.getControlAt(i).addEventListener(Event.CHANGE, handleChangeEvent);
}
我猜这可能是焦点问题或相关问题,但我真的不明白为什么会这样。 我的应用程序如下所示: Core(class 从 swf 调用并管理整个应用程序)
Screens(不同class继承movieclip但内部有逻辑的,比如game,optionscreen等)
Gameinput api 初始化在核心中完成,在对象实例化之后(使用 Event.ADDED_TO_STAGE)。
GameInputEvent class 表示在应用程序平台添加或删除游戏输入设备时调度的事件
因此,如果您启动该应用程序并且已经拥有设备,则不会触发任何事件,这听起来像是您的问题。为什么不在初始化期间检查设备,然后在此时使用它们?
if (GameInput.isSupported) //GAMEPADS SUPPORT
{
gameInput = new GameInput();
gameInput.addEventListener(GameInputEvent.DEVICE_ADDED, controllerAdded);
gameInput.addEventListener(GameInputEvent.DEVICE_REMOVED, controllerRemoved);
gameInput.addEventListener(GameInputEvent.DEVICE_UNUSABLE, controllerProblem);
if(GameInput.numDevices > 0) {
/*enter code here/*
}
}
看来 Adobe 的 GameInput API 太不稳定了。
我决定改用 AirControl,它的效果更好... 因此,我要结束这个问题。