Форум 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=181463)

gevmarlen 23.06.2012 18:38

Отследить объект по координатам
 
Всем привет =) делаю игру в стиле point'n'click.
Задача такая - дана квадратная локация(MovieClip) пустая по середине и персонаж должен пустоту обойти, я кликаю мышкой по конечному пункту назначения, и шарик двигается.

http://imglink.ru/pictures/23-06-12/...c9152145f2.jpg

Код AS3:

public function game() {
                        var goalX,goalY:int;
                        Room.addEventListener(MouseEvent.MOUSE_DOWN,roommousedown);
                        function roommousedown(event:MouseEvent):void
                        {        goalX = mouseX;
                                goalY = mouseY;
                                movetimer.start();        }
                        var movetimer:Timer = new Timer(1,10);
                        movetimer.addEventListener(TimerEvent.TIMER, charactermove);
                        movetimer.addEventListener(TimerEvent.TIMER_COMPLETE, timer_reset);
                        function charactermove(event:TimerEvent):void
                        {                                       
                        if(MovieClip(root).Char.x < goalX)
                        {MovieClip(root).Char.x += 2;}
                        if(MovieClip(root).Char.x > goalX)
                        {MovieClip(root).Char.x -= 2;}
                        if(MovieClip(root).Char.y < goalY)
                        {MovieClip(root).Char.y += 2;}
                        if(MovieClip(root).Char.y > goalY)
                        {MovieClip(root).Char.y -= 2;}
                        }
                        function timer_reset(event:TimerEvent):void
                        {
                        movetimer.reset();
                        movetimer.start()
                        }
                }

Как я понимаю нужно проверить, если например на точке (x-1;y) от персонажа нету Movie clip, то двигаться надо y+1 либо y-1.
Как мне это проверить?

ChuwY 23.06.2012 20:11

Гуглите алгоритмы поиска пути.
Или ищите на форуме.
Много раз обсуждались.

И не используйте вложенных функций.
Они тут ни к чему.

И имена переменных в ас3 принято писать с маленькой буквы (кивок в сторону Room)
Вообще почитайте соглашение по написанию кода

gevmarlen 24.06.2012 01:24

спасибо за советы, учту, но мне не алгоритм нужен, мне надо чтоб объект понял что белый квадрат это препятствие, например определить что в точке (32;45) есть Movie Clip, а в (34;45) нет. Как это в AS проверить?

semenyakinVS 24.06.2012 19:50

Вложений: 1
Цитата:

мне надо чтоб объект понял что белый квадрат это препятствие, например определить что в точке (32;45) есть Movie Clip, а в (34;45) нет
Функция hitTestPoint();

Цитата:

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

Например, если выполнять развёртку габаритов игровых объектов на матрицу координат (сетку), будет что-то такое (поиск пути при этом можно будет вести на матрице любым алгоритмом; излюбленный алгоритм для игр, насколько я знаю, А* (А-звёздочка)):

Anton Riot 24.06.2012 21:00

Цитата:

Сообщение от gevmarlen (Сообщение 1085889)
спасибо за советы, учту, но мне не алгоритм нужен, мне надо чтоб объект понял что белый квадрат это препятствие, например определить что в точке (32;45) есть Movie Clip, а в (34;45) нет. Как это в AS проверить?

Препятствие – квадрат?
Тогда всё просто, ведь вы знаете координаты всех сторон квадрата (.x, .y, .x+.width, .y+.height) и можете проверить, лежит точка между сторонами или нет.
Ну а вобще, hitTestPoint, да.

dimarik 25.06.2012 21:47

Цитата:

Сообщение от Anton Riot (Сообщение 1085922)
Препятствие – квадрат?
Тогда всё просто, ведь вы знаете координаты всех сторон квадрата (.x, .y, .x+.width, .y+.height) и можете проверить, лежит точка между сторонами или нет.
Ну а вобще, hitTestPoint, да.

Лучше в модель. Квадрат (MovieClip) имеет Rectangle (MovieClip#getBounds()). Используйте первичное: Rectangle#containsPoint() instead DisplayObject#hitTestPoint().


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

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