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

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

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

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
По умолчанию createClassObject, destroyObject и TextInput - проблемы с удалением компонента

Вот, пытался написать пример для пользователя, создавшего тему http://flasher.ru/forum/showthread.php?t=87732 и наткнулся на нехорошую проблему.
Вот код:
Код:
import mx.controls.Label;
import mx.controls.TextInput;

var createLabelsButtonClipName:String = "createLabelsButton";
var createLabelsButtonLeft:Number = 10;
var createLabelsButtonTop:Number = 10;
var createLabelsButtonColor:Number = 0xffff00;
var createLabelsButtonSize:Number = 60;

var labelsBaseName:String = "myLabel";
var labelsNumber:Number = 10;
var labelsInterval:Number = 20;
var labelsLeft:Number = 100;
var labelsTop:Number = 100;
var labelsBaseText:String = "Lorem Ipsum ";

var textInputsSuffix:String = "TextInput";

var myButton:MovieClip = createRectangleMovieClip(createLabelsButtonClipName, this, this.getNextHighestDepth(), createLabelsButtonLeft, createLabelsButtonTop, createLabelsButtonSize, createLabelsButtonSize, createLabelsButtonColor, 100);

myButton.onRelease = function()
{
	for (var index:Number = 0; index < labelsNumber; index ++)
	{
		var newLabelName:String = labelsBaseName + index;
		var newLabel:Label = this._parent.createClassObject(Label, newLabelName, this._parent.getNextHighestDepth());
		newLabel.autoSize = "left";
		newLabel.text = labelsBaseText + index;
		newLabel.useHandCursor = true;
		newLabel.move(labelsLeft, labelsTop + index * labelsInterval);
		newLabel.onRelease = function()
		{
			var newTextInputName:String = this._name + textInputsSuffix;
			var newTextInput:TextInput = this._parent.createClassObject(TextInput, newTextInputName, this._parent.getNextHighestDepth());
			newTextInput.text = this.text;
			newTextInput.move(this._x, this._y);
			newTextInput.setSize(this._width, this._height);
			destroyObject(this._name);
		};
	}
}

function createRectangleMovieClip(newName:String, parentClip:MovieClip, parentClipDepth:Number, newX:Number, newY:Number, newWidth:Number, newHeight:Number, newColor:Number, newAlpha:Number):MovieClip
{
	var newClip:MovieClip = parentClip.createEmptyMovieClip(newName, parentClipDepth);
	newClip.beginFill(newColor);
	newClip.moveTo(0, 0);
	newClip.lineTo(newWidth, 0);
	newClip.lineTo(newWidth, newHeight);
	newClip.lineTo(0, newHeight);
	newClip.lineTo(0, 0);
	newClip.endFill();
	newClip._x = newX;
	newClip._y = newY;
	newClip._alpha = newAlpha;
	return newClip;
}
В библиотеке компоненты Label и TextInput.

Но почему-то не удаляется метка с помощью строки
Код:
destroyObject(this._name);
Насколько я понял, в функцию нужно передавать имя экземпляра компонента. Почему не проходит такой вариант?
Исходник не прикрепляю, ибо из-за компонентов он не уместится в один архив, а два мне делать лень. ^_^

PS:
Ещё хотел спросить по поводу метода createClassObject. Везде встречал такой синтаксис:
Код:
componentInstance.createObject(linkageName, instanceName, depth, initObject)
Что такое componentInstance? Это мувиклип, в котором будет создан компонент? Или нет?
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого


Последний раз редактировалось Хемуль; 11.11.2006 в 03:19.
Старый 11.11.2006, 21:27
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 2  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
тогда простите за еще один вопрос, как можно будет циклом пройтись по всем созданным таким образом объектам?

Старый 11.11.2006, 22:41
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
off:
Хемуль, понятные названия переменных это хорошо, но слишком понятные названия — это уже плохо, ухудшает читабельность кода просто в геометрической прогрессии. Оптимальное имя переменой — два-три слова, но не более.

По теме:
1) У тебя проблемы с областью видимости, destroyObject должен быть вызван в том объекте, в котором содержится удаляемый компонент, т.е. как createObject, в твоем случае this._parent.destroyObject(this._name);
2) Да, это объект, в котором нужно создать компонент.

Старый 11.11.2006, 23:06
Хемуль вне форума Посмотреть профиль Отправить личное сообщение для Хемуль Найти все сообщения от Хемуль
  № 4  
Ответить с цитированием
Хемуль
Квач
 
Аватар для Хемуль

Регистрация: Sep 2006
Адрес: Украина, Киев
Сообщений: 1,526
__etc:
Спасибо. А то как-то из livedocs и Справки не до конца понял, что где.
__________________
Да не нужно тебе читать документацию по Flash и AS от Adobe - ты слишком умён для этого

Старый 11.11.2006, 23:33
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Просто достаточно представить классовую структуру и то, что все компоненты наследуются от UIObject.

Старый 12.11.2006, 03:42
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 6  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
млин, схожу с ума от объектной модели флеша пытаясь разобраться в выше написанном, тем не менее благодарствую бесконечно, есть хотяб в чем разбираться

Старый 12.11.2006, 17:55
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 7  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
*Ошибка** E:\DOCS\HTML_DOCS\flash\el.as: Строка 35: The class 'mx.Controls.Label' could not be loaded.
var newLabel:Label = this._parent.createClassObject(Label, newLabelName, this._parent.getNextHighestDepth());

el.as - лежит в одной папке с исходником, как сделать чтоб The class 'mx.Controls.Label' can be loaded

мож этот скрипт куда перенести?

Старый 12.11.2006, 19:01
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Какая версия Flash?

Старый 12.11.2006, 19:06
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 9  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
в общем это и не важна см. далее


Последний раз редактировалось dacino; 13.11.2006 в 13:37.
Старый 13.11.2006, 13:37
dacino вне форума Посмотреть профиль Отправить личное сообщение для dacino Найти все сообщения от dacino
  № 10  
Ответить с цитированием
dacino
[+1.3 15.11.06]
[+1 12.01.07]

Регистрация: Nov 2006
Сообщений: 149
Отправить сообщение для dacino с помощью ICQ
частный случай для destroyObject:
Код:
stop();
import mx.controls.Label;
var inst =  this.getNextHighestDepth();
var my_lab:Label = this.createClassObject(Label, "lbl", inst, {_x:10, _y:40, text:"text", visible:true});
coord = this.lbl.text;
trace(coord);
function remlab(){
	this._parent.destroyObject(this._parent.my_lab);
	trace(this._parent.my_lab._name);
}
butt.addEventListener("click", remlab);
на мой взгляд после строки "this._parent.destroyObject(this._parent.my_lab);" объект my_lab должен благополучно счезнуть и my_lab._name вместе сним, однако он живет и здравствует, или я в чем-то не прав?

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

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

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


 


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


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