#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()
на корневой временной шкале. Это установит переменную и отправит событие. Если рука присутствует, она увидит событие и обновит себя. Если рука отсутствует, при следующем создании экземпляра руки он посмотрит на глобальную переменную и соответствующим образом изменится.