PDA

Просмотр полной версии : Фокус в Flex/AS приложениях


tosh
01.08.2010, 19:08
Понадобилось прикрутить Flex к игре, пишущейся на движке Flixel.
Имеем вот такой код флекса:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout = "absolute"
width = "640"
height = "480"
applicationComplete = "appComplete()" xmlns:ns1="*">
<mx:Style source="flex_game.css"/>

<mx:Script>
<![CDATA[
import com.adamatomic.Mode.States.PlayState;
import flash.events.FocusEvent;

protected function appComplete():void
{
var game:Game2 = new Game2()
var display:display_ui_object = new display_ui_object(game);

this.addChild(display);
this.addChild(push);
this.addChild(console_out);
this.addChild(console_in);
}

]]>
</mx:Script>

<mx:TextArea
id="console_in"
x="5"
width="630"
height="98"
editable="false"
y="355"
focusOut="PlayState.activate_player()" focusIn="PlayState.deactivate_player()"
/>
<mx:TextInput
id="console_out"
x="5" y="454"
width="552"
color="#000000"
focusOut="PlayState.activate_player()" focusIn="PlayState.deactivate_player()"
/>
<mx:Button
id="push"
x="564"
y="455"
label="Жмак!"
focusOut="PlayState.activate_player()" focusIn="PlayState.deactivate_player()"
/>
</mx:Application>
И такой кусок на AS:
package
{
import flash.display.DisplayObject;
import mx.core.UIComponent;

public class display_ui_object extends UIComponent
{
public function display_ui_object (sprite: DisplayObject)
{
super();

focusEnabled = true;
mouseFocusEnabled = true;

explicitHeight = sprite.height;
explicitWidth = sprite.width;

addChild(sprite);
}
}
}

Т.е. игра обертывается в UIComponent и передается во флекс. Далее проблема всего одна: этот самый UIComponent (игра) не получает фокус. Нажимаем на один из флексовых виджетов - фокус теряется, обратно клацаем на игру - фокус не возвращается. Вопрос: во что обернуть игру, чтобы она получала фокус или как заставить ее делать другими способами?

litebox
11.08.2010, 18:50
попробуйте расширить класс display_ui_object интерфейсом mx.managers.IFocusManagerComponent