Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Рандомное движение (рыбки) (http://www.flasher.ru/forum/showthread.php?t=195191)

ArtS 02.03.2013 00:23

Рандомное движение (рыбки)
 
Здравствуйте!
Подскажите пожалуйста, как сделать красивое, плавное, рандомное движение рыбки?

Добавлено через 22 часа 58 минут
Ну что...никто не знает?:rolleyes:

Tails 03.03.2013 11:05

Что значит как сделать? Двигайте рыбку к какой-то точке например (куда ей хочется плыть), координаты этой точки периодически меняйте.

Добавлено через 16 минут
Ещё проще, можно сделать через твинер, задаете рыбке твин, по завершению - новый твин.
http://www.greensock.com/get-started-tweening/

Wolsh 03.03.2013 13:10

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

Hauts 03.03.2013 13:34

Если твинер использовать, то нужно как-то время анимации рассчитывать исходя из расстояния, на которое рыбка поплывет. Чтобы ее скорость примерно одинаковая была.

ArtS 03.03.2013 21:50

Цитата:

Сообщение от Tails (Сообщение 1123297)
Что значит как сделать? Двигайте рыбку к какой-то точке например (куда ей хочется плыть), координаты этой точки периодически меняйте.

Добавлено через 16 минут
Ещё проще, можно сделать через твинер, задаете рыбке твин, по завершению - новый твин.
http://www.greensock.com/get-started-tweening/

Получилось следующее:
Код AS3:

import com.greensock.*;
TweenLite.to(mc, 3, {x:Math.random()*stage.stageWidth, y:Math.random()*stage.stageHeight});

Рандомно определяется точка. Но надо что бы при достижение точки, она опять определялась.
Не подскажите как это реализовать?

Добавлено через 52 секунды
Цитата:

Сообщение от Wolsh (Сообщение 1123311)
неплохо бы ее еще разворачивать мордой к цели, чтобы.. жабры не засорялись.

Хахахаха....Да нужно)
Не знаете как можно так сделать?

Добавлено через 2 минуты
Цитата:

Сообщение от Hauts (Сообщение 1123313)
Если твинер использовать, то нужно как-то время анимации рассчитывать исходя из расстояния, на которое рыбка поплывет. Чтобы ее скорость примерно одинаковая была.

А среди аргументов метода TweenLite.to нет такого метода?

caseyryan 03.03.2013 22:09

Цитата:

Рандомно определяется точка. Но надо что бы при достижение точки, она опять определялась.
У твина есть свойство onComplete. Вот по нему можно вызывать функцию, которая будет разворачивать рыбу

ArtS 03.03.2013 22:16

Цитата:

Сообщение от caseyryan (Сообщение 1123385)
У твина есть свойство onComplete. Вот по нему можно вызывать функцию, которая будет разворачивать рыбу

А можете привести пример?

Tails 03.03.2013 22:52

Код AS3:

TweenLite.to(myFish, 2, {x:90, y:27, ease:Cubic.easeOut, onComplete:fishFinish});
 
function fishFinish():void {
        trace('Fish finished!');
}


ArtS 03.03.2013 23:04

Цитата:

Сообщение от Tails (Сообщение 1123390)
Код AS3:

TweenLite.to(myFish, 2, {x:90, y:27, ease:Cubic.easeOut, onComplete:fishFinish});
 
function fishFinish():void {
        trace('Fish finished!');
}


Это просто перемещение с одной точки в другую?
Мне надо после перемещения, что бы опять определилась точка и опять было перемещение.
Получалось так, но почему то перемещаться не хочет, стоит на месте:
Код AS3:

import com.greensock.*;
function start():void {
TweenLite.to(mc, 3, {x:Math.random()*stage.stageWidth, y:Math.random()*stage.stageHeight, onComplete:start});
}

Не знает те как исправить?

Tails 03.03.2013 23:06

Функцию то вызовите:
Код AS3:

start();


ArtS 03.03.2013 23:13

Цитата:

Сообщение от Tails (Сообщение 1123397)
Функцию то вызовите:
Код AS3:

start();


Спасибо большое, не додумался)

Добавлено через 34 минуты
Теперь осталось решить этот вопрос:

Цитата:

Сообщение от Wolsh (Сообщение 1123311)
неплохо бы ее еще разворачивать мордой к цели, чтобы.. жабры не засорялись.


