![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 12
|
Привет, суть такая - враг вычисляет только начальные координаты героя,а должен обновлять их, в чем проблема не пойму
класс игры, главный обработчик: //основной игровой обработчик private function enterFrameHandler(event:Event):void{ // Расчет delta времени _xPos = _hero.x; _yPos = _hero.y; //Enemy.update(_xPos, _yPos); // Обработка врагов, находящихся в игровом мире for (var i:int = 0; i < _listOfEnemies.length; i++){ (_listOfEnemies[i] as Enemy).update(_xPos, _yPos); } } public override function update(xPos:Number, yPos:Number):void { // Временный код движения объекта // демонстрирующий работу класса var dx:Number = xPos - enemy.x;//находим дельта-Х var dy:Number = yPos - enemy.y;//находим дельта-У var angle:Number = Math.atan2(dy,dx);//Тангент угла=противоположная/прилегающую //enemy.rotation = angle * 180 / Math.PI;//Радианы в градусы if (xPos < enemy.x) { enemy.scaleX = - Math.abs( enemy.scaleX ); } else { enemy.scaleX = Math.abs( enemy.scaleX ); } if (Math.abs(dx)<=2&&Math.abs(dy)<=2) {//Сравниваем расстояние и скорость по-модулю, speed = 0; //если расстояние меньше - останавливаемся } else if (Math.abs(dx)>2&&Math.abs(dy)>2) { speed = _speedRandom; } _speedX = Math.cos(angle)*speed;//уравнение треугольника - имея гипотенузу(скорость), _speedY = Math.sin(angle)*speed;//находим противоположную и прилегающую enemy.x += _speedX; //стороны(скорости по х и у) enemy.y += _speedY;//увеличиваем положение на скорость //trace(dx,dy) } |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Покажи часть кода, в которой ты подписался на обновление.
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 12
|
ну так я ж и написал, в глвном обработчике(первый кусок кода)
|
|
|||||
|
Скорее всего враг вычитает и собственных координат свои же координаты и получает 0.
Вот тут скорее всего неверно. |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Цитата:
Цитата:
Bletraut, не надо писать это, ты путаешь пользователя, не в этом проблема. |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
var dx:Number = xPos - enemy.x;//находим дельта-Х var dy:Number = yPos - enemy.y;//находим дельта-У Если enemy это спрайт внутри объекта типа Enemy, тогда enemy.x будет позиция x этого спрайта внутри объекта Enemy в котором он находится, а не по отношению к stage (или к контейнеру который содержит врагов и героя). Т.е. надо по идее А если нет, то видимо мои телепатические способности пока не достигли совершенства.
__________________
Oomph |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 12
|
неа, затрейсил, пказывает что в класе гейм по ентер фрейму кординаты даже не изменяются.
часть кода где я вызываю прослушиватель: public function Game (){ // constructor code // Класс мира создается в единственном экземпляре и // ссылка на него хранится в приватной статической переменной. // При попытки создать второй экземпляр мира сообщаем об ошибке. if (_instance != null){ throw("Error: Мир уже существует. Используйте Game.getInstance();"); } // Ссылка на экземпляр мира _instance = this; //Создаем бэкграунд _bg = new GameBg(); _bg.width = MainGame.SCR_W; addChildAt(_bg,0); //Создаем главного героя и размещакем его на сцене _hero = new Hero(); _hero.x = _hero.y = 200; addChild(_hero); // Создание пираний addPiranya(); //Создание рыб //addFish(); // Добавляем основной обработчик мира addEventListener(Event.ENTER_FRAME, enterFrameHandler); } Всем спасибо! Вопрос решил! Сделал по мудацки создал статическую функцию в енеми, и вызвал ее напрямую из клласса херо и все ))Последний раз редактировалось Serya; 20.06.2013 в 01:23. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|