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

Life_Master 15.11.2012 06:40

Вызов функции из другого класса
 
Доброго времени суток всем!
Помогите разобраться с вызовом функции из другого класса.
В одном классе есть такой код:
Код AS3:

if (hitTestObject(Player.enemyList[i]))
{
  Player.enemyList[i];               
  removeFiring();
  Enemy.revomeEnemyOne();
}

где, Player и Enemy - это два разных класса. В классе Player, есть переменная - public static var enemyList:Array = new Array () - в данном классе, Bullet, она вызывается и работает, в другом классе, Enemy, есть функция - revomeEnemyOne(), которая отвечает за удаление объекта, но эта функция не работает в данном классе.

вот так выглядит функция в классе:
Код AS3:

public function revomeEnemyOne():void
{
    removeEventListener(Event.ENTER_FRAME, enterEnemy);
  if (parent) parent.removeChild(this);
}

Как мне вызвать функцию removeEnemyOne() в классе Bullet ?

spirit2 15.11.2012 07:33

Код AS3:

Enemy.revomeEnemyOne();

если
Код AS3:

public static function revomeEnemyOne():void //статический метод


или
Код AS3:

private var _enemy:Enemy = new Enemy();
...
_enemy.revomeEnemyOne();

если
Код AS3:

public function revomeEnemyOne():void //метод экземпляра


Life_Master 15.11.2012 17:02

пробывал двумя способами.
С первым вариантом - ошибка на функции revomeEnemyOne(), т.к. статический метод не работает с this, но на что заменить этот this, ума не приложу.

Со вторым вариантом - ошибка Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null". - на _enemy.revomeEnemyOne()...

Sintesis 15.11.2012 17:40

Цитата:

Сообщение от Life_Master (Сообщение 1104558)
пробывал двумя способами.
С первым вариантом - ошибка на функции revomeEnemyOne(), т.к. статический метод не работает с this, но на что заменить этот this, ума не приложу.

Он просто не может удалить сам себя, не правильная архитектура. Нужно больше кода, где впервые объявлен класс Enemy и кто у него parent?

Life_Master 15.11.2012 17:48

Вложений: 1
Выкладываю весь проект. Сделан во FD.
На улетность кода не претендую, но тыкания носом по существу принимаю.

Sintesis 15.11.2012 18:24

Ох как всё плохо, нужно бы всё переписать, но ладно...
У тебя там несколько врагов? Одного из них уже убивает.
Сейчас ещё одного найду и скину.

Life_Master 15.11.2012 18:32

Понимаю что плохо =( учимся пока.
Делал по урокам с asgamers.com, но там автор делает во Flash, т.е. кое-что прописывает в инстансах, а я пока навожу мосты с FD, первый раз за ним. Во Flash'e было бы легче, многие бы проблемы сразу отпали(хоть на качество кода и не повлияло бы, из-за малого опыта), но комп под ним тупит.

Sintesis 15.11.2012 18:33

в Bullet и в остальных классах оружия public function enterFrame напиши так
Код AS3:

public function enterFrame(e:Event):void
                {
                        x += vx;
                        y += vy;
 
                        if (_bullet.x < -20 || _bullet.x > stage.stageWidth+30 || _bullet.y < -20 || _bullet.y > stage.stageHeight+30)       
                                removeFiring();
 
                        for (var i:int = 0; i < Player.enemyList.length; i++)
                        {
                                if (hitTestObject(Player.enemyList[i]))
                                {
                                        trace(Player.enemyList[i])
                                        if (Player.enemyList[i] is Enemy) {
                                                Player.enemyList[i].revomeEnemyOne();
                                        }
                                        if (Player.enemyList[i] is EnemyFire) {
                                                Player.enemyList[i].revomeEnemyFire();
                                        }
                                }
                        }
                }

Добавлено через 7 минут
И не создавай события EnterFrame в каждом классе, а тем более не объявляй переменные и не добавляй слушатели в теле события EnterFrame, а то они у тебя 60 раз в секунду создаются.

Life_Master 15.11.2012 18:48

Огромное спасибо =) теперь все как по маслу =)

по переменным и слушателям я запомнил =)
а вот с событием EnterFrame в каждом классе немного не допер. Разжуешь?

Sintesis 15.11.2012 18:54

Цитата:

Сообщение от Life_Master (Сообщение 1104587)
Разжуешь?

Что именно не понятно? Почему я сделал так в Bullet?


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

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