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

Serya 19.06.2013 01:01

Не обновляет кординаты на энтер фрейм
 
Привет, суть такая - враг вычисляет только начальные координаты героя,а должен обновлять их, в чем проблема не пойму
класс игры, главный обработчик:
Код AS3:

//основной игровой обработчик
                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);
                        }
 
                }

Класс врага, наследует пустой апдейт из другого класса и расширяет его. Если привязываю кординати например к мыше все работает норм.
Код AS3:

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)       
 
                }


MikroAcse 19.06.2013 01:28

Покажи часть кода, в которой ты подписался на обновление.

Serya 19.06.2013 01:47

ну так я ж и написал, в глвном обработчике(первый кусок кода)

Bletraut 19.06.2013 11:54

Скорее всего враг вычитает и собственных координат свои же координаты и получает 0.
Вот тут скорее всего неверно.
Код AS3:

                        var dx:Number = xPos - enemy.x;//находим дельта-Х
                        var dy:Number = yPos - enemy.y;//находим дельта-У


MikroAcse 19.06.2013 12:27

Цитата:

ну так я ж и написал, в глвном обработчике(первый кусок кода)
Цитата:

Покажи часть кода, в которой ты подписался на обновление.
Т.е. ту часть кода, где ты пишешь addEventListener.

Bletraut, не надо писать это, ты путаешь пользователя, не в этом проблема.

AlexLucas 19.06.2013 14:20

Код AS3:

var dx:Number = xPos - enemy.x;//находим дельта-Х
                        var dy:Number = yPos - enemy.y;//находим дельта-У

Если всё уже происходит в классе Enemy, кто такой тогда enemy?
Если enemy это спрайт внутри объекта типа Enemy, тогда enemy.x будет позиция x этого спрайта внутри объекта Enemy в котором он находится, а не по отношению к stage (или к контейнеру который содержит врагов и героя). Т.е. надо по идее
Код AS3:

var dx:Number = xPos - this.x - enemy.x;//если enemy не находится в (0.0)

А если нет, то видимо мои телепатические способности пока не достигли совершенства.

Serya 19.06.2013 23:07

неа, затрейсил, пказывает что в класе гейм по ентер фрейму кординаты даже не изменяются.
часть кода где я вызываю прослушиватель:
Код AS3:

                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);
                }

Добавлено через 2 часа 15 минут
Всем спасибо! Вопрос решил! Сделал по мудацки :D создал статическую функцию в енеми, и вызвал ее напрямую из клласса херо и все ))


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

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