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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Mar 2014
Сообщений: 27
По умолчанию [Решено] Проигрывание клипа по клику

Объясните, почему trace отображается все время, а play через раз?

На сцену добавляется три кнопки-позиции и указатель.
При клике по кнопкам указатель будет перемещаться (анимация внутри указателя, своя для каждой позиции)
Но пока проблема с проигрыванием анимации - пропуск каждого второго клика.

Код AS3:
package src {
	import flash.display.MovieClip;
	import flash.display.DisplayObject;
	import flash.events.MouseEvent;
 
	public class Main extends MovieClip {
		private var pointer:Pointer = new Pointer();
		private var startRoom:StartRoom = new StartRoom();
		private var leftRoom:LeftRoom = new LeftRoom();
		private var rightRoom:RightRoom = new RightRoom();
 
		public function Main() {			
			pointer.x = 250; pointer.y = 200;
			startRoom.x = 250; startRoom.y = 250;
			leftRoom.x = 50; leftRoom.y = 250;
			rightRoom.x = 450; rightRoom.y = 250;
 
			addChild(startRoom);
			addChild(leftRoom);
			addChild(rightRoom);
			addChild(pointer);
 
			startRoom.addEventListener(MouseEvent.CLICK, startRoomClick);
			leftRoom.addEventListener(MouseEvent.CLICK, leftRoomClick);
			rightRoom.addEventListener(MouseEvent.CLICK, rightRoomClick);
		}
 
		public function startRoomClick(event:MouseEvent):void {trace("startRoom"); pointer.play()}
		public function leftRoomClick(event:MouseEvent):void {trace("leftRoom"); pointer.play()}
		public function rightRoomClick(event:MouseEvent):void {trace("rightRoom"); pointer.play()}
	}
}


Последний раз редактировалось lesnoj; 14.07.2015 в 12:45.
Старый 10.07.2015, 08:47
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Поставьте gotoAndPlay вместо play.
__________________
Дети не должны знать о своих родителях

Старый 10.07.2015, 18:44
lesnoj вне форума Посмотреть профиль Отправить личное сообщение для lesnoj Найти все сообщения от lesnoj
  № 3  
Ответить с цитированием
lesnoj
 
Аватар для lesnoj

Регистрация: Mar 2014
Сообщений: 27
Цитата:
Сообщение от Tails Посмотреть сообщение
Поставьте gotoAndPlay вместо play.
С gotoAndPlay срабатывает на данном этапе, но задача чуть сложнее.
Внутри объекта Pointer содержится четыре анимации перемещения между тремя точками.
После нескольких движений происходит сбой. Причем текущая позиция (pointer.pos) выводится корректно на любом шаге, но с анимацией творится чехарда.

Код AS3:
package src {
	import flash.display.MovieClip;
	import flash.display.DisplayObject;
	import flash.events.MouseEvent;
 
	public class Main extends MovieClip {
		private var pointer:Pointer = new Pointer();
		private var startRoom:StartRoom = new StartRoom();
		private var leftRoom:LeftRoom = new LeftRoom();
		private var rightRoom:RightRoom = new RightRoom();
 
		public function Main() {			
			pointer.pos = "startRoom";
			pointer.x = 250; pointer.y = 200;
			startRoom.x = 250; startRoom.y = 250;
			leftRoom.x = 50; leftRoom.y = 250;
			rightRoom.x = 450; rightRoom.y = 250;
 
			addChild(startRoom);
			addChild(leftRoom);
			addChild(rightRoom);
			addChild(pointer);
 
			startRoom.addEventListener(MouseEvent.CLICK, startRoomClick);
			leftRoom.addEventListener(MouseEvent.CLICK, leftRoomClick);
			rightRoom.addEventListener(MouseEvent.CLICK, rightRoomClick);
		} // Конец конструктора
 
		public function startRoomClick(event:MouseEvent):void {
			if (pointer.pos == "leftRoom") {
				pointer.gotoAndPlay("leftToStart");
				pointer.pos = "startRoom";
				trace("Текущая позиция: " + pointer.pos);
			} else if (pointer.pos == "rightRoom") {
				pointer.gotoAndPlay("rightToStart");
				pointer.pos = "startRoom";
				trace("Текущая позиция: " + pointer.pos);
			} else if (pointer.pos == "startRoom") {
				trace("Клик по себе. Текущая позиция: " + pointer.pos);
			};
		}
		public function leftRoomClick(event:MouseEvent):void {
			if (pointer.pos == "startRoom") {
				pointer.gotoAndPlay("startToLeft");
				pointer.pos = "leftRoom";
				trace("Текущая позиция: " + pointer.pos);
			} else if (pointer.pos == "rightRoom") {
				trace("Не доступно. Текущая позиция: " + pointer.pos);
			} else if (pointer.pos == "leftRoom") {
				trace("Клик по себе. Текущая позиция: " + pointer.pos);
			};
		}
		public function rightRoomClick(event:MouseEvent):void {
			if (pointer.pos == "startRoom") {
				pointer.gotoAndPlay("startToRight");
				pointer.pos = "rightRoom";
				trace("Текущая позиция: " + pointer.pos);
			} else if (pointer.pos == "leftRoom") {
				trace("Не доступно. Текущая позиция: " + pointer.pos);
			} else if (pointer.pos == "rightRoom") {
				trace("Клик по себе. Текущая позиция: " + pointer.pos);
			};
		}
 
	} // Конец класса
}