Wolsh 04.03.2013 00:12

А у рыбы есть лево-право? Или, точнее, брюхо и спина?
Как она у вас будет разворачиваться в обратную сторону? Скейлом?

ArtS 04.03.2013 15:38

Цитата:

Сообщение от Wolsh (Сообщение 1123409)
А у рыбы есть лево-право? Или, точнее, брюхо и спина?
Как она у вас будет разворачиваться в обратную сторону? Скейлом?

Есть лево-право, и спина и брюхо.

Wolsh 04.03.2013 16:06

1. Вычисляете новую рандомную точку
2. Проверяете, находится ли эта точка левее или правее текущих координат рыбки
3. Скейлите рыбку в 1 или -1, или переходите на анимацию разворачивания рыбки
4. Определяете угол, на который должна быть повернута рыбка (тригонометрия)
5. Поворачиваете рыбку (с учетом скейла). Можно этот поворот так же включить в твин движения к точке, наверное даже будет естественней.
6. Поехали

ArtS 04.03.2013 16:18

Цитата:

Сообщение от Wolsh (Сообщение 1123485)
1. Вычисляете новую рандомную точку
2. Проверяете, находится ли эта точка левее или правее текущих координат рыбки
3. Скейлите рыбку в 1 или -1, или переходите на анимацию разворачивания рыбки
4. Определяете угол, на который должна быть повернута рыбка (тригонометрия)
5. Поворачиваете рыбку (с учетом скейла). Можно этот поворот так же включить в твин движения к точке, наверное даже будет естественней.
6. Поехали

А кодом не поможете)?

Wolsh 04.03.2013 17:05

Вложений: 1
Код AS3:

package 
{
        import com.greensock.TweenLite;
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * ...
        * @author wolsh
        */

        public class Main extends Sprite
        {
                [Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class;
                private var _fish:Bitmap;
                private var _targetX:Number;
                private var _targetY:Number;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        _fish = new Fish();
                        _fish.smoothing = true;
                        this.addChild(_fish);
 
                        _targetX = stage.stageWidth / 2;
                        _targetY = stage.stageHeight / 2;
                        go();
                }
 
                private function go():void
                {
                        var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x);
 
                        if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } );
                        else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
                        else onDirect();
                }
 
                private function onDirect():void
                {
                        TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } );
                }
 
                private function onFloat():void
                {
                        _targetX = Math.random() * stage.stageWidth;
                        _targetY = Math.random() * stage.stageHeight;
                        go();
                }
        }
}

FishAnimation.swf   (26.9 Кб)

ArtS 04.03.2013 17:50

Цитата:

Сообщение от Wolsh (Сообщение 1123496)
Код AS3:

package 
{
        import com.greensock.TweenLite;
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * ...
        * @author wolsh
        */

        public class Main extends Sprite
        {
                [Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class;
                private var _fish:Bitmap;
                private var _targetX:Number;
                private var _targetY:Number;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        _fish = new Fish();
                        _fish.smoothing = true;
                        this.addChild(_fish);
 
                        _targetX = stage.stageWidth / 2;
                        _targetY = stage.stageHeight / 2;
                        go();
                }
 
                private function go():void
                {
                        var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x);
 
                        if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } );
                        else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
                        else onDirect();
                }
 
                private function onDirect():void
                {
                        TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } );
                }
 
                private function onFloat():void
                {
                        _targetX = Math.random() * stage.stageWidth;
                        _targetY = Math.random() * stage.stageHeight;
                        go();
                }
        }
}

FishAnimation.swf   (26.9 Кб)

Буду очень Вам благодарен, если скините fla. исходник, и код в кадрах будет)))

Добавлено через 1 минуту
А то не очень разобрался.....

iflamberg 04.03.2013 18:16

Тут код в классе намного комфортней использовать, чем код в кадре, так что лучше разберитесь. Вот вам коментариев в помощь.
Код AS3:

