Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   createClassObject, destroyObject и TextInput - проблемы с удалением компонента (http://www.flasher.ru/forum/showthread.php?t=87774)

Хемуль 11.11.2006 03:10

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? Это мувиклип, в котором будет создан компонент? Или нет?

dacino 11.11.2006 21:27

тогда простите за еще один вопрос, как можно будет циклом пройтись по всем созданным таким образом объектам?

etc 11.11.2006 22:41

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

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

Хемуль 11.11.2006 23:06

__etc:
Спасибо. А то как-то из livedocs и Справки не до конца понял, что где.

etc 11.11.2006 23:33

Просто достаточно представить классовую структуру и то, что все компоненты наследуются от UIObject.

dacino 12.11.2006 03:42

млин, схожу с ума от объектной модели флеша пытаясь разобраться в выше написанном, тем не менее благодарствую бесконечно, есть хотяб в чем разбираться

dacino 12.11.2006 17:55

*Ошибка** 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

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

etc 12.11.2006 19:01

Какая версия Flash?

dacino 12.11.2006 19:06

в общем это и не важна см. далее

dacino 13.11.2006 13:37

частный случай для 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, время: 16:52.

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