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

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

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

Регистрация: Nov 2009
Адрес: Минск, Беларусь
Сообщений: 89
Отправить сообщение для chata с помощью ICQ
По умолчанию проблема с анимацией

Здравствуйте!

Суть задачи такая, есть автобус на остановках в него заходят и выходят люди. И так автобус движется по своему маршруту.

В чем проблемы:
1) реализую я с таймером, может это не правильно, но так начала, так вот анимируется у меня только до первой остановки, потом не знаю как вызвать метод передвижения на новую координату, ибо она не передается, а задается уже в функции
если кто знает, то скажите что надо изменить/исправить

2) как сделать постепенное исчезновение объекта, т.е. людей которые вышли на остановке

Вот мой пример

Код:
package {
    import ascb.util.NumberUtilities;
    
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.text.TextField;
    import flash.utils.Timer;
   
     
    public class buble extends Sprite {
 
    	
    	var mySprite:Sprite = new Sprite();
    	var number:Number = NumberUtilities.random(1,50);
    	private var _text:TextField = new TextField();
    	
        			
   		private var a:Array = [];
   		private var _x:Array = [];
   		private var _y:Array = [];
   	
		private var _timer:Timer = new Timer(60);
		private var _currentFrame:int = 0;
		
		var speedX:Number = 0;
		var speedY:Number = 0;
		var speed:Number = 1;

		private var _object:Sprite= new Sprite();
   
        public function buble() {
			test()	
			addChild(_object);
			mySprite.graphics.beginFill(0x1555CC,0.5);
			mySprite.graphics.drawCircle(0, 0, 4);
			mySprite.x = 110;
			mySprite.y = 94;
			addChild(mySprite);
		
        }
		
		public function test(){
			for (var i:int = 0; i< number; i++)
			{          
           		a[i] = new Sprite();
           		a[i].graphics.beginFill(0x5522CC,0.5);
           		_x[i] = NumberUtilities.random(100,120);
           		_y[i] = NumberUtilities.random(100,120);
           		a[i].graphics.drawCircle(0, 0, 1);
           		a[i].x = _x[i];
           		a[i].y = _y[i];
               	_object.addChild(a[i]);
            	
   			}
   								
   			_timer.addEventListener(TimerEvent.TIMER, onTick); 
   			_timer.start();
   			
			
			}
		   		 
			public function onTick(event:TimerEvent):void  
			{
				if (event.target.currentCount == 25)
   				{
   					addEventListener(Event.ENTER_FRAME, moveBall);
      			}
				

				for (var i:int = 0; i< number; i++)
				{
					movePeople(110 - a[i].x, 90 - a[i].y, a[i]);
					/*a[i].x = 110 ;
					a[i].y = 95 ;*/
				}
					
				if (event.target.currentCount == 85)
				{
					for (var i:int = 0; i< number; i++)
					{
						a[i].x = _x[i];
						a[i].y = _y[i];
					}	
					_timer.stop();
				}
								
				
			}  
			
			public function moveBall(event:Event):void {
			
				 var distanceX:Number = 100 - _object.x;
				 var distanceY:Number = 50 - _object.y;
				 
				 var dist = Math.sqrt(distanceX*distanceX + distanceY*distanceY);
				 
				 if (dist > 5) 
				 {
					  //Вычисляем угол между шаром и мышью
					  var angle:Number = Math.atan2(distanceY, distanceX);
					
					  //Вычисляем новые скорости по  x и y
					  speedX = Math.cos(angle) * speed;
					  speedY = Math.sin(angle) * speed;
				 
				
					 //Двигаем шар на новые координаты (ближе к мыши)
					 _object.x += speedX;
					 _object.y += speedY;
					 mySprite.x += speedX;
					 mySprite.y += speedY;
				}		
								
	   		 }   
	   		 
	   		 public function movePeople( _x:Number, _y:Number, _a:Sprite):void {
			
				 var distanceX:Number = _x ;
				 var distanceY:Number = _y ;
				 
				 var dist = Math.sqrt(distanceX*distanceX + distanceY*distanceY);
				 
				 if (dist > 5) 
				 {
					  //Вычисляем угол между шаром и мышью
					  var angle:Number = Math.atan2(distanceY, distanceX);
					
					  //Вычисляем новые скорости по  x и y
					  speedX = Math.cos(angle) * speed;
					  speedY = Math.sin(angle) * speed;
				 
				
					 //Двигаем шар на новые координаты (ближе к мыши)
					 _a.x += speedX;
					 _a.y += speedY;
					
				}
	   		 }   
	}
}

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

Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
ммм а сделайте функцию типа
Код AS3:
public function CreateMarker(x:int/* первая кордината*/, y:int/* вторя кордината*/)
{
/* какие-то ваши действия*/
}
и вызывайте ее множество раз и вуаля.)
__________________
Flex+AS3 good)

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

Регистрация: Nov 2009
Адрес: Минск, Беларусь
Сообщений: 89
Отправить сообщение для chata с помощью ICQ
Спасибо, создала и засунула туда ф-цию moveBall, не знаю правильно ли, но работает.

Добавлено через 3 часа 13 минут
Полуется все равно какой-то бред

если вызывать ф-цию перемещения по ивенту таймера, то получается что для каждой точки передаю свое время
если вызывать ф-цию перемещения по ивенту фрейма, то ведет себя странно

Подскажите, как верно изобразить движение, если у меня будут остановки. а между остановками двигается по кривой
или может подскажите как сделать флаг на нахождение точки на координате, просто у меня почему значения положения точки не изменяются, хотя он и движется

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

Регистрация: Aug 2009
Адрес: Казахстан Усть-Каменогорск
Сообщений: 249
хмм... что то волшебство какое-то, вы отследите конец перемешения и начинайте новое при конце старого?
__________________
Flex+AS3 good)

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

Регистрация: Nov 2009
Адрес: Минск, Беларусь
Сообщений: 89
Отправить сообщение для chata с помощью ICQ
я именно так и пытаюсь сделать, но в чем то проблема

буду пробовать заново

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

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

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


 


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


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