package 
{
        import com.greensock.TweenLite;
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * ...
        * @author wolsh
        */

//достаточно запихнуть этот код в файл Main.as, кинуть файл в ту же папку, что и компилируемый ролик, связать ролик с классом Main
        public class Main extends Sprite
        {
                //внедряем картинку рыбки в ролик
                [Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class;
                private var _fish:Bitmap; // это класс, куда внедрили картинку
                private var _targetX:Number;
                private var _targetY:Number;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void //входная точка, этот код выполнится один раз после старта
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        _fish = new Fish(); //создаем экземпляр рыбки
                        _fish.smoothing = true;
                        this.addChild(_fish); //кидаем рыбку на сцену
                        //_targetX, targetY - переменные класса(их видно во всех других функциях класса), которые хранят координаты, куда мы хотим направить рыбку. Рыбка кидается на сцену в координатах 0,0, изначально мы направляем ее в центр сцены
                        _targetX = stage.stageWidth / 2;
                        _targetY = stage.stageHeight / 2;
                        go(); //отсюда переходим в go
                }
 
                //до того, как отправить рыбку в плавание к точке, нужно развернуть ее в нужном направлении
                private function go():void
                {
                        var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x); //эту формулу надо знать, как "отче наш", формула определяет угол на который надо повернуть рыбу, чтобы она из своих текущих координат, смотрела на _targetX, targetY, 180 / Math.PI - перевод из радиан в градусы, потому что свойство .rotation спрайта принимает градусы, а результат Math.atan2 в радианах
                        //используется так же scaleX=-1 или scaleX=-1. Это масштабирование по оси x. scaleX=-1 равносильно flip horizontal
                        if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } )//используется onComplete. После завершения твина, рыбка повернута к искомой точке носом, будет вызвана функция onDirect
                        else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
                        else onDirect();
                }
 
                //вызывается, когда рыбка уже повернута к точке носом, отправляем ее в плавание к точке
                private function onDirect():void
                {
                        TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } ); //по завершению твина будет вызвана ф-я onFloat
                }
 
                //рыбка закончила плавание к точке, выбираем ей новую точку для плавания
                private function onFloat():void
                {
                        _targetX = Math.random() * stage.stageWidth;
                        _targetY = Math.random() * stage.stageHeight;
                        go();
                }
        }
}


ArtS 04.03.2013 18:21

Цитата:

Сообщение от iflamberg (Сообщение 1123516)
Тут код в классе намного комфортней использовать, чем код в кадре, так что лучше разберитесь. Вот вам коментариев в помощь.
Код AS3:

package 
{
        import com.greensock.TweenLite;
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * ...
        * @author wolsh
        */

//достаточно запихнуть этот код в файл Main.as, кинуть файл в ту же папку, что и компилируемый ролик, связать ролик с классом Main
        public class Main extends Sprite
        {
                //внедряем картинку рыбки в ролик
                [Embed(source = "../lib/post-529562-12628386921211212.jpg")] private const Fish:Class;
                private var _fish:Bitmap; // это класс, куда внедрили картинку
                private var _targetX:Number;
                private var _targetY:Number;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void //входная точка, этот код выполнится один раз после старта
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        _fish = new Fish(); //создаем экземпляр рыбки
                        _fish.smoothing = true;
                        this.addChild(_fish); //кидаем рыбку на сцену
                        //_targetX, targetY - переменные класса(их видно во всех других функциях класса), которые хранят координаты, куда мы хотим направить рыбку. Рыбка кидается на сцену в координатах 0,0, изначально мы направляем ее в центр сцены
                        _targetX = stage.stageWidth / 2;
                        _targetY = stage.stageHeight / 2;
                        go(); //отсюда переходим в go
                }
 
                //до того, как отправить рыбку в плавание к точке, нужно развернуть ее в нужном направлении
                private function go():void
                {
                        var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x); //эту формулу надо знать, как "отче наш", формула определяет угол на который надо повернуть рыбу, чтобы она из своих текущих координат, смотрела на _targetX, targetY, 180 / Math.PI - перевод из радиан в градусы, потому что свойство .rotation спрайта принимает градусы, а результат Math.atan2 в радианах
                        //используется так же scaleX=-1 или scaleX=-1. Это масштабирование по оси x. scaleX=-1 равносильно flip horizontal
                        if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } )//используется onComplete. После завершения твина, рыбка повернута к искомой точке носом, будет вызвана функция onDirect
                        else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
                        else onDirect();
                }
 
                //вызывается, когда рыбка уже повернута к точке носом, отправляем ее в плавание к точке
                private function onDirect():void
                {
                        TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } ); //по завершению твина будет вызвана ф-я onFloat
                }
 
                //рыбка закончила плавание к точке, выбираем ей новую точку для плавания
                private function onFloat():void
                {
                        _targetX = Math.random() * stage.stageWidth;
                        _targetY = Math.random() * stage.stageHeight;
                        go();
                }
        }
}


