Flash cs6 as3: программное изменение видеоролика, связанного с классом, без использования экземпляра класса

#actionscript-3 #flash

#actionscript-3 #вспышка #flash

Вопрос:

Я нахожусь в процессе создания игры. Я бы хотел, чтобы мой главный герой мог программно экипировать оружие / броню и еще много чего. У него есть рука, в которой, если я вручную отредактирую меч, анимация будет работать нормально, однако я не хочу, чтобы он начинал с меча, оснащенного.

К сожалению, я не могу получить доступ к экземпляру этой раздачи, потому что она присутствует только в течение 10 кадров во время анимации атаки. Если я задам имя экземпляра для руки на временной шкале (кадры 110-120) Я не могу ссылаться на него из класса character.

Есть ли способ получить доступ к моему классу «arm» и программно добавить мой спрайт sword в связанный видеоролик, не имея доступного экземпляра класса arm? Я рассматривал возможность замены видеоролика arm на видеоролик с уже добавленным sword — но я сталкиваюсь с той же проблемой невозможности доступа к экземпляру, который присутствует только во время некоторых кадров.

Я попытался сделать свой вопрос как можно более понятным, надеюсь, это сработало. Большое вам спасибо за любую информацию, которую вы можете предоставить.

Комментарии:

1. Просто постоянно держите руку и меч на виду и меняйте их .visible свойства по мере необходимости.

2. Это лучший способ сделать это, если в итоге у меня будет более 100 различных видов оружия? Не то чтобы я планировал это, но мне любопытно, так ли это традиционно делается.

3. Вам нужно показать свой код того, как вы в настоящее время «обновляете», чтобы кто-нибудь действительно мог вам помочь.

4. «Традиционно» это можно было бы сделать с файлами класса, а не с кодом временной шкалы, поскольку код временной шкалы неуклюж. Лучшим способом было бы иметь код в вашем классе arm / hand (или временной шкале), который запускается при его создании, чтобы узнать, должен ли у него быть sword (и какой), и создать его (или нет) по мере необходимости.

5. RE: Видимость с более чем 100 видами оружия — было бы неплохо, если бы у вас был видеоролик с мастер-мечом и ваши отдельные мечи сохранялись как разные кадры этой временной шкалы, тогда у вас был бы загружен только один экземпляр в любое время.

Ответ №1:

Вот самый простой (хотя и не лучший) способ, которым вы могли бы это сделать.

На вашей основной (корневой) временной шкале поместите следующий код:

 var weaponId:int = 1;  //never modify this directly, use the function below so the event gets dispatached. - This value will correspond to frame in your weapon movieClip that will contain the correct graphic of the selected weapon.

function changeWeapon(id:int):void {
    weaponId = id;
    this.dispatchEvent(new Event("WeaponChange")); //this will dispatch an event, so anything listening for this event will know it's been changed
}
  

На вашей ручной временной шкале поместите следующий код:

 MovieClip(root).addEventListener("WeaponChange",updateWeapon,false,0,true); //listen for when the weapon changes

updateWeapon(); //update the weapon immediately to the current value

function updateWeapon(e:Event = null):void {
    weapon.gotoAndStop(MovieClip(root).weaponId); //assuming your hand timeline has a movieClip on it called weapon and each frame of weapon corresponds to the weaponId
}
  

Вот что происходит:

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