Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.11.2012, 06:40
Life_Master вне форума Посмотреть профиль Отправить личное сообщение для Life_Master Найти все сообщения от Life_Master
  № 1  
Ответить с цитированием
Life_Master

Регистрация: Oct 2009
Сообщений: 55
По умолчанию Вызов функции из другого класса

Доброго времени суток всем!
Помогите разобраться с вызовом функции из другого класса.
В одном классе есть такой код:
Код 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 ?

Старый 15.11.2012, 07:33
spirit2 вне форума Посмотреть профиль Отправить личное сообщение для spirit2 Найти все сообщения от spirit2
  № 2  
Ответить с цитированием
spirit2

Регистрация: Dec 2009
Сообщений: 125
Код AS3:
Enemy.revomeEnemyOne();
если
Код AS3:
public static function revomeEnemyOne():void //статический метод

или
Код AS3:
private var _enemy:Enemy = new Enemy();
...
_enemy.revomeEnemyOne();
если
Код AS3:
public function revomeEnemyOne():void //метод экземпляра

Старый 15.11.2012, 17:02
Life_Master вне форума Посмотреть профиль Отправить личное сообщение для Life_Master Найти все сообщения от Life_Master
  № 3  
Ответить с цитированием
Life_Master

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

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

Старый 15.11.2012, 17:40
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 4  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

Регистрация: Jul 2008
Сообщений: 912
Цитата:
Сообщение от Life_Master Посмотреть сообщение
пробывал двумя способами.
С первым вариантом - ошибка на функции revomeEnemyOne(), т.к. статический метод не работает с this, но на что заменить этот this, ума не приложу.
Он просто не может удалить сам себя, не правильная архитектура. Нужно больше кода, где впервые объявлен класс Enemy и кто у него parent?

Старый 15.11.2012, 17:48
Life_Master вне форума Посмотреть профиль Отправить личное сообщение для Life_Master Найти все сообщения от Life_Master
  № 5  
Ответить с цитированием
Life_Master

Регистрация: Oct 2009
Сообщений: 55
Выкладываю весь проект. Сделан во FD.
На улетность кода не претендую, но тыкания носом по существу принимаю.
Вложения
Тип файла: rar ufoFire&Enemy.rar (31.9 Кб, 31 просмотров)

Старый 15.11.2012, 18:24
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 6  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

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

Старый 15.11.2012, 18:32
Life_Master вне форума Посмотреть профиль Отправить личное сообщение для Life_Master Найти все сообщения от Life_Master
  № 7  
Ответить с цитированием
Life_Master

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

Старый 15.11.2012, 18:33
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 8  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

Регистрация: Jul 2008
Сообщений: 912
в 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 раз в секунду создаются.

Старый 15.11.2012, 18:48
Life_Master вне форума Посмотреть профиль Отправить личное сообщение для Life_Master Найти все сообщения от Life_Master
  № 9  
Ответить с цитированием
Life_Master

Регистрация: Oct 2009
Сообщений: 55
Огромное спасибо =) теперь все как по маслу =)

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

Старый 15.11.2012, 18:54
Sintesis вне форума Посмотреть профиль Отправить личное сообщение для Sintesis Найти все сообщения от Sintesis
  № 10  
Ответить с цитированием
Sintesis
 
Аватар для Sintesis

Регистрация: Jul 2008
Сообщений: 912
Цитата:
Сообщение от Life_Master Посмотреть сообщение
Разжуешь?
Что именно не понятно? Почему я сделал так в Bullet?

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:36.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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