А если несколько рыбок, то как?

iflamberg 04.03.2013 18:26

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

ArtS 04.03.2013 18:29

Цитата:

Сообщение от iflamberg (Сообщение 1123519)
Вам две страницы разжевывают до состояния кашицы. Вы сами попробовать включить мозг не хотите? Может зарплату тоже за вас получить?

Просто если бы код был бы в кадрах, я бы додумался, а в класса, а даже не имею представление как вторую рыбку сделать.....поэтому и написал что лучше мне писать в кадрах)

iflamberg 04.03.2013 18:45

Оукай. Вот вам код в кадре.
Код AS3:

        import com.greensock.TweenLite;
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
 
        /**
        * ...
        * @author wolsh
        */

 
                //внедрить картинку, когда пишите код в кадре не получится, поэтому будем считать, что у вас в библиотеке есть мувик(не битмап) Fish c включенным export to actionscript
                var _fish:MovieClip; //пока просто пустая ссылка
 
                var _targetX:Number; //переменные видно во всех функциях ролика
                var _targetY:Number;
 
                init ();//обрати внимание, функция будет вызвана один раз после старта
 
                function init():void
                {
                        _fish = new Fish(); //создаем экземпляр рыбки
                        //_fish.smoothing = true; //если рыбка мувик, а не битмап, то сглаживание и так будет
                        this.addChild(_fish); //кидаем рыбку на сцену
                        //_targetX, targetY - переменные которые хранят координаты, куда мы хотим направить рыбку. Рыбка кидается на сцену в координатах 0,0, изначально мы направляем ее в центр сцены
                        _targetX = stage.stageWidth / 2;
                        _targetY = stage.stageHeight / 2;
                        go(); //отсюда переходим в go
                }
 
                //до того, как отправить рыбку в плавание к точке, нужно развернуть ее в нужном направлении
                function go():void
                {
                        var angle:Number = 180 / Math.PI * Math.atan2(_targetY - _fish.y, _targetX - _fish.x); //эту формулу надо знать, как "отче наш", формула определяет угол на который надо повернуть рыбу, чтобы она из своих текущих координат, смотрела на _targetX, targetY, 180 / Math.PI - перевод из радиан в градусы, потому что свойство .rotation спрайта принимает градусы, а результат Math.atan2 в радианах
                        //используется так же scaleX=-1 или scaleX=-1. Это масштабирование по оси x. scaleX=-1 равносильно flip horizontal
                        if (_targetX < _fish.x) TweenLite.to(_fish, 0.5, { scaleX: -1, rotation:180+angle, onComplete:onDirect } )//используется onComplete. После завершения твина, рыбка повернута к искомой точке носом, будет вызвана функция onDirect
                        else if (_targetX > _fish.x) TweenLite.to(_fish, 0.5, { scaleX: 1, rotation:angle, onComplete:onDirect } );
                        else onDirect();
                }
 
                //вызывается, когда рыбка уже повернута к точке носом, отправляем ее в плавание к точке
                function onDirect():void
                {
                        TweenLite.to(_fish, 1, { x: _targetX, y:_targetY, rotation:0, onComplete:onFloat } ); //по завершению твина будет вызвана ф-я onFloat
                }
 
                //рыбка закончила плавание к точке, выбираем ей новую точку для плавания
                function onFloat():void
                {
                        _targetX = Math.random() * stage.stageWidth;
                        _targetY = Math.random() * stage.stageHeight;
                        go();
                }

Почти ничего не изменилось, не правда ли?

Подсказки.
1) Если надо несколько рыбок, значит надо в цикле просто создать несколько мувиков с рыбками
2) Если рыбок несколько, то нужно как-то указать функциям, запускающим движение, для какой-конкретно рыбки запустить движение. Значит функция должна принимать параметр - ссылку на мувик рыбки и использовать его дальше в коде.
3) Когда твин завершается, то с помощью onComplete он запускает следующую функцию логики. Но теперь эти функции принимают параметр, как его передать? В для этого существует onCompleParams.

Tails 04.03.2013 18:54

iflamberg,
Всё же, наверное, нужно немного помягче :)

iflamberg 04.03.2013 18:57

Я был вежлив, как мать Тереза

