![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Всем привет!
Мы сделали аквариум и в него запустили рыбку, заставили ее плавать. НО она сейчас немного "психованая" потому что я не могу заставить ее правильно делать разворот и, наверное, отступ от стен аквариума. Помогите, пожалуйста, придумать, как бы заставить нашу рыбку совершать подходящий разворот, что бы она не "залипала" у стенки аквариума. Превьюшка в аттача. А вот код: package { import flash.display.Sprite; import flash.events.Event; public class FishScript extends Sprite { private var speed:Number; private var clipRotation:Number; private var angle:Number; private var xMove:Number; private var yMove:Number; private var radius:Number; private var fish:Sprite; public function FishScript():void { trace ("FishScript loaded"); fish = aquarium_mc.fish_mc; fish.addEventListener(Event.ENTER_FRAME, moveMyFish); randomValue(); fish.rotation = clipRotation; } private function randomValue():void { clipRotation = Math.floor(Math.random() * 360); speed = Math.floor(Math.random() * 5 + 1); angle = clipRotation * Math.PI / 180; xMove = speed * Math.cos(angle); yMove = speed * Math.sin(angle); } private function moveMyFish(evt:Event):void { radius = 190 - evt.target.width/2; // "190" – это радиус аквариума, а "evt.target.width/2" – радиус рыбки if((evt.target.x * evt.target.x) + (evt.target.y * evt.target.y) > radius * radius) { randomValue(); evt.target.rotation = clipRotation; } evt.target.x += xMove; evt.target.y += yMove; } } } Последний раз редактировалось Dr_Bra; 08.09.2010 в 13:40. |
|
|||||
|
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
думаю тут проблема в том, что условие
выполняется несколько раз подряд
вобще наверное немного неверный подход использован, во первых, рыбка не плавает вот так: но это скорее всего обычная недоработка, суть в алгоритме: рыбка не плавает от края к краю, значит нам нужно просто узнать следующее положение рыбки и двигать ее туда: мы имеем круглый аквариум, и знаем текущее положение рыбки, довольно просто вычислить следующее положение - например так: нужно взять случайный угол между 0 и 360 град. и от центра аквариума взять случайное расстояние по этому направлению, но не меньше какого-то значения.. скажем r/4, и не больше r (r-радиус аквариума) далее я бы просто использовал бы Tweener и двигал рыбку с неким easeInOutSine до этой точки, после достижения ее, выбираем следущую точку, да и еще нужно исключить точки выше зеленой линии, так как там воды нет p.s. вобще надо посмотреть видео реальных аквариумов, как там плавают рыбки, то есть врятли у них все время одинаковая скорость, + угол подъема наверно не больше 30-40 градусов (в нормальных условиях), + они имеют свойство просто "стоять" на месте, вобщем алгоритм на самом деле не такой простой если нужно добиться хоть какого-то реализма
__________________
low + |
|
|||||
|
а есть событие, которое отслеживает завершился данный Tweener или нет?
Чтобы по этому событию генерировать новую точку внутри аквариума. |
|
|||||
|
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
там в параметрах есть аргумент onComplete:someFunc, someFunc - ф-я, которая вызовется после завершения анимации
http://hosted.zeh.com.br/tweener/docs/en-us/
__________________
low + |
|
|||||
|
если в матмоделе соударения двух шариков рандомно пробежаться и позаменять знаки + на -, и рандомно к некоторым углам добавить 90 градусов, то получается типичное поведение рыбок. красиво смотрится когда их много -- часть иногда плавает парами, часть друг за другом гоняется, некоторые иногда встречая стенку плывут вдоль нее, а встречая вблизи друг друга они подплывают близко и потом начинают один за другим гоняться.
где именно менять знаки не скажу -- там творческий процесс. %) |
|
|||||
|
Если нужно по проще, то после условия выхода за пределы аквариума нужно возвращать рыбку обратно в аквариум.
Например так: И желательно вычислять направление не совсем рандомное, а направленное во внутрь аквариума. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:20. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| аквариум , анимация , разворот , рыбки |
| Опции темы | |
| Опции просмотра | |
|
|