PDA

Просмотр полной версии : Назначение фокуса экземпляру класса


moskitos80
22.11.2009, 19:06
Доброго времени суток, уважаемые. Подскажите пожалуйста, как назначить фокус на динамически создаваемый экземпляр объекта класса? У меня проблема в следующем:
При запуске приложения загружается главный класс игры, который загружает экз. класса заставки с двумя кнопками - одна из них "играть" при нажатии на ней главный класс удаляет заставку и загружает экземпляр класса "game", который в свою очередь загружает экз. класса главного героя, и экземпляр нужного уровня.
Теперь ситуация: при загрузке уровня пока не кликну по окну мышкой т.е. не дам ему фокус - герой не бегает. События нажатия кнопок навесил на stage класса героя (по другому не работает). К сожалению код предоставить не могу: он очень большой и в разных файлах. Имея предоставленную информацию кто нибудь сможет подсказать?

derhab
22.11.2009, 19:16
по умолчанию после загрузки флэшка в браузере не имеет фокуса...пока не кликните по ней клавишные события не отрабатываются...

moskitos80
22.11.2009, 19:30
А если игрушка запускается не в браузере, а сразу на компьютере?

SamFR
22.11.2009, 20:23
Должно быть всё нормально.
В случае же запуска из-под браузера поможет использование SWFObject.

derhab
22.11.2009, 23:27
В случае же запуска из-под браузера поможет использование SWFObject.
что, внедренный через SWFObject ролик сразу получает фокус, так что обрабатываются клавишные события?

SamFR
23.11.2009, 01:09
Такой код должен работать:


<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 тоже можно, но чуть сложнее.

derhab
23.11.2009, 01:28
проверяли?)

SamFR
23.11.2009, 01:33
Да, и давно этим пользуюсь.

Единственная проблема состоит в том, что этот метод не работает для браузеров, основанных на WebKit, из-за глючного метода focus(). Глюк устранить обещаются давно, но пока никак.

Есть извращённые методы с callback-функциями, но уж очень они извращённы :) Если кто-то знает нормальный вариант – поделитесь, пожалуйста)

derhab
23.11.2009, 01:48
Единственная проблема состоит в том, что этот метод не работает для браузеров, основанных на WebKit
ну вот и я помню что не во всех браузерах яваскриптовые решения этой проблемы работают...

SamFR
23.11.2009, 01:58
другого, к сожалению, я не знаю, кроме того самого варианта с 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);
}



Теперь новая проблема: вокруг объекта жёлтый контейнер...
Но помнится это мы уже проходили, кто нибудь вспомнит, как его убрать не убирая фокуса объекта?

wvxvw
24.11.2009, 03:33
mySprite.focusRect = false;

moskitos80
24.11.2009, 12:44
Да - отлично! Так и есть. Спасибо wvxvw и adobe.com/help/

Himerets
24.11.2009, 14:33
Так вот зачем нужен параметр focusRect! :)

anikey
25.01.2014, 15:58
Спасибо большое moskitos80 и wvxvw. А то полдня гуглил на эту тему, только здесь нашел искомое решение. А чтение Мука, конечно, вещь нужная и пользительная, но уж больше смахивает на мазохизм.