2014-01-26 2 views
0

Создание точки и касания игры, когда пользователь нажимает на что-то интерактивное, будет отображаться колесо принятия решений, которое дает 3 варианта. Действие, чат или исследование. Я централизовал все вокруг основного обработчика. Так что если это интерактивный объект, создайте новое колесо принятия решений и добавьте слушателя, когда будет принято решение, чтобы затем вызвать «Продолжить с помощью решения». Перед тем, как он будет показан, я добавлю темную накладку, чтобы пользователь не мог вмешиваться в что-либо на экране, пока не будет принято решение.Starling Отправление новых объектов при принятии решения

Любые предложения по лучшему подходу к этому? Очевидно, что каждый раз я знаю, что каждый раз создаю новый объект, а затем вызываем removeFromParent (true) каждый раз, когда он заканчивается, это плохая идея для производительности.

Передаваемый объект содержит атрибуты объекта, который был затронут. Такие, как id и x и y, поэтому я знаю, где позиционировать решающее колесо на экране.

Мой главный вопрос: Как настроить его, так что у меня есть только один объект решения, вместо того чтобы повторно создавать новый экземпляр каждый раз, когда что-то прикасается?

override protected function createDecisionWheel(object:Object):void 
    { 
     if (!GameState.AWAITING_DECISION) { 

      //create bg overlay 
      _overlay = new Overlay(); 
      addChild(_overlay); 

      //waiting for decision from user 
      GameState.AWAITING_DECISION = true; 

      _decisionWheel = new DecisionWheel(object); 
      addChild(_decisionWheel); 

      _decisionWheel.x = _decisionWheel.positionDecisionWheelX(object._x, _backgroundPosition); 
      _decisionWheel.y = _decisionWheel.positionDecisionWheelY(object._y, _backgroundPosition); 

      addEventListener("DecisionMade", proceedWithDecision); 
     } 
    } 

    override protected function proceedWithDecision(e:Event):void 
    { 
     removeEventListener("DecisionMade", proceedWithDecision); 

     //remove once decision has been made @TODO 
     _decisionWheel.removeDecisionWheel(); 
     _overlay.removeOverlay(); 

     //reset 
     GameState.AWAITING_DECISION = false; 

     trace("proceed with decision"); 
    } 
+0

не уверен, что вы просите. Вы спрашиваете о touchable = false? – mika

+0

обновил сообщение с основным вопросом :) – SMKS

ответ

0

Определить переменную-член:

private var _decisionWheel:DecisionWheel; 

в конструкторе:

_decisionWheel = new DecisionWheel(object); 
addChild(_decisionWheel); 
_decisionWheel.visible = false; 

Тогда просто переключать _decisionWheel.visible - при принятии решения:

_decisionWheel.visible = true; 
_decisionWheel.x = _decisionWheel.positionDecisionWheelX(object._x, _backgroundPosition); 
_decisionWheel.y = _decisionWheel.positionDecisionWheelY(object._y, _backgroundPosition); 
// and watever more mapping you need to add 

Затем приступают с решением:

_decisionWheel.visible = true; 

Обратите внимание, что если вы хотите использовать removeFromParent, убедитесь, что вы removeFromParent (ложь), чтобы ваш объект не расположен.

Смежные вопросы