Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.06.2014, 19:09
Mellonkhv вне форума Посмотреть профиль Отправить личное сообщение для Mellonkhv Найти все сообщения от Mellonkhv
  № 1  
Ответить с цитированием
Mellonkhv

Регистрация: Nov 2013
Сообщений: 1
По умолчанию Проблема со сменой анимации по событию.

Доброго времени суток!

Есть вот такой метод по смене анимации (взят с форума starling как есть)
Код AS3:
protected function swapFrames(clip:MovieClip, textures:Vector.<Texture>):void { 
	// Удаляются все кадры кроме одного
	while(clip.numFrames > 1){
		clip.removeFrameAt(0);
	}
	// Добавляются новые кадры
	for each (var texture:Texture in textures){
		clip.addFrame(texture);
	}
	// Удаляется последний оставшийся кадр
	clip.removeFrameAt(0);
	// Устанавливается фокус на первый кадр
	clip.currentFrame = 1;
	clip.play();
}
Всё прекрасно работает,
Код AS3:
override public function init(position:Point):void
...
	createMovieClip("SHUT_UP_");
	swapFrames(_head, _atlas.getTextures(_kind + "IDLE_DOWN_")); // в тестовых 
	swapFrames(_head, _atlas.getTextures(_kind + "SHUT_UP_"));   // целях
...
override public function update(delta:Number):void{
	switch (_state){
		// Состояние наблюдения за врагами
		case TowerBase.STATE_IDLE :
			if (_idleDelay >= 5){
				// Указатель на список всех врагов
				var enemies:Vector.<EnemyBase> = _universe.listOfEnemies;
				var n:int = enemies.length;
				// Текущий враг из списка
				var enemy:EnemyBase;	
				// Перебираем всех врагов из списка
				for (var i:int = 0; i < n; i++){
					enemy = enemies[i]; // текущий враг
					// Если дистанция до врага до башни 
					// меньше или равна радиусу атаки башни, атакуем врага
					if (Amath.distance(enemy.x, enemy.y, this.x, this.y) <= _attackRadius){
						_enemyTarget = enemy; // цель на текущего врага
						_state = TowerBase.STATE_ATTACK;
						//trace("Атака");
						break;
					}
				}
			}
			_idleDelay++;
		break;
вот до этого момента
Код AS3:
 
		case TowerBase.STATE_ATTACK :
			if (_enemyTarget != null){
				// просто для примера меняю анимацию
				swapFrames(_head, _atlas.getTextures(_kind + "SHUT_DOWN_"));
				// Враг убежал
				if (Amath.distance(_enemyTarget.x, _enemyTarget.y, this.x, this.y) > _attackRadius){
					_enemyTarget = null;
					_state = TowerBase.STATE_IDLE;
					//swapFrames(_head, _atlas.getTextures(_kind + "IDLE_DOWN_"));
				}	
			}
			else{
				_state = TowerBase.STATE_IDLE;
				//swapFrames(_head, _atlas.getTextures(_kind + "IDLE_DOWN_"));
			}
		break;
	}
 
}
Как только объект попадает в радиус действия башни, происходит смена состояния(_state) башни и анимации на атакующую и всё застывает на первом кадре. Стоит объекту выйти за радиус действия башни, состояние возвращается в "ожидание", а анимация возобновляется и неважно заменяется ли анимация на ожидающую или остаётся атакующей.

Если вопрос нубский направьте на путь истинный.
За ранее спасибо всем кто откликнулся.

Добавлено через 39 часов 51 минуту
Проблему решил вот таким сбособом http://forum.starling-framework.org/...king#post-5471

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:00.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.