GameInput.DEVICE_ADDED在应用程序启动时不会触发

时间:2015-07-16 19:58:56

标签: actionscript-3 air gamepad-api

我发布此问题是因为我在adobe AIR桌面应用中遇到了GameInput API的一些问题。 我在测试应用程序中测试了API,它运行得很好。但是,当我将它添加到我的真实应用程序(游戏)时,它在启动时不再触发。

其他一切正常,如果我断开/重新连接控制器,一切正常。但是,回调函数的初始触发器不再起作用。

知道为什么吗? 这是我的所作所为:

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

我猜它可能是一个焦点问题或相关的东西,但我真的不明白为什么会发生这种情况。 我的应用程序如下所示: 核心(从swf调用的类并管理整个应用程序)

屏幕(继承movieclip但内部有逻辑的不同类,如游戏,选项屏幕等)。

在对象实例化后(使用Event.ADDED_TO_STAGE),Gameinput api初始化在核心中完成。

2 个答案:

答案 0 :(得分:0)

GameInputEvent类表示在应用程序平台中添加或删除游戏输入设备时调度的事件

因此,如果您启动应用并且已经拥有设备,则不会触发任何类似您的问题的事件。为什么不在初始化期间检查设备,然后在那时与它们一起工作?

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/* 
    }
}    

答案 1 :(得分:0)

似乎Adobe的GameInput API太不稳定了。

我已经决定使用AirControl而且效果更好...... 因此,我结束了这个问题。