![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 165
|
Добрый день.
Пытаюсь сделать небольшую игру и столкнулся с первым препятствием: - В некоторых статьях пишут, что лучше не использовать ENTER_FRAME для анимации всяких объектов, какими способами можно задать полет объекту по дуге ? ![]() - Я хотел бы реализовать - чтобы каждый раз рандомно по дуге вылетал объект(см.Рисунок)
__________________
Да здравствует то, благодаря чему мы не смотря ни на что! |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Ну да, ENTER_FRAME не использовать, а твинеры, использующие ENTER_FRAME - использовать) Тут как раз рекомендую ENTER_FRAME
Я бы поставил рандомно две -три точки (первая не рандомно - точка вылета). Провел бы через них кривую и всё. Можно поставить одну точку рандомно и рандомно две направляющие и провести кривую безье, тут (да и вообще) по ним куча инфы, а как кривую проводить обьяснять лень (можно глянуть http://ru.wikipedia.org/wiki/%D0%98%...BD%D0%B6%D0%B0 там идея собсно).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
|
Это же вращение вокруг какой-то оси (если 3d)! Здесь лучше преобразование 3d матриц использовать, а еще лучше, чтобы не сильно нагружать процессор, вращение с использованием кватернионов (меньше тактов процессора на комплексные преобразования)
Добавлено через 46 секунд И конечно по ENTER_FRAME, а как еще |
|
|||||
|
Может такой вариант подойдёт
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)); } } |
|
|||||
|
Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
|
Но я так понял ему нужны проекции дуг на экран, они вроде искажаться должны. Тогда нужно к sin или cos разные коффициентики добавить, чтобы типа элипсов получить формы.
|
|
|||||
|
Ну да, тогда конечно мой вариант не поможет.
|
|
|||||
|
Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
|
Все равно проще 3D вектор сгенерировать и вокруг него вращать, легче воспринимать код будет, да и не так уж сильно 3d преобразования грузят flash, если объектов не много
|
|
|||||
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; } } } Добавлено через 11 минут достаточно на каждый таймер делать graphics.clear(), а потом рисовать кривую до новой точки. zatoichi, зачем 3д, когда без него можно превосходно обойтись? Подъёмным краном поднять 1 кг на высоту 1 м тоже легко. Но Вы потратите намного более усилий на то что бы пригнать кран, прицепить груз и т.д. Да и затраты неоправданные.
__________________
ranga |
|
|||||
|
Регистрация: Aug 2010
Адрес: 55.1° с.ш. 82.56° в.д.
Сообщений: 25
|
Зачем рисовать? Ему движение объектов нужно было, а не линии
|
|
|||||
|
Регистрация: Nov 2007
Сообщений: 165
|
Красными направляющими я показал траекторию движения объекта
Объект будет один, вылетать он будет в определённые моменты по рандомно заданной траектории
__________________
Да здравствует то, благодаря чему мы не смотря ни на что! Последний раз редактировалось zveryuka; 30.08.2010 в 19:04. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|