![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
Здравствуйте уважаемые, сделал где то с месяц назад плейсхолдер для персонажа в который передаются разные изображения оружия. Тогда показалось что все нормально сделано, но сейчас понятно что все через ( ! ). Помогите пожалуйста советом как сделать правильно. Вот что у меня сейчас:
public function buttonOn(e:Event):void //EnterFrame { if (Heroes.hero.oneHandedStance) //какой вид оружия надет { WeaponDualMh.duMh.addChild(weaponDualMh); //В класс плейсхолдера оружия } //добавляется клип(пока пустой) } И что получается: при смене кадров персонажа,в плейсхолдер оружия постоянно передается клип оружия по EnterFrame из-за чего происходит мерцание этого оружия в игре. Как бы вы посоветовали сделать чтобы избежать этого неприятно эффекта?
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Разделить по разным контейнерам: анимация героя в одном, оружие в другом.
И да, что такое 'плейсхолдер'?? Местохранитель? |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
placeholder - метка-заполнитель; указатель места заполнения
Попробую разделить, спасибо. Если кто еще поделится вариантами как лучше все организовать буду благодарен. Вынес оружие из анимации персонажа, при смене кадров и единичном добавлении клипа оружие пропадает, при постоянном добавлении мерцает при смене кадра персонажа.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. Последний раз редактировалось Tetraeon; 19.07.2012 в 19:43. |
|
|||||
|
по этому кусочку кода ничего непонятно
то что вам нужно называется "инверсия контроля", я писал об этом в своём блоге нужен интрефейс "оружие", имплементация которого будет передаваться персонажу извне, а пока оружие не создано можно передавать пустышку которая имлементирует интерфес но ничего не делает
__________________
Хороший отдых - половина работы. |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
Я не понял как работает пример кода в вашем блоге, я еще далеко не все понимаю поэтому и создал эту тему. Мой кусочек кода показывает только 1 вид оружия хотя их там побольше, но для демонстрации принципа действия, этого должно хватить. Если в словах описать принцип работы кода: Есть персонаж, на линии времени которого есть множество кадров в каждом кадре символ, в котором происходит анимация всех частей тела и оружия(пустой клип - плейсхолдер). Для разделения типов оружия и соответственно анимации обращения с ним я сделал такое же количество кадров на лини времени персонажа в дополнение к остальным и назвал метки кадров соответственно. Каждый плейсхолдер также имеет свой класс. В коде есть 3 переменных типа Boolean каждая названа соответственно типу оружия (двуручн, одноручн и дуалы) можно сделать как угодно, это не важно. При надевании определенного вида оружия соотвец. переменная принимает значение true и функция приведенная мной выше начинает добавлять в плейсхолдер изображение. WeaponDualMh.duMh.addChild(weaponDualMh);
WeaponDualMh - класс плейсхолдера, duMh - статическая переменная через которую я и получаю доступ к классу, weaponDualMh - пустой клип в последствии weaponDualMh = new oneHandedSw_mc ; становится изображением оружия и передаваемый в плейсхолдер по EnterFrame т.е каждый кадр игры. Если не передавать это изображение каждый кадр то оружие появится и пропадет если сменится кадр персонажа или оружия. Это то как оно есть сейчас... как же лучше все реорганизовать что бы не было этих постоянных добавлений изображения ведь этот вариант ест много ресурсов и мерцание оружия все портит. help
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Подозреваю что просто анимация на таймлайне сделана неправильно, то есть слот для оружия не "непрерывен", его экземпляр меняется в ключевых кадрах. Есть такой неявный прикол у таймлайна.
Можно пробежаться по ключам и проверить, сохраняется ли один экземпляр, по имени. Но если где-то имя "пропало" и Вы просто вписали желаемое, проблему это не решит, к сожалению. Но, может быть иначе анимацию сделать просто невозможно, не знаю как там у Вас все устроено физически.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
Wolsh вы оказались как всегда правы Bgg и вы тоже. Благодарю вас!
Добавлено через 5 часов 25 минут Если во всех кадрах слот для оружия вынесен отдельно, то оружие не пропадет при смене кадров, если хотя бы в 1 кадре он находится внутри любого символа, оружие пропадает при смене любого из кадров. Таким образом анимацию сделать не получится... задачка однако.
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. Последний раз редактировалось Tetraeon; 20.07.2012 в 13:47. |
|
|||||
|
Регистрация: May 2012
Сообщений: 166
|
Понятия не имею в чем проблема тогда... все неприятности начались после переписывания кода... и все что изменилось это добавление персонажа на сцену программно, раньше он был изначально на сцене, ну и конечно пришлось почти во все классы прописать слушатель ADD_TO_STAGE, хотя и в старом варианте оружие пропадало при движении если добавлять его 1 раз, но мерцания не было видно. Еще добавил начальный кадр в главном swf файле, в виде меню, но врятле это могло повлиять т.к. все объекты я распихал по контейнерам им соответствующим (все панели в контейнер интерфейса, все объекты враги и героя в контейнер объектов) вроде все по полочкам разложил.. да и что там я уже каких только манипуляций не делал что бы проверить почему оружие пропадает, единственный вариант когда оно не пропадало это когда я поместил его в отдельный контейнер от персонажа абсолютно во всех кадрах даже в тех которые не задействованы были в процессе проверки.. т.е. пришлось их удалить и тупо оставить 4 кадра с неподвижным слотом оружия и если хотя бы в 1 из них оружие было в символе перса все накрывалось медным тазом. К этим 4 кадрам потом добавил 5-й с отдельным контейнером для оружия в котором сделал его анимацию, да еще такую что оно вообще не двигалось ни то что свой размер меняло, и опять оружие пропало, наверно в коде где то ошибка, хотя я его уже перелопатил и все вроде везде логично, вот элемент кода отвечающий за анимацию персонажа во время движения:
if (left == 1) { moving = true; heroPoint.x -= heroSpeed; if (! attack) { if (oneHandedStance) { hero.gotoAndStop("ohwalk_L"); } if (twoHandedStance) { hero.gotoAndStop("walk_L"); } if (dualHandedStance) { hero.gotoAndStop("duwalk_L"); } } } if (up == 1) { moving = true; heroPoint.y -= heroSpeed; if (! attack) { if (this.x < heroPoint.x) { if (oneHandedStance) { hero.gotoAndStop("ohwalk_R"); } if (twoHandedStance) { hero.gotoAndStop("walk_R"); } if (dualHandedStance) { hero.gotoAndStop("duwalk_R"); } } else { if (oneHandedStance) { hero.gotoAndStop("ohwalk_L"); } if (twoHandedStance) { hero.gotoAndStop("walk_L"); } if (dualHandedStance) { hero.gotoAndStop("duwalk_L"); } } } } if (right == 1) { moving = true; heroPoint.x += heroSpeed; if (! attack) { if (oneHandedStance) { hero.gotoAndStop("ohwalk_R"); } if (twoHandedStance) { hero.gotoAndStop("walk_R"); } if (dualHandedStance) { hero.gotoAndStop("duwalk_R"); } } } if (down == 1) { moving = true; heroPoint.y += heroSpeed; if (! attack) { if (this.x < heroPoint.x) { if (oneHandedStance) { hero.gotoAndStop("ohwalk_R"); } if (twoHandedStance) { hero.gotoAndStop("walk_R"); } if (dualHandedStance) { hero.gotoAndStop("duwalk_R"); } } else { if (oneHandedStance) { hero.gotoAndStop("ohwalk_L"); } if (twoHandedStance) { hero.gotoAndStop("walk_L"); } if (dualHandedStance) { hero.gotoAndStop("duwalk_L"); } } }
__________________
Выражаю благодарность всем, кто помогают новичкам. Ваша бескорыстная помощь внушает уважение. Последний раз редактировалось Tetraeon; 21.07.2012 в 15:43. |
|
|||||
|
Регистрация: Mar 2006
Адрес: Odessa
Сообщений: 157
|
Вы предлагаете декомпилировать вашу свф-ку, чтобы понять что не так?
![]() При анимации контейнера, он должен находиться на таймлайне постоянно, т.е. никаких пропущенных кадров. И во всех ключевых кадрах он должен называться одинаково. Тоже самое касается всех(!) его родительских клипов.
__________________
Не всех война убила - многих покалечила |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|