Почему мой KeyboardEvent не работает в моей игре? - PullRequest
0 голосов
/ 24 августа 2011

Мне нужно использовать flash as3 для создания игры, и я попытался использовать 3 слоя для загрузки моего SWF.Моя игра находится на третьем слое, а первый и второй слои - всего лишь сценарий предварительного загрузчика.

Моя проблема в том, что когда игра загружается на стадию первого слоя, моя функция KeyboardEvent не работает, пока янажмите на сцену.

Я пытаюсь использовать Event.ADDED_TO_STAGE, чтобы решить ее, но я также получаю ту же ошибку.

это мой код для preloader

var request:URLRequest = new URLRequest("game.swf");
var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

function loadProgress(event:ProgressEvent):void
{
    var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;
    percentLoaded = Math.round(percentLoaded * 100);

    //this.percentLoaded.text = String(uint(percentLoaded)) + "%";
}

function loadComplete(event:Event):void
{
    trace("Load Complete");
}

loader.load(request);
this.addChild(loader);

А это мой игровой сценарий на временной шкале

if(stage != null) {
    stageAddHandler(null);
} else {
    addEventListener(Event.ADDED_TO_STAGE, stageAddHandler);
}

function stageAddHandler(e:Event = null):void {

stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);


}

Есть идеи по этому поводу?

Спасибо за продвижение

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

это обычная функция безопасности Flash Player.пользователи должны сначала щелкнуть, чтобы установить фокус на сцене, чтобы получать события клавиатуры.

Вы можете обойти это ограничение, например, введя свои имена в текстовое поле, которое они будутсначала нужно выбрать с помощью мыши, или чтобы они нажали «Начать игру!»Кнопка до начала игры.

[EDIT] Обходной путь может включать вызов функции javascript через ExternalInterface , которая установит фокус на встроенном SWFЯ не проверял это, но это (или что-то подобное) должно работать:

ActionScript:

package
{
    //Imports
    import flash.display.Sprite;
    import flash.external.ExternalInterface;

    //Class
    public class AS3DocumentClass extends Sprite
    {
        //Constructor
        public function AS3DocumentClass()
        {
            init();
        }

        //Initialize
        private function init():void
        {
            var extInterface = new ExternalInterface();
            extInterface.call("initSwfFocus");
        }
    }
}

JavaScript:

<script type="text/javascript" language="javascript">
    function initSwfFocus()
    {
        document.getElementById("mySWF").focus();
    }
</script>
1 голос
/ 30 января 2012

Существуют три потенциальные проблемы, которые могут привести к тому, что события клавиатуры не будут работать должным образом:

  1. Flash-объект внутри html-страницы не активен (то есть не находится в фокусе).Это может быть решено с помощью вышеописанного решения javascript, но обычно пользователь должен щелкнуть что-либо в приложении, прежде чем потребуется ввод с клавиатуры.

  2. Объект, который вы добавили в KeyboardEvent, isnне в фокусе.Чтобы это исправить, добавьте слушателя на сцену.

  3. Если вы используете SWF-файл «обертку» или «загрузчик» для загрузки в основное приложение, и ваш первый и единственный щелчок находится в SWF-обертке, у вас возникнут проблемы сфокусировка объекта, поэтому при добавлении объектов основного приложения и KeyboardEvents установите фокус-объект сцены как сцену (this.stage.focus = this.stage).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...