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

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

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

Регистрация: Aug 2011
Сообщений: 29
The bomb! Бомба - проблема с таймером в классе.

Привет!
Помогите, пожалуйста, справиться со следующей проблемой.


В кадре на maintimeline есть я создаю экземпляр класса bomb и помещаю его в массив.
В классе прописан алгоритм движения объекта а из кадра на таймлайне я вызываю апдейт массива с бомбами и проверяю циклом столкновения. Все работает хорошо.
Но я хочу ограничить время жизни бомбы. Для этого в классе бомбы создаю функцию уничтожения и таймер вызывающий эту функцию. И не работает во первых не создается таймер, выдает ошибку "bomb.as, Line 14 1120: Access of undefined property bombTimer."
и во-вторых не получается обратиться к переменным созданным на таймлайне "bomb.as, Line 33 1120: Access of undefined property bombs_arr."


Надеюсь вы поможете мне разобраться.

код класса бомба

Код AS3:
package
{
	import flash.display.MovieClip;
	import flash.events.TimerEvent; 
	import flash.utils.Timer; 
	public class bomb extends MovieClip
	{
 
		public var bombSpeedX:Number=0;
		public var bombSpeedY:Number=0;
		public var goalX:Number;
		public var goalY:Number;
		public var bombTimer:Timer = new Timer(9000);
		bombTimer.addEventListener(TimerEvent.TIMER_COMPLETE, bombTimeOver); 
		bombTimer.start();
 
		public function bomb()
		{
			this.x=-5;
			this.y=-5;
		}
 
 
		public function bombTimeOver()
		{
			parent.removeChild(this);
			stage.bombs_arr.splice(this,1);
			stage.numOfBombs = bombs_arr.length;
 
 
		}
 
		public function update():void
		{
			this.x+=bombSpeedX;
			this.y+=bombSpeedY;
 
			if(this.x < goalX)
			{
				if(bombSpeedX<3)
				{
					this.bombSpeedX+=0.25;
				}
 
			}
			else
			{
				if(bombSpeedX>-3)
				{
					this.bombSpeedX-=0.25;
				}
			}
 
			if(this.y < goalY)
			{
				if(bombSpeedY<3)
				{
					this.bombSpeedY+=0.25;
				}
 
			}
			else
			{
				if(bombSpeedY>-3)
				{
					this.bombSpeedY-=0.25;
				}
			}
		}
	}
}

кусочек кода с таймлайна

Код AS3:
var numOfBombs:Number=0;
var bombs_arr:Array = new Array();
var bomb_1 :bomb = new bomb();
addChildAt(bomb_1,8);
bombs_arr.push(bomb_1);
numOfBombs++ ;
Спасибо!

Старый 06.09.2011, 13:42
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
1 - Перестать писать код в фреймах и погуглить принципы ооп.

2 -
Код AS3:
public function bombTimeOver()
		{
			parent.removeChild(this);
			stage.bombs_arr.splice(this,1);
			stage.numOfBombs = bombs_arr.length;
 
 
		}
Вы обращаетесь к stage бомбы , у вас не получиться оттуда обратиться к коду в таймлайне. вещайте события лучше.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 06.09.2011, 13:46
reQuiem вне форума Посмотреть профиль Отправить личное сообщение для reQuiem Найти все сообщения от reQuiem
  № 3  
Ответить с цитированием
reQuiem

Регистрация: Aug 2011
Сообщений: 29
1 - Перестать писать код в фреймах и погуглить принципы ооп.

Да, это уже понял в следующий раз обязательно. А сейчас у меня уже почти все готово в проекте если решить эту проблему.


2.
Что значит лучше вещать события?
мне посоветовали решить это через (stage as Object).

Пока остается проблема с таймером.

Старый 06.09.2011, 13:54
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 4  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
var bomb_1 :bomb = new bomb();
bomb_1.addEventListener('bombDefuse' , bombDefuse);
addChildAt(bomb_1,8);
function bombDefuse(e:Event)
{
//удаляйте тут
}
 
BOMB :
public function bombTimeOver()
{
dispatchEvent(new Event('bombDefuse'));
}
Добавлено через 1 минуту
UP :
Код AS3:
function bombDefuse(e:Event)
{
removeChild(e.target as bomb);
bombs_arr.splice(bombs_arr.indexOf(e.target as bomb),1);
numOfBombs = bombs_arr.length;
}
Добавлено через 3 минуты
Код AS3:
public var bombTimer:Timer ;
 
 
		public function bomb()
		{
bombTimer = new Timer(9000);
bombTimer.addEventListener(TimerEvent.TIMER_COMPLETE, bombTimeOver); 
		bombTimer.start();
			this.x=-5;
			this.y=-5;
		}
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 07.09.2011, 02:27
reQuiem вне форума Посмотреть профиль Отправить личное сообщение для reQuiem Найти все сообщения от reQuiem
  № 5  
Ответить с цитированием
reQuiem

Регистрация: Aug 2011
Сообщений: 29
погуглил про dispatchEvent, логику понял но почему то не срабатывает.

во фрейме

Код AS3:
addEventListener('bombBorn' , bombBorn);
function bombBorn(e:Event)
{
	trace("Bomb_test_1");
 
}
в классе

Код AS3:
public function alienBombSpawn(event:TimerEvent)
	{
	      trace("Bomb_test_2");
	      dispatchEvent(new Event('bombBorn'));			
	}
Bomb_test_1 - не трейсится.
Bomb_test_2 - трейсится.

Значит таймер срабатывает но почему то не передается event...
(Слушатель стоит раньше чем создается экземпляр класса, если что)
Ошибок никаких не выдает.

Спасибо за помощь, чувствую я на верном пути, надо еще чутьчуть


Последний раз редактировалось reQuiem; 07.09.2011 в 02:29.
Старый 07.09.2011, 05:44
derhab вне форума Посмотреть профиль Отправить личное сообщение для derhab Найти все сообщения от derhab
  № 6  
Ответить с цитированием
derhab
 
Аватар для derhab

Регистрация: Apr 2001
Адрес: Berlin
Сообщений: 1,862
Отправить сообщение для derhab с помощью ICQ Отправить сообщение для derhab с помощью Skype™
предполагаю, что так заработает
Код AS3:
dispatchEvent(new Event('bombBorn', true));
__________________
freelance | Раздор

Старый 07.09.2011, 10:51
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 7  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
addEventListener('bombBorn' , bombBorn);
вы на какой объект слушатель вешаете?
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 07.09.2011, 11:41
reQuiem вне форума Посмотреть профиль Отправить личное сообщение для reQuiem Найти все сообщения от reQuiem
  № 8  
Ответить с цитированием
reQuiem

Регистрация: Aug 2011
Сообщений: 29
Цитата:
Сообщение от Genzo Посмотреть сообщение
Код AS3:
addEventListener('bombBorn' , bombBorn);
вы на какой объект слушатель вешаете?
пока для теста без указания этого или на stage. Лучше сделать такой один общий слушатель или на каждый объект рождающий бомбу повесить свой?


Цитата:
Сообщение от derhab Посмотреть сообщение
предполагаю, что так заработает
Код AS3:
dispatchEvent(new Event('bombBorn', true));
Заработало, спасибо )

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

Теги
йне

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

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


 


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


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