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

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

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

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

Привет! Если вас не затруднит, помогите разобраться... Вот простенький код:
Код:
function ap (){
	i ++;
	_root.attachMovie("mc", "mc" + i, _root.getNextHighestDepth(), {_x: Math.random()*550, _y: Math.random()*400});
}
r = setInterval (ap, 3000);

hero.onPress = function (){
	this.startDrag ();
	this.onEnterFrame = function (){
		if (this.hitTest(this["mc"+i])){
			delete this.onEnterFrame;
			this["mc"+i].removeMovieClip ();
			this.stopDrag ();
		}
	}
}

hero.onRelease = function (){
	this.stopDrag ();
}
С использованием this (выделено красным цветом) не работает - это очевидно - потому что происходит вызов не того что надо. Использую eval - все работает. Но вроде eval это устаревший способ. Можно ли как то это исправить???
Вложения
Тип файла: rar ishodnik.rar (4.4 Кб, 45 просмотров)


Последний раз редактировалось Волгоградец; 09.01.2008 в 17:00.
Старый 09.01.2008, 18:22
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
this у вас -- это hero. А мувик в _root аттачится.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Абсолютный
Код:
_root["mc" + i]
Относительный
Код:
this._parent["mc" + i]
Правильный
Код:
var i:Number = 0;
hero.useHandCursor = false;
var mc:MovieClip;
function ap () {
	i++;
	mc = _root.attachMovie ("mc", "mc" + i, _root.getNextHighestDepth (), {_x:Math.random () * 550, _y:Math.random () * 400});
}
r = setInterval (ap, 3000);
hero.onPress = function () {
	this.startDrag ();
	this.onEnterFrame = function () {
		if (this.hitTest (mc)) {
			delete this.onEnterFrame;
			mc.removeMovieClip ();
			this.stopDrag ();
		}
	};
};
hero.onRelease = function () {
	this.stopDrag ();
};
Но меня смущает тот факт, что в вашем коде идет проверка только для последнего созданного элемента, а не всех. Так задумано?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 09.01.2008, 18:31
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 4  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Ответ:
Код:
hero.onPress = function() {
	this.startDrag();
	this.onEnterFrame = function() {
		if (this.hitTest(this._parent["mc"+i])) {
			delete this.onEnterFrame;
			this._parent["mc"+i].removeMovieClip();
			this.stopDrag();
		}
	};
};
this - ссылка на родителя, в данном слечае на hero.
this._parent равносильно _root - именно туда аттачатся мувики.
Дописано:
ОПЕРЕДИЛИ более шустрые ребятки

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
iNils, ты прав, задумано было для всех элементов проверку делать. Это я что-то напутал когда писал код.) Поэтому ход с присваиванием имени мувика переменной m не проходит. Просто я думал, что конструкция this["..."] - это как обособленный оператор что ли, который должен возвращать то, что в квадратных скобках независимо от расположения на временной диаграмме.
Вот, с вашей помощью сделал то, что нужно - на сцену аттачатся клипы и происходит проверка на столкновение с каждым из них; если столкновение было - клип удаляется (может кому пригодится):
Код:
var i:Number = 0;
hero.useHandCursor = false;
var array:Array = new Array ();
function ap (){
	i ++;
	_root.attachMovie("mc", "mc" + i, _root.getNextHighestDepth(), {_x: Math.random()*550, _y: Math.random()*400});
	array.push ("mc" + i);
}
r = setInterval (ap, 5000);
ap ();
hero.onPress = function (){
	this.startDrag ();
	this.onEnterFrame = function (){
		for (k in array){
			if (this.hitTest(_root[array[k]])){
				trace (array[k]);
				_root[array[k]].removeMovieClip ();
				array.splice(k, 1);
				trace (array.length);
				trace (array + "\n");
			}
		}
	}
}
Спасибо БОЛЬШОЕ!

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

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

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


 


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


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