2015-12-19 2 views
0

У меня есть четыре мувиклипа (игрок, одна рука, другая рука и оружие), руки помещаются в игрока, и оружие помещается в руки. У игрока должен быть один рычаг, который отображается под ним. И оружие, и другое оружие, которое должно отображаться поверх него.as3 - Как сделать два мувиклипа по одному и тому же коду?

Однако у меня есть два плеча, как два разных мувиклипа, но оба они имеют одинаковый точный код. Если бы я держал оба в одном и том же мувиклипе, обе руки отображали бы сверху игрока или оба отображались под игроком. И вы не можете разбить один мувиклип на два слоя. И вы не можете иметь двух мувиклипов, разделяющих один класс.

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

+0

Вы хотите, чтобы обе руки имели один и тот же код (без необходимости писать код дважды)? это то, что вы спрашиваете? – BadFeelingAboutThis

+0

Не могли бы вы лучше объяснить свой вопрос? Я не понимаю эту часть: «Как скрепить эти два оружия и сделать их менее утомительными». – ElChiniNet

+0

@BadFeelingAboutThis Да, вот что я имею в виду. – Crook

ответ

2

Чистейший подход должен был бы сделать базовый класс. Вы можете сделать PlayerArmBase.as файл рядом с вашим файлом .fla, и он выглядит примерно так:

package { 
    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class PlayerArmBase extends MovieClip { 
     public function PlayerArmBase(){ 
      //don't do anything until this item has been added to stage/timeline 
      this.addEventListener(Event.ADDED_TO_STAGE, addedToStage, false,0,true); 
     } 

     protected function addedToStage(e:Event):void { 
      //this is the equivalent of where timeline code runs 
      //put your code here for your arms 

      //for example: 
      this.addEventListener(Event.ENTER_FRAME, enterFrame, false, 0, true); 
     } 

     protected function enterFrame(e:Event):void { 
      //do something every frame tick like point to the mouse position 
     } 
    } 
} 

Теперь вы можете сделать и руки продлить этот базовый класс. Чтобы сделать это, щелкните правой кнопкой мыши каждую руку в flash pro и выберите их свойства. Установите флажок «Экспорт для действий» в дополнительных настройках, затем в поле «Базовый класс» введите имя вашего класса.

enter image description here

Теперь весь код в этом классе будет применяться для обеих рук MovieClips.


В качестве альтернативы, вы можете поместить все общий код в базовом классе, а затем сделать еще 2 класса (один для каждой руки) и поставить специальный код в тех и у них расширить базовый класс. Это то же самое, что и на графике выше, за исключением поля базового класса, в поле класса введите LeftArm.

Таким образом, у вас есть код, специфичный для каждой руки в своем классе, но у всех есть общий код в одном месте. Суперклассы могут получить доступ ко всем функциям и vars, объявленным с помощью общедоступных или защищенных ключевых слов. защищенный, как частный, кроме супер-классов, все равно может получить к нему доступ. private может использоваться только в классе, в котором вы его определили.

+0

Базовый класс работал для меня. Благодарю. Не могли бы вы объяснить, что мне нужно сделать, если я хочу расширить базовый класс? Ошибка 1152: существует конфликт с унаследованным определением. Он указывает мне на все переменные/импорт, которые у меня есть в классе, расширенном от базового класса. – Crook

+0

Можете ли вы отправить ссылку на пастообразную ссылку (или аналогичную) ваших файлов классов. Эта ошибка обычно означает, что вы пытаетесь определить то, что уже определено в базовом классе. Если вы определяете var или функцию в базовом классе как общедоступную или защищенную, то вам не нужно определять ее снова в классах, которые ее расширяют. – BadFeelingAboutThis

1

Как я уже говорил в комментариях, я не хотел, чтобы закодировать внутри MovieClips, но если вы предпочитаете работать таким образом, сделать следующее:

Поместите код внутри пустой MovieClip, а затем положить что MovieClip внутри каждой руки MovieClip и сделайте переменную, ссылающуюся на родителя, чтобы сделать необходимые преобразования.

Here вам пример

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