Старый 10.07.2015, 18:51
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 4  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Сделайте gotoAndPlay для всех вложенных мувиклипов.
Или настройте внутреннюю анимацию таким образом, чтоб она сбрасывалась.
__________________
Дети не должны знать о своих родителях

Старый 10.07.2015, 19:05
lesnoj вне форума Посмотреть профиль Отправить личное сообщение для lesnoj Найти все сообщения от lesnoj
  № 5  
Ответить с цитированием
lesnoj
 
Аватар для lesnoj

Регистрация: Mar 2014
Сообщений: 27
Цитата:
Сообщение от Tails Посмотреть сообщение
Сделайте gotoAndPlay для всех вложенных мувиклипов.
Или настройте внутреннюю анимацию таким образом, чтоб она сбрасывалась.
В данный момент использую только gotoAndPlay.
Уточните что значит чтобы она сбрасывалась?

Старый 10.07.2015, 20:34
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 6  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Сброс можно устроить, если создать пустой ключевой кадр и перейти на него.
Например так:
ResetClip.swf   (1.4 Кб)
Вложения
Тип файла: swf ResetClip.swf (1.4 Кб, 90 просмотров)
Тип файла: zip ResetClip.zip (7.7 Кб, 27 просмотров)
__________________
Дети не должны знать о своих родителях

Старый 10.07.2015, 23:58
lesnoj вне форума Посмотреть профиль Отправить личное сообщение для lesnoj Найти все сообщения от lesnoj
  № 7  
Ответить с цитированием
lesnoj
 
Аватар для lesnoj

Регистрация: Mar 2014
Сообщений: 27
Цитата:
Сообщение от Tails Посмотреть сообщение
Сброс можно устроить, если создать пустой ключевой кадр и перейти на него.
Пустой кадр заметен при проигрывании анимации.
Возможно я стараюсь решить задачу не самым подходящим способом. Тогда прошу подсказать.

Я стараюсь реализовать перемещение между некоторым количеством точек.
К примеру есть точки A, B и C, лежащие на одной плоскости.
Начальная позиция указателя над точкой B.

При клике по точкам происходит проигрывание анимации перемещения.
Причем перемещение важно сделать именно анимацией а не программно.

Старый 11.07.2015, 09:15
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 8  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Цитата:
Сообщение от lesnoj Посмотреть сообщение
Пустой кадр заметен при проигрывании анимации.
В моём примере же не заметен.
__________________
Дети не должны знать о своих родителях

Старый 12.07.2015, 01:17
lesnoj вне форума Посмотреть профиль Отправить личное сообщение для lesnoj Найти все сообщения от lesnoj
  № 9  
Ответить с цитированием
lesnoj
 
Аватар для lesnoj

Регистрация: Mar 2014
Сообщений: 27
Цитата:
Сообщение от Tails Посмотреть сообщение
В моём примере же не заметен.
Насчет этого я ошибся.
Но в вашем примере всего одна анимация и кадр reset имеет строку gotoAndStop(1) на нее ссылающуюся.
Если анимаций больше, то в данном методе наверно придется использовать условие и ссылаться на первый кадр нужной анимации.
Вообще эти манипуляции с reset это стандартное решение или что то вроде костыля? Почему анимация себя так ведет, где можно про это почитать?

Старый 12.07.2015, 14:28
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 10  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Да это костыль.
Суть вот в чём: Когда проигрывание переходит на пустой кадр (reset), все вложенные клипы с анимацией удаляются. Снова вернувшись на первый кадр (gotoAndStop(1)), эти клипы заново создаются. Перейдя на пустой кадр, можно таким образом устроить сброс.

Команда gotoAndStop(1) не позволяет отрисоваться пустому кадру, так как при переходе на него сразу же происходит переход на 1 кадр.

Это совсем не тривиальное решение. Можно ещё рекурсивной функцией пройтись по всем мувиклипам и вызвать gotoAndStop(1). Тоже самое по сути будет.

Вообщем, конечно всё это можно сделать красивее и аккуратнее. Но я не знаю, как у вас устроена анимация. Вы задали вопрос, как сделать так, чтоб при каждом вызове вложенная анимация проигрывалась заново, я предложил вам решение.
__________________
Дети не должны знать о своих родителях


Последний раз редактировалось Tails; 12.07.2015 в 14:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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