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

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

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

Регистрация: May 2006
Сообщений: 36
По умолчанию Присоединение с интервалом объектов в игре

Здравствуйте.
Создавая игру, столкнулся со следующей проблемой. Отбросив всё лишнее, получается такой код:
Код:
enemyCounter = 0;
enbulCounter = 0;
function enbulMove() {
	enbulCounter++;
	_root.attachMovie("enbul", "enbul"+enbulCounter, _root.getNextHighestDepth(), {_x:_root["enemysmall"+enemyCounter]._x, _y:_root["enemysmall"+enemyCounter]._y+40});
	_root["enbul"+enbulCounter].onEnterFrame = function() {
		this._y+=5;
	}
}
function enemyAppear() {
	enemyCounter++;
	// начальная позиция врага
	var x1 = Math.round(220*Math.random())+210;
	var y1 = Math.round(150*Math.random())+20;
	var flagpos = 2*Math.round(Math.random())-1;
	// аттачим врага
	_root.attachMovie("enemysmall", "enemysmall"+enemyCounter, _root.getNextHighestDepth(), {_x:x1, _y:y1});
	setInterval(enbulMove, 800);
	// движение врага
	_root["enemysmall"+enemyCounter].onEnterFrame = function() {
			this._x += flagpos;
			if (this._x>600) {
				flagpos = -flagpos;
			}
			if (this._x<40) {
				flagpos = -flagpos;
			}
	};
}
setInterval(enemyAppear, 2000);
Кроме кода, есть ещё 2 клипа в библиотеке: enemysmall и enbul.
C интервалом 2 секунды на сцену аттачатся и начинают двигаться враги. В то же время с интервалом 0,8 секунды к этим врагам аттачатся пули, двигающиеся вниз. Так вот, проблема в том, что с появлением нового врага предыдущий перестаёт стрелять, пули аттачатся только к новому. А надо, чтобы каждый враг стрелял своими пулями со своим интервалом, независимо от других врагов.
Подозреваю, что нужно как-то перебирать enemyCounter в координатах пули. Но вот как именно - не могу додуматься. А может быть в чём-то другом загвоздка. Помогите, пожалуйста, разобраться.

Старый 27.05.2008, 23:17
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 2  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
Код:
enemyCounter = 0;
enbulCounter = 0;
function enbulMove(target:MovieClip) {
	enbulCounter++;
	_root.attachMovie("enbul", "enbul"+enbulCounter, _root.getNextHighestDepth(), {_x:target._x, _y:target._y+40});
	_root["enbul"+enbulCounter].onEnterFrame = function() {
		this._y+=5;
	}
}
function enemyAppear() {
	enemyCounter++;
	// начальная позиция врага
	var x1 = Math.round(220*Math.random())+210;
	var y1 = Math.round(150*Math.random())+20;
	var flagpos = 2*Math.round(Math.random())-1;
	// аттачим врага
	_root.attachMovie("enemysmall", "enemysmall"+enemyCounter, _root.getNextHighestDepth(), {_x:x1, _y:y1});
	setInterval(enbulMove, 800, _root["enemysmall"+enemyCounter]);
	// движение врага
	_root["enemysmall"+enemyCounter].onEnterFrame = function() {
			this._x += flagpos;
			if (this._x>600) {
				flagpos = -flagpos;
			}
			if (this._x<40) {
				flagpos = -flagpos;
			}
	};
}
setInterval(enemyAppear, 2000);
А вообще я бы вам посоветовал распределить все это по отдельным методам и использовать классы

Старый 28.05.2008, 00:04
Korsar Nik вне форума Посмотреть профиль Отправить личное сообщение для Korsar Nik Найти все сообщения от Korsar Nik
  № 3  
Ответить с цитированием
Korsar Nik

Регистрация: May 2006
Сообщений: 36
Ух ты, заработало, спасибо.

А почему лучше распределять по методам и использовать классы? Удобнее редактировать код или оптимизированнее получается? Или возможностей больше?

Старый 28.05.2008, 00:10
Kuruki вне форума Посмотреть профиль Отправить личное сообщение для Kuruki Найти все сообщения от Kuruki
  № 4  
Ответить с цитированием
Kuruki

Регистрация: Jan 2008
Сообщений: 669
Оптимизированнее, всмысле быстродейственнее? Вряд ли.
А вот все остальное - да.

Старый 28.05.2008, 11:05
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 5  
Ответить с цитированием
qazwsx
Banned

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Возможностей может и не больше но удобней в тысячи раз.

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

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

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


 


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


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