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

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

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

Регистрация: Mar 2013
Сообщений: 19
Цитата:
Сообщение от Tails Посмотреть сообщение
Функцию то вызовите:
Код AS3:
start();
Спасибо большое, не додумался)

Добавлено через 34 минуты
Теперь осталось решить этот вопрос:

Цитата:
Сообщение от Wolsh Посмотреть сообщение
неплохо бы ее еще разворачивать мордой к цели, чтобы.. жабры не засорялись.

Старый 04.03.2013, 00:12
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 12  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А у рыбы есть лево-право? Или, точнее, брюхо и спина?
Как она у вас будет разворачиваться в обратную сторону? Скейлом?
__________________
Reality.getBounds(this);

Старый 04.03.2013, 15:38
ArtS вне форума Посмотреть профиль Отправить личное сообщение для ArtS Найти все сообщения от ArtS
  № 13  
Ответить с цитированием
ArtS

Регистрация: Mar 2013
Сообщений: 19
Цитата:
Сообщение от Wolsh Посмотреть сообщение
А у рыбы есть лево-право? Или, точнее, брюхо и спина?
Как она у вас будет разворачиваться в обратную сторону? Скейлом?
Есть лево-право, и спина и брюхо.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1. Вычисляете новую рандомную точку
2. Проверяете, находится ли эта точка левее или правее текущих координат рыбки
3. Скейлите рыбку в 1 или -1, или переходите на анимацию разворачивания рыбки
4. Определяете угол, на который должна быть повернута рыбка (тригонометрия)
5. Поворачиваете рыбку (с учетом скейла). Можно этот поворот так же включить в твин движения к точке, наверное даже будет естественней.
6. Поехали
__________________
Reality.getBounds(this);

Старый 04.03.2013, 16:18
ArtS вне форума Посмотреть профиль Отправить личное сообщение для ArtS Найти все сообщения от ArtS
  № 15  
Ответить с цитированием
ArtS

Регистрация: Mar 2013
Сообщений: 19
Цитата:
Сообщение от Wolsh Посмотреть сообщение
1. Вычисляете новую рандомную точку
2. Проверяете, находится ли эта точка левее или правее текущих координат рыбки
3. Скейлите рыбку в 1 или -1, или переходите на анимацию разворачивания рыбки
4. Определяете угол, на который должна быть повернута рыбка (тригонометрия)
5. Поворачиваете рыбку (с учетом скейла). Можно этот поворот так же включить в твин движения к точке, наверное даже будет естественней.
6. Поехали
А кодом не поможете)?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
package 
{
	import com.greensock.TweenLite;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author wolsh
	 */
	public class Main extends Sprite 
	{
		[Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class;
		private var _fish:Bitmap;
		private var _targetX:Number;
		private var _targetY:Number;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			_fish = new Fish();
			_fish.smoothing = true;
			this.addChild(_fish);
 
			_targetX = stage.stageWidth / 2;
			_targetY = stage.stageHeight / 2;
			go();
		}
 
		private function go():void 
		{
			var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x);
 
			if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } );
			else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
			else onDirect();
		}
 
		private function onDirect():void
		{
			TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } );
		}
 
		private function onFloat():void 
		{
			_targetX = Math.random() * stage.stageWidth;
			_targetY = Math.random() * stage.stageHeight;
			go();
		}
	}
}
FishAnimation.swf   (26.9 Кб)
Вложения
Тип файла: swf FishAnimation.swf (26.9 Кб, 234 просмотров)
__________________
Reality.getBounds(this);

Старый 04.03.2013, 17:50
ArtS вне форума Посмотреть профиль Отправить личное сообщение для ArtS Найти все сообщения от ArtS
  № 17  
Ответить с цитированием
ArtS

Регистрация: Mar 2013
Сообщений: 19
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Код AS3:
package 
{
	import com.greensock.TweenLite;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author wolsh
	 */
	public class Main extends Sprite 
	{
		[Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class;
		private var _fish:Bitmap;
		private var _targetX:Number;
		private var _targetY:Number;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			_fish = new Fish();
			_fish.smoothing = true;
			this.addChild(_fish);
 
			_targetX = stage.stageWidth / 2;
			_targetY = stage.stageHeight / 2;
			go();
		}
 
		private function go():void 
		{
			var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x);
 
			if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } );
			else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
			else onDirect();
		}
 
		private function onDirect():void
		{
			TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } );
		}
 
		private function onFloat():void 
		{
			_targetX = Math.random() * stage.stageWidth;
			_targetY = Math.random() * stage.stageHeight;
			go();
		}
	}
}
FishAnimation.swf   (26.9 Кб)
Буду очень Вам благодарен, если скините fla. исходник, и код в кадрах будет)))

Добавлено через 1 минуту
А то не очень разобрался.....

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

