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

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

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

Регистрация: Jan 2012
Сообщений: 836
По умолчанию Движение объектов в разных направлениях

Код AS3:
	private function timerMove(event:TimerEvent):void
		{
			_gomob.stop();
			flag_go = true;
			velo.setMembers((Math.random() - 0.5) * 250, (Math.random() - 0.5) * 250);
			var len:int = int(velo.magnitude());
 
			if (len < 30) velo.mulScalar(30 / len);
			target_x = x + velo.x;
			target_y = y + velo.y;
 
			velo.mulScalar(speedMob / velo.magnitude());
				for (var i:uint = 0; i < main_plat.mob.platform_mobs.length; i++)
			{
			main_plat.mob.platform_mobs[i].rotation = velo.getDirection() + 90;
 
		}
			addEventListener(Event.ENTER_FRAME, dvizhenie);
		}
 
		private function dvizhenie(e:Event):void
		{
			var oldmob_x:int = x;
			var oldmob_y:int = y;
			var tmp_velo: Vec_tor = velo.getMulScalar(Conf.SPF);
				for (var i:uint = 0; i < main_plat.mob.platform_mobs.length; i++)
			{
			main_plat.mob.platform_mobs[i].x += tmp_velo.x;
			main_plat.mob.platform_mobs[i].y += tmp_velo.y;
			}
В общем есть массив с объектами platform_mobs[]. При тесте кода, все объекты из этого массива двигаются в одном направлении. Подскажите, как сделать, чтобы к каждому объекту был присвоен свой Vector? И все объекты в массиве двигались в разных направлениях, у меня получается либо чтобы один объект двигался, либо все, но по одному маршруту так сказать

Старый 16.04.2014, 21:02
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 2  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Создайте класс, в конструктор которого будете передавать DO стартовые координаты и конечные.
Сделаете в этом классе метод move, в котором будет расчитан вектор направления по старту и финишу.
И потом в ентер фрайме передавайте по очереди в метод move значение скорости.

Старый 16.04.2014, 21:07
Godwarlock вне форума Посмотреть профиль Отправить личное сообщение для Godwarlock Найти все сообщения от Godwarlock
  № 3  
Ответить с цитированием
Godwarlock

Регистрация: Jan 2012
Сообщений: 836
До стартовые координаты объектов в массиве? А можно пример если не затруднит?

Старый 16.04.2014, 21:30
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 4  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Код AS3:
package
{
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
 
 
	public class MainMove extends Sprite 
	{
		private static const SPEED:Number = 0.001;
		private var _junggler:Juggler;
 
		public function MainMove() 
		{
			var target:Shape;
			var move:Move;
 
			const WIDTH:Number = stage.stageWidth;
			const HEIGHT:Number = stage.stageHeight;
 
			for (var i:int = 0; i < 20; i++) 
			{
				target = createCircle(int( Math.random() * 40) + 10, Math.random() * 0xff);
				target.x = int( Math.random() * WIDTH);
				target.y = int( Math.random() * HEIGHT);
				super.addChild(target);
 
				move = new Move(target, 'x', target.x, int(Math.random() * WIDTH), move);
				move = new Move(target, 'y', target.y, int(Math.random() * HEIGHT), move);
			}
 
			_junggler = new Juggler(move);
 
			stage.addEventListener(Event.ENTER_FRAME, stage_enterFrameHandler);
		}
 
		private function stage_enterFrameHandler(event:Event):void 
		{
			_junggler.move(SPEED);
		}
		private function createCircle(radius:Number, color:uint):Shape
		{
			var circle:Shape = new Shape();
			circle.graphics.beginFill(color);
			circle.graphics.drawCircle(0, 0, radius);
			circle.graphics.endFill();
			return circle;
		}
 
	}
 
}
Код AS3:
package 
{
	import flash.display.DisplayObject;
 
	public class Juggler 
	{
		protected var _moves:Move;
		public function get moves():Move { return this._moves; };
		public function set moves(value:Move):void
		{
			if (value == this._moves) return;
			this._moves = value;
		}
 
		public function Juggler(moves:Move = null) 
		{
			if (moves != null)
					this._moves = moves;
		}
		protected var speed:Number = 0;
		public function move(speed:Number):void
		{
			this.speed += speed;
 
			var move:Move = this._moves;
			var target:DisplayObject;
			while (move != null)
			{
				target = move.target;
				target[move.prop] = move.finish * this.speed + move.start;
				move = move.next;
			}
		}
	}
 
}
Код AS3:
package 
{
	import flash.display.DisplayObject;
 
	public class Move 
	{
		public var target:DisplayObject;
		public var prop:String;
		public var start:Number;
		public var finish:Number;
		public var next:Move;
		public function Move(target:DisplayObject, prop:String, start:Number, finish:Number, next:Move = null) 
		{
			this.target = target;
			this.prop = prop;
			this.start = start;
			this.finish = finish - start;
			this.next = next;
		}
 
	}
 
}
move.swf   (1.4 Кб)
Вложения
Тип файла: swf move.swf (1.4 Кб, 66 просмотров)

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

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

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


 


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


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