2013-03-03 5 views
0

Внутри flash cs6 Я нарисовал флеш-мувиклип, в котором я установил параметры экспорта как abc.Gameboard. Внутри игрового поля у меня есть куча штук (символ: Piece), которые я экспортирую как abc.Piece - оба базового класса, установленные в MovieClip и с файлами классов. У части есть метки фреймов, такие как удар, и т. Д. Моя проблема заключается в доступе к фрагментам в коде, чтобы я мог, например. gotoAndPlay («mine») - на данный момент событие срабатывает только один раз, что является последней частью на доске. Я могу установить действие рамки на этом последнем фрагменте, но хотел бы выяснить, как это сделать для каждой части.Невозможно получить доступ к детям в видеоклипе

добавить игровое поле на сцену, как так

var gb:Gameboard = new Gameboard(); 
gb.name = "gb001"; 
contextView.addChild(gb); 

Тогда

contextView.addEventListener(Event.ADDED, thingAdded); 

private function thingAdded(event:Event):void 
{ 
    var type:String = event.target.toString(); 
    switch(type) 
    { 
     // this runs only once - i want it to run for each piece that is inside the symbol 
     case "[object Piece]": 

     var p:MovieClip = event.target as Piece; 
     p.gotoAndPlay("mine"); 
     break; 
    } 
} 

или, если есть лучший способ это было бы здорово .. это выглядит довольно неуклюжим

Редактировать : Бит больше о том, как я пытаюсь построить игровое поле Нарисуйте коллекцию фигур в иллюстраторе - маску это (игровая площадка). Импорт во Flash как графический. Преобразуйте графику в несколько символов мувиклипа (поэтому JSFL может развернуть и получить доступ к замаскированным фрагментам) - запустить скрипт JSFL &, чтобы создать 00 штук. Затем я устанавливаю параметры экспорта на Piece и Gameboard и добавляю Gameboard к контекстуру.

ответ

0

Я на самом деле написал entire article об этом сразу. Событие ADDED должно срабатывать один раз для каждого добавленного объекта DisplayObject. Вы уверены, что не используете ADDED_TO_STAGE, который не пузырится? Если вы используете ADDED_TO_STAGE, вам необходимо установить для параметра useCapture значение true, чтобы оно срабатывало для всех детей.

Если вы хотите задействовать RobotLegs в процессе, возможно, лучший способ - просто создать класс «маркер» для каждой конкретной кнопки, которую вы хотите вести по-другому, а затем зарегистрировать медиатор для каждого класса, будет управлять поведением. У Robotlegs уже есть крючки, встроенные для прослушивания ADDED_TO_STAGE и делать это.

Тем не менее, вы также можете рассмотреть возможность использования Flash IDE, для чего он предназначен, что помещает материал на сцену. В этом случае ваш экземпляр GameBoard будет готов в конструкторе вашего основного документа Class, чтобы вы могли делать с ним все, что хотите.

MPO - это логика, которая является снаружи. Игровой стенд не должен знать или заботиться о том, как он работает внутри страны, и, честно говоря, вероятно, это не должно быть обязанностью GameBoard обрабатывать простые вещи, такие как кнопки над состояниями и вещами. Это должно быть до самой кнопки. Если кнопкам не нужно переключаться или что-либо помимо того, что обрабатывает SimpleButton, вы можете просто объявить экземпляры кнопок как Button в библиотеке вместо MovieClip и получить все эти материалы бесплатно, вместо того, чтобы их кодировать самостоятельно.

Часть того, чтобы быть хорошим кодером, в состоянии выяснить способы не, чтобы закодировать все.

+0

Спасибо Эми. Бит больше информации, я использую Illustrator/Flash и JSFL для создания клипов клипов 00, которые затем используют расширение JSFL для назначения их одному символу Piece (но сохраняйте их расположение в сцене). вместо стандартного r-leg mediator/signal/command structure с contextView ... addChild (штук), который теперь работает, просто для того, чтобы иметь больше контроля за дизайном. Я пробовал как ADDED, так и ADDED_TO_STAGE, но не использовал флаг захвата, который я попробую. – MikeW

+0

И почему Piece не может снова определить функциональность над состоянием? –

+0

Все состояния определены на временной шкале Piece внутри IDE, так что, удары, вниз, все работает нормально. У меня есть еще 2 состояния, которые запускаются из команды robotlegs (думаю, многопользовательское сообщение), называемое «мое» и «их» - это два состояния, которые я пытаюсь установить. И его единственная последняя часть на доске, которая может установить эти состояния, - но я еще не попробовал ваше предложение captureFlag. – MikeW

0

в их игровой доске внутри куска? Я хочу точно знать вашу структуру Gameboard.

Если вы правы. попробуйте это:

function thingAdded(e:Event):void 
{ 
    if(!e.target is Gameboard) return; 

    var mc:Gameboard = Gameboard(e.target); 

    var i:int = 0; 
    while(i<mc.numChildren) 
    { 
     if(mc.getChildAt(i) is Piece) 
     { 
      var piece:Piece = Piece(mc.getChildAt(i)); 

      piece.gotoAndStop(2); 
     } 
     i++; 
    } 
} 

Вот мой пример кода: Gameboard

+0

спасибо за это - я скачу и попробую дома позже - добавил несколько комментариев о том, как устроена игровая площадка. – MikeW

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