Регистрация: Jan 2009
Сообщений: 1,651
Тут код в классе намного комфортней использовать, чем код в кадре, так что лучше разберитесь. Вот вам коментариев в помощь.
Код AS3:
package 
{
	import com.greensock.TweenLite;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author wolsh
	 */
//достаточно запихнуть этот код в файл Main.as, кинуть файл в ту же папку, что и компилируемый ролик, связать ролик с классом Main
	public class Main extends Sprite 
	{
		//внедряем картинку рыбки в ролик
		[Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class; 
		private var _fish:Bitmap; // это класс, куда внедрили картинку
		private var _targetX:Number;
		private var _targetY:Number;
 
		public function Main():void 
		{
			if (stage) init(); 
			else addEventListener(Event.ADDED_TO_STAGE, init); 
		}
 
		private function init(e:Event = null):void //входная точка, этот код выполнится один раз после старта
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			_fish = new Fish(); //создаем экземпляр рыбки
			_fish.smoothing = true;
			this.addChild(_fish); //кидаем рыбку на сцену
			//_targetX, targetY - переменные класса(их видно во всех других функциях класса), которые хранят координаты, куда мы хотим направить рыбку. Рыбка кидается на сцену в координатах 0,0, изначально мы направляем ее в центр сцены
			_targetX = stage.stageWidth / 2; 
			_targetY = stage.stageHeight / 2;
			go(); //отсюда переходим в go
		}
 
		//до того, как отправить рыбку в плавание к точке, нужно развернуть ее в нужном направлении
		private function go():void 
		{
			var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x); //эту формулу надо знать, как "отче наш", формула определяет угол на который надо повернуть рыбу, чтобы она из своих текущих координат, смотрела на _targetX, targetY, 180 / Math.PI - перевод из радиан в градусы, потому что свойство .rotation спрайта принимает градусы, а результат Math.atan2 в радианах 
			//используется так же scaleX=-1 или scaleX=-1. Это масштабирование по оси x. scaleX=-1 равносильно flip horizontal
			if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } );  //используется onComplete. После завершения твина, рыбка повернута к искомой точке носом, будет вызвана функция onDirect
			else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
			else onDirect();
		}
 
		//вызывается, когда рыбка уже повернута к точке носом, отправляем ее в плавание к точке
		private function onDirect():void
		{
			TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } ); //по завершению твина будет вызвана ф-я onFloat 
		}
 
		//рыбка закончила плавание к точке, выбираем ей новую точку для плавания
		private function onFloat():void 
		{
			_targetX = Math.random() * stage.stageWidth;
			_targetY = Math.random() * stage.stageHeight;
			go();
		}
	}
}
__________________
мой пустой блог

Старый 04.03.2013, 18:21
ArtS вне форума Посмотреть профиль Отправить личное сообщение для ArtS Найти все сообщения от ArtS
  № 19  
Ответить с цитированием
ArtS

Регистрация: Mar 2013
Сообщений: 19
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Тут код в классе намного комфортней использовать, чем код в кадре, так что лучше разберитесь. Вот вам коментариев в помощь.
Код AS3:
package 
{
	import com.greensock.TweenLite;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author wolsh
	 */
//достаточно запихнуть этот код в файл Main.as, кинуть файл в ту же папку, что и компилируемый ролик, связать ролик с классом Main
	public class Main extends Sprite 
	{
		//внедряем картинку рыбки в ролик
		[Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class; 
		private var _fish:Bitmap; // это класс, куда внедрили картинку
		private var _targetX:Number;
		private var _targetY:Number;
 
		public function Main():void 
		{
			if (stage) init(); 
			else addEventListener(Event.ADDED_TO_STAGE, init); 
		}
 
		private function init(e:Event = null):void //входная точка, этот код выполнится один раз после старта
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			_fish = new Fish(); //создаем экземпляр рыбки
			_fish.smoothing = true;
			this.addChild(_fish); //кидаем рыбку на сцену
			//_targetX, targetY - переменные класса(их видно во всех других функциях класса), которые хранят координаты, куда мы хотим направить рыбку. Рыбка кидается на сцену в координатах 0,0, изначально мы направляем ее в центр сцены
			_targetX = stage.stageWidth / 2; 
			_targetY = stage.stageHeight / 2;
			go(); //отсюда переходим в go
		}
 
		//до того, как отправить рыбку в плавание к точке, нужно развернуть ее в нужном направлении
		private function go():void 
		{
			var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x); //эту формулу надо знать, как "отче наш", формула определяет угол на который надо повернуть рыбу, чтобы она из своих текущих координат, смотрела на _targetX, targetY, 180 / Math.PI - перевод из радиан в градусы, потому что свойство .rotation спрайта принимает градусы, а результат Math.atan2 в радианах 
			//используется так же scaleX=-1 или scaleX=-1. Это масштабирование по оси x. scaleX=-1 равносильно flip horizontal
			if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } );  //используется onComplete. После завершения твина, рыбка повернута к искомой точке носом, будет вызвана функция onDirect
			else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
			else onDirect();
		}
 
		//вызывается, когда рыбка уже повернута к точке носом, отправляем ее в плавание к точке
		private function onDirect():void
		{
			TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } ); //по завершению твина будет вызвана ф-я onFloat 
		}
 
		//рыбка закончила плавание к точке, выбираем ей новую точку для плавания
		private function onFloat():void 
		{
			_targetX = Math.random() * stage.stageWidth;
			_targetY = Math.random() * stage.stageHeight;
			go();
		}
	}
}
А если несколько рыбок, то как?

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

Регистрация: Jan 2009
Сообщений: 1,651
Вам две страницы разжевывают до состояния кашицы. Вы сами попробовать включить мозг не хотите? Может зарплату тоже за вас получить?
__________________
мой пустой блог

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

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

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


 


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


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