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

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

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

Регистрация: Jan 2010
Сообщений: 147
По умолчанию попадание в hero. в чем я не прав?

простенькая гама. у моего героя есть враги. я создаю таймер и в его обработчике пушу врагов в массив. рандомно выбираю одного из них и добавляю в нужное мне место:
Код AS3:
// TIMER event handler
	private function hOnEnemyTimer(evt:TimerEvent):void{
		enemyArray.push(bottle);			
		enemyArray.push(cigarettes);			
		enemyArray.push(syringe);
 
		enemyNum = Math.abs(Math.round(Math.random()*enemyArray.length - 1));
		if(enemyNum > 2)
			enemyNum = 2;
 
		gameLevels.addChild(enemyArray[enemyNum]);
		enemyArray[enemyNum].addEventListener(Event.ENTER_FRAME, hOnEnterFrame);		
	}
дальше по энтерфрэйму их запускаю детектирую попадание в героя. если попал, то удаляю врага и делаю сплис из массива, если не попал, то после того как враг долетел до начала стэйджа (запускаю справа на лево) делаю тоже самое, удаляю врага, сплис из массива и обработчика энтерфрэйм:
Код AS3:
// ENTER_FRAME event handler
		private function hOnEnterFrame(evt:Event):void {
			var step = - 12;			
			var tgtX = enemyArray[enemyNum].x + step;
			enemyArray[enemyNum].x = tgtX;
			if(enemyArray[enemyNum].hitTestObject(hero)){
				trace("popal!!!");
				enemyArray[enemyNum].removeEventListener(Event.ENTER_FRAME, hOnEnterFrame);
				gameLevels.removeChild(enemyArray[enemyNum]);
				enemyArray.splice(enemyNum, 1);
				healthIndicator.numberOfHealthAtTheMoment -= Properties.REDUCTION_RATE_OF_HEALTH_IF_CONTACT; 
			} else if (enemyArray[enemyNum].x == 0){
				trace("promah!!!");
				enemyArray[enemyNum].removeEventListener(Event.ENTER_FRAME, hOnEnterFrame);
				gameLevels.removeChild(enemyArray[enemyNum]);
				enemyArray.splice(enemyNum, 1);
			}												
		}
столкнулся со следующими проблемами. если мой таймер тикает быстро, а враг летит медленно, то начинаются лаги. вторая проблема возникла, когда я захотел еще один таймер создать и так же с ним работать. подскажите в чем я не прав, плиз. может подход корявый и надо вообще по другому задачу решать?

Старый 05.03.2010, 14:50
F1esk вне форума Посмотреть профиль Отправить личное сообщение для F1esk Найти все сообщения от F1esk
  № 2  
Ответить с цитированием
F1esk
 
Аватар для F1esk

Регистрация: Jun 2008
Адрес: Tomsk
Сообщений: 88
в топку enter_frame. Напиши класс, в котором будет таймер постоянно работать, класс будет принимать функции и вызывать их через заданный интервал и/или n-раз.

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

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

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


 


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


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