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

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

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
По умолчанию Не работает setInterval () в классе

Здравствуйте! Написал игрушку, но она малость подтормаживает - использовал много onEnterFrame (). Хочу все переделать на setInterval (). И вот тут то застрял. Вобщем вот классы:
Код:
class Enemy {

	private var enemy:MovieClip;
	private static var a:Number = 0;
	private var b:Number = null;
	private var _mc:MovieClip;
	private var n:Number;

	public function Enemy (mc:MovieClip, aim:MovieClip){
		_mc = mc;	
		b = a;
		a ++;
		enemy = _mc.attachMovie ("en", "en" + b, _mc.getNextHighestDepth());
                enemy._x = 100;
		gameOnIntervals ();
	}

	private function gameOnIntervals ():Void{
		n = setInterval (this, "follow", 100);
	}

	private function follow ():Void{
		enemy._y += 5;
	}
}
Код:
class LevelOne{

	private var _mc:MovieClip;
	private var interval:Number;
	private var vaweStart:Number;
	private var enemy:Enemy;

	public function LevelOne (mc:MovieClip){
		_mc = mc;
		vaweStart = _global['setTimeout'] (this,'invasion',3000);
	}
	
	private function createEnemy ():Void{
		enemy = new Enemy(_mc);
	}

	private function invasion ():Void{
		interval = setInterval (this, "createEnemy", 1000);
	}
}
Вобщем экземпляр создается, но при появлении следующего предыдущий останавливается, как будто вызываю метод clearInterval (). Чую что конфликтуют вызовы setInterval () в первом и втором классах. Поможите, люди добрые.

Старый 09.04.2008, 12:23
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
интересные грабли :
получается, что в createEnemy ты пересоздаешь свойство enemy = new Enemy(_mc);, что при этом происходит с ранее созданными объектами не вполне понятно.., видимо они уходят в небытие..
если создавать новые без привязки к enemy, то все работает
Код:
private function createEnemy ():Void {
	enemyArr.push( new Enemy(_mc));
}
зы:
или по другому:
если оставить LevelOne как есть, а в конструкторе Enemy сохранять ссылку на созданный объект (в статическом массиве, например), то тоже все работает


Последний раз редактировалось silin; 09.04.2008 в 12:40.
Старый 09.04.2008, 12:38
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от silin
что при этом происходит со старыми не вполне понятно..
В follow () поставить трейс и узнать
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
ага, не выйдет: follow не вызывается.., точнее вызывается только для последнего созданного объекта..
так думаю:
в setInterval (this, "follow", 100); this - это scope вызываемой функции, а поскольку this всех создаваемых объектов в результате смотрят на один и тот же enemy экземпляра LevelOne, то и имеем этот бардак..

Старый 09.04.2008, 13:09
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
В целом автор ошибся, ему нужно завести массив в котором хранить созданных Enemy, а не создавать свойство для одного.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Гм... А почему же, если использовать onEnterFrame (), то все отлично работает???
P.S.: а вообще я очень польщен - мне помогают два флэш-монстра. Спасибо.

Старый 09.04.2008, 13:29
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Потому, что onEnterFrame вешается на мувиклип.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 09.04.2008, 13:52
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 8  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Понятно. Еще вопрос, если позволите: можно именам экземпляра давать имена по типу задания имен клипам
Код:
this["mc"+i]
Чтобы было что-то вроде
Код:
var this["inst"+i]:ClassA = new ClassA ();

Старый 09.04.2008, 14:50
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Для динамических имен нельзя использовать ни var, ни типизацию.
Я выше писал о массиве, в который помещается ссылки на создаваемые экземпляры, поэтому конструкции типа this["inst"+i] в классах не нужны, а нужно лишь обратиться к элементу массива. В таком классе
Код:
class A {
	private var __arrayItem:/*ClassA*/Array = null;
	function A () {
		__arrayItem = new Array ();
	}
	
	private function create ():Void {
		__arrayItem.push (new ClassA ());
	}
	private function test ():Void {
		var len:Number = __arrayItem.length;
		for (var i:Number = 0; i < len; i++) {
			var item:ClassA = __arrayItem[i];
			trace (item.id);
		}
	}
	
	private function testForFD ():Void {
		var len:Number = __arrayItem.length;
		for (var i:Number = 0; i < len; i++) {
			trace (__arrayItem[i].id);
		}
	}
}
... для получения автокомплита в методе test используется строчка выделенная белым. Если вы работаете в FD, то там можно воспользоваться и способом выденным синим, однако если обращения к элементу массива внутри цикла многократны, то лучше использовать вариант из test.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 09.04.2008, 15:32
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 10  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Цитата:
Сообщение от iNils
Если вы работаете в FD...
Я работаю в NotePad .

Спасибо, iNils, что так подробно объяснил.

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

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

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


 


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


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