Hauts 04.03.2013 19:50

Цитата:

Я был вежлив, как мать Тереза
Который раз хамство.

Сначала про зарплату сказать, а потом всё-таки и скинуть код. Не понимаю я этого.

iflamberg, если не хотите помогать — не делайте этого. А хамить не стоит тем, кто просит помочь.

iflamberg 04.03.2013 20:07

Да, соглашусь, я был слишком прямолинеен и груб. Просто был крайне раздражен нежеланием автора топика хотя бы чуть-чуть поработать самостоятельно, может быть, я такое поведение тоже считаю хамством, проявлением крайнего неуважения к участникам форума.
К сожелению, "написанное не вырубишь топором"(или сказанное, не помню, как было в поговорке), тем более, если оно процитированно следующим постом. Если я заслуживаю плюса или бана по мнению администрации - так тому и быть.

ArtS 04.03.2013 22:25

Цитата:

Сообщение от iflamberg (Сообщение 1123544)
Да, соглашусь, я был слишком прямолинеен и груб. Просто был крайне раздражен нежеланием автора топика хотя бы чуть-чуть поработать самостоятельно, может быть, я такое поведение тоже считаю хамством, проявлением крайнего неуважения к участникам форума.
К сожелению, "написанное не вырубишь топором"(или сказанное, не помню, как было в поговорке), тем более, если оно процитированно следующим постом. Если я заслуживаю плюса или бана по мнению администрации - так тому и быть.

Ну я же новичёк, осваиваю, учусь, пытаюсь что-то делать. Если я не понимаю что мне пишут, я переспрашу, попрошу сделать более удобнее для новичка)

Александр Мостовой 05.03.2013 08:44

ВОт так
http://ushan.org/ru/pages/portfolio/...les/fishes.swf


TweenLite здесь не подойдет. У рыбки должны быть виртуальные координаты направления к цели, скорость, ускорение. Если ее она проплыла мимо цели, то должна замедлится стремясь вернуться назад, пока не дойдет до нудной точки. ПРиблизительно как и человек на велосипеде :) Потом угол поворота направления тоже не может меняться мгновенно в реальной жизни, и у него тоже должна быть своя скорость и ускорение.
Вы говорите новичек, в принципе знания ООП здесь не обязательны, но если не было навыков раоты с кинематикой то вам будет сложновато, попробуйте для начала написать классичискую задачку с падающим на землю и отскакивающим от нее мячиком :) Или движением палочки по касательной к элипсу. :)

Добавлено через 5 минут
Или, даже лучше всего, алгоритм выпущенной стрелы.
Только без TweenLite на уровне задания скорости и ускорения свободного падения

Добавлено через 28 минут
Вот вам для начала основа для экспериментов:
http://wonderfl.net/c/adZE (на этом сервисе можете писать код и компилить прямо на сайте)


Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Test2 extends Sprite
        {
                private var sprite        :Sprite;
                private var speedX        :Number = 5;
                private var speedY        :Number = -3;
                private var grvity        :Number = 0.1;
 
                public function Test2()
                {
                        init();
                }
 
                private function init():void
                {
                        initSptrite();
                        addEventListener(Event.ENTER_FRAME, enterFrameHandler);
 
                }
 
                private function initSptrite():void
                {
                        sprite = new Sprite();
                        addChild(sprite);
                        sprite.graphics.beginFill(0x0000ff);
                        sprite.graphics.drawEllipse(0, 0, 20, 3);
                        sprite.x = 20;
                        sprite.y = 100;
                }
 
                private function update():void
                {
                        sprite.x += speedX;
                        speedY += grvity;
                        sprite.y += speedY;
                        var rotationRad:Number = Math.atan2(speedY, speedX);
                        sprite.rotation = rotationRad  / Math.PI * 180;
                }
 
                private function enterFrameHandler(event:Event):void
                {
                        update();
                }
 
        }
}

Вам задание: сделайте так что бы стрела меняла направление скорости и летела в точку клика. (Подсказка: высчитывай скорость по Х и по Y умножив модуль скорости на cos и sin угла к цели соответственно)

RedLizard 05.03.2013 12:16

К вопросу о рыбах :) Недавно на досуге прототип игрушки начал писать http://pixorama.ru/demo/bigfish/ Тоже твинером движение сделал http://pixorama.ru/demo/bigfish/


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

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