Просмотр полной версии : Назначение фокуса экземпляру класса
moskitos80
22.11.2009, 19:06
Доброго времени суток, уважаемые. Подскажите пожалуйста, как назначить фокус на динамически создаваемый экземпляр объекта класса? У меня проблема в следующем:
При запуске приложения загружается главный класс игры, который загружает экз. класса заставки с двумя кнопками - одна из них "играть" при нажатии на ней главный класс удаляет заставку и загружает экземпляр класса "game", который в свою очередь загружает экз. класса главного героя, и экземпляр нужного уровня.
Теперь ситуация: при загрузке уровня пока не кликну по окну мышкой т.е. не дам ему фокус - герой не бегает. События нажатия кнопок навесил на stage класса героя (по другому не работает). К сожалению код предоставить не могу: он очень большой и в разных файлах. Имея предоставленную информацию кто нибудь сможет подсказать?
по умолчанию после загрузки флэшка в браузере не имеет фокуса...пока не кликните по ней клавишные события не отрабатываются...
moskitos80
22.11.2009, 19:30
А если игрушка запускается не в браузере, а сразу на компьютере?
Должно быть всё нормально.
В случае же запуска из-под браузера поможет использование SWFObject.
В случае же запуска из-под браузера поможет использование SWFObject.
что, внедренный через SWFObject ролик сразу получает фокус, так что обрабатываются клавишные события?
Такой код должен работать:
<SCRIPT type=text/javascript>
var objId = "flashContentId";
var movieSize = {w:"550", h:"60"};
var params = {menu: "false", allowNetworking: "all"};
function setFocusOnFlash() {
var flashObj = document.getElementById(objId);
if (flashObj) flashObj.focus();
}
swfobject.embedSWF("movie.swf", objId, movieSize.w, movieSize.h, "9.0.0", false, false, params, false);
if(swfobject.hasFlashPlayerVersion("9.0.0")) {
swfobject.addDomLoadEvent(setFocusOnFlash);
}
</SCRIPT>
Без SWFObject тоже можно, но чуть сложнее.
Да, и давно этим пользуюсь.
Единственная проблема состоит в том, что этот метод не работает для браузеров, основанных на WebKit, из-за глючного метода focus(). Глюк устранить обещаются давно, но пока никак.
Есть извращённые методы с callback-функциями, но уж очень они извращённы :) Если кто-то знает нормальный вариант – поделитесь, пожалуйста)
Единственная проблема состоит в том, что этот метод не работает для браузеров, основанных на WebKit
ну вот и я помню что не во всех браузерах яваскриптовые решения этой проблемы работают...
другого, к сожалению, я не знаю, кроме того самого варианта с callback-функциями...
кому интересно: Fixing Firefox Flash Foolishness (http://wwwx.cs.unc.edu/~gb/wp/blog/2007/06/08/fixing-firefox-flash-foolishness/)
moskitos80
24.11.2009, 01:42
Почитал Мука. Нашёл в гл. 22 решение своего вопроса:
var circ:Circ = new Circ();//Создатим экз. класса Circ расширяющий сласс MovieClip
circ.x = 100;//Это от
circ.y = 150;//балды
addChild(circ);
stage.focus = circ;//Здесь то и устанавливаем на него фокус
Если контейнер отображения объекта другой объект, то код будет следующий:
var container:Sprite = new Sprite();
addChild(container);// делаем container отображаемым потомком stage
var circ:Circ = new Circ();//Создатим экз. класса Circ расширяющий сласс MovieClip
circ.x = 100;//Это опять
circ.y = 150;// от балды
container.addChild(circ);
container.stage.focus = circ;//Здесь устанавливаем фокус на circ
Кстати тому, кто не знал до кучи. Выдаёт много интересного:
stage.addEventListener(KeyboardEvent.KEY_DOWN,KEY_DOWN);
function KEY_DOWN(e:KeyboardEvent):void
{
trace(e);
}
Теперь новая проблема: вокруг объекта жёлтый контейнер...
Но помнится это мы уже проходили, кто нибудь вспомнит, как его убрать не убирая фокуса объекта?
mySprite.focusRect = false;
moskitos80
24.11.2009, 12:44
Да - отлично! Так и есть. Спасибо wvxvw и adobe.com/help/
Himerets
24.11.2009, 14:33
Так вот зачем нужен параметр focusRect! :)
Спасибо большое moskitos80 и wvxvw. А то полдня гуглил на эту тему, только здесь нашел искомое решение. А чтение Мука, конечно, вещь нужная и пользительная, но уж больше смахивает на мазохизм.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.