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

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

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

Регистрация: Nov 2007
Сообщений: 165
Question Random направления движения объекта по дуге

Добрый день.

Пытаюсь сделать небольшую игру и столкнулся с первым препятствием:

- В некоторых статьях пишут, что лучше не использовать ENTER_FRAME для анимации всяких объектов, какими способами можно задать полет объекту по дуге ?

- Я хотел бы реализовать - чтобы каждый раз рандомно по дуге вылетал объект(см.Рисунок)
Изображения
 
__________________
Да здравствует то, благодаря чему мы не смотря ни на что!

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Ну да, ENTER_FRAME не использовать, а твинеры, использующие ENTER_FRAME - использовать) Тут как раз рекомендую ENTER_FRAME
Я бы поставил рандомно две -три точки (первая не рандомно - точка вылета). Провел бы через них кривую и всё. Можно поставить одну точку рандомно и рандомно две направляющие и провести кривую безье, тут (да и вообще) по ним куча инфы, а как кривую проводить обьяснять лень (можно глянуть http://ru.wikipedia.org/wiki/%D0%98%...BD%D0%B6%D0%B0 там идея собсно).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
Это же вращение вокруг какой-то оси (если 3d)! Здесь лучше преобразование 3d матриц использовать, а еще лучше, чтобы не сильно нагружать процессор, вращение с использованием кватернионов (меньше тактов процессора на комплексные преобразования)

Добавлено через 46 секунд
И конечно по ENTER_FRAME, а как еще

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Может такой вариант подойдёт
Код AS3:
var time:Timer=new Timer(500);
time.addEventListener(TimerEvent.TIMER,newObj);
time.start();
 
 
function newObj(e:TimerEvent) {
	var obj:MovieClip=new MovieClip();
	obj.graphics.beginFill(0xFF0000,1);
	obj.graphics.drawRect(-5,-2,10,4);
	obj.x=250;
	obj.y=100;
	obj.rotation=Math.random()*360;
	obj.rotSpeed=-3+Math.random()*6;
	addChild(obj);
 
	obj.addEventListener(Event.ENTER_FRAME,onFrame);
}
 
function onFrame(e:Event) {
	var clip=e.target as MovieClip;
	clip.rotation+=clip.rotSpeed;
	clip.alpha-=0.01;
 
	clip.x+=Math.cos(clip.rotation*Math.PI/180)*5;
	clip.y+=Math.sin(clip.rotation*Math.PI/180)*5;
	if (clip.x>550||clip.x<0||clip.y>400||clip.y<0||clip.alpha<0) {
		clip.removeEventListener(Event.ENTER_FRAME,onFrame);
		removeChild(MovieClip(clip));
	}
}
Вложения
Тип файла: swf fly.swf (1.5 Кб, 137 просмотров)

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

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
Но я так понял ему нужны проекции дуг на экран, они вроде искажаться должны. Тогда нужно к sin или cos разные коффициентики добавить, чтобы типа элипсов получить формы.

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от zatoichi Посмотреть сообщение
Но я так понял ему нужны проекции дуг на экран, они вроде искажаться должны. Тогда нужно к sin или cos разные коффициентики добавить, чтобы типа элипсов получить формы.
Ну да, тогда конечно мой вариант не поможет.

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

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
Все равно проще 3D вектор сгенерировать и вокруг него вращать, легче воспринимать код будет, да и не так уж сильно 3d преобразования грузят flash, если объектов не много

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Код AS3:
package bugaga {
	import fl.transitions.Tween;
	import flash.display.Sprite;
	import flash.geom.Point;
 
	/**
	 * ...
	 * @author vaukalak
	 */
 
	public class AnimatedObject extends Sprite{
 
		private var _dest:Point;
 
		private var _off:Number=0;
		private var _tw:Tween;
 
		public function AnimatedObject() {
			_dest = new Point(Math.random() * 30 - 15, Math.random() * 30 - 15);
			_tw=new Tween(obj, "off", null, 0, 1, 1, true);
		}
 
		public function set off(val:Number):void {
			x = val * _dest.x;
			y = val * _dest.y;
		}
 
		public function get off():Number {
			return _off;
		}
 
	}
 
}
Ну только фунцию set off перепишите под то движение что Вам нужно.

Добавлено через 11 минут
Цитата:
Сообщение от samana Посмотреть сообщение
Ну да, тогда конечно мой вариант не поможет.
достаточно на каждый таймер делать graphics.clear(), а потом рисовать кривую до новой точки.

zatoichi, зачем 3д, когда без него можно превосходно обойтись? Подъёмным краном поднять 1 кг на высоту 1 м тоже легко. Но Вы потратите намного более усилий на то что бы пригнать кран, прицепить груз и т.д. Да и затраты неоправданные.
__________________
ranga

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

Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
Зачем рисовать? Ему движение объектов нужно было, а не линии

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

Регистрация: Nov 2007
Сообщений: 165
Красными направляющими я показал траекторию движения объекта
Объект будет один, вылетать он будет в определённые моменты по рандомно заданной траектории
__________________
Да здравствует то, благодаря чему мы не смотря ни на что!


Последний раз редактировалось zveryuka; 30.08.2010 в 19:04.
Создать новую тему Ответ Часовой пояс GMT +4, время: 16:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

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

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


 


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


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