Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   2D-шутер: положение противников (http://www.flasher.ru/forum/showthread.php?t=147955)

nucleartux 17.12.2010 21:37

2D-шутер: положение противников
 
Разрабатываю онлайн шутер с видом сбоку.
Вместо игрока двигаю уровень, изначально делаю
Код AS3:

var halfWidth = level.width / 2 - gameStage.stageWidth/2;
var halfHeight = level.height / 2 + 450;
level.x = halfWidth - player.x;
level.y = halfHeight - player.y;

и потом для перемещения
Код AS3:

level.x -= dx;
level.y -= dy;

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

КорДум 17.12.2010 22:56

Сделайте level контейнером, в который будете добавлять абсолютно все, игрока положите сверху, он же всегда в центре, верно? И двигайте только контейнер.

nucleartux 17.12.2010 23:05

А можно по-подробнее, для дурака.
Как я понял вы предлагаете создать уровень в который положить(addChild) все кроме игрока, верно?

Gaen 17.12.2010 23:37

Я предлагаю, например, все рассчеты проводить с координатами внутри уровня, а затем при отрисовке преобразовывать их в экранные координаты.
В упрощённом смысле это значит сначала двигать всё внутри уровня, а потом сдвигать сам уровень вместе со всем содержимым. Разумеется, я не призываю дословно так манипулировать спрайтами, иначе флэш загнётся от тормозов :) Но надеюсь суть ясна.

КорДум 17.12.2010 23:44

Эм, GAIKER, а я не то же сказал?
nucleartux, для вас: мы имеем два спрайта - игрок и контейнер. Контейнер снизу, игрок сверху, полнейшая гармония. В контейнере у нас находится все и вся, кроме игрока, игрок-то у нас лежит на контейнере сверху. Игрок ходит (хотя стоит на месте) - весь контейнер со всееем содержимым перемещается относительно игрока.

nucleartux 17.12.2010 23:53

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

КорДум 17.12.2010 23:57

Что мешает определять, где относительно контейнера стоит игрок, и создавать пулю в этом месте в контейнере?

nucleartux 18.12.2010 00:03

Ну вот у меня есть функция isInLineOfSight(obj1, obj2), определяет находятся ли объекты в зоне видомости.
Как ее переделать если какой-то из объектов является чилдом уровня, а другой stage'а?

Т.е. есть у меня var dx = (player.x + player.hitZone.x - (target.x + target.hitZone.x))/10;
player child от stage, target от level. Необходимо провести прямую из точки игрока до точки цели, как это сделать?

КорДум 18.12.2010 00:45

Цитата:

какой-то из объектов является чилдом уровня, а другой stage'а?
Так никто не будет на стейдже. Все в контейнере. Или вы про игрока? Его координаты нужно переводить в координаты контейнера (как это сделать, к сожалению, я никогда не понимал, но знаю, что нужно globalToLocal использовать).

nucleartux 18.12.2010 16:31

Все оказалось очень просто
var p:Point = level.globalToLocal(new Point(player.x,player.y));
и теперь пишем вместо player.x и player.y p.x и p.y соответственно.


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

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