2011-09-02 15 views
5

Utworzono przycisk we Flashu, a wewnątrz mam TextField i MovieClip, oba z ustawionymi nazwami wystąpień. Obejmują wszystkie 4 klatki przycisku, bez klatek kluczowych.Problem z nazwami instancji wewnątrz przycisku

znalazłem nie może uzyskać dostępu do obiektów przy użyciu nazwy instancji bym określone, więc użyłem ten kawałek kodu, aby zobaczyć, co się dzieje:

var obj:DisplayObject = this.m_graphics.btnChange.upState; 
for (var i:int = 0; i < obj.numChildren; i++) 
{ 
    trace("We have an object at " + i + " - " + obj.getChildAt(i) + ": " + obj.getChildAt(i).name); 
    var t:TextField = obj.getChildAt(i) as TextField; 
    if (t == null) 
     continue; 

    trace(" The textfield has text '" + t.text + "'); 
} 

uzyskać to jako wyjście:

We have an object at 0 - [object Shape]: instance195 
We have an object at 1 - [object TextField]: instance199 
    The textfield has text 'Change' 
We have an object at 2 - [object MovieClip]: instance203 

Są tam TextField i MovieClip, po prostu ich nazwy instancji zostały zresetowane do ogólnej "instancji ###".

Ktoś wie, na czym polega problem? Jeśli zrobię przycisk MovieClip, działa dobrze (chociaż sam muszę sterować ramkami).

Jestem świadomy różnych metod można używać w celu obejścia tego, ale to oznacza, zmieniając wiele rzeczy, i chciałbym wiedzieć, dlaczego SimpleButton zignorujmy nazwy instancji ustanowionymi w Flash

EDIT

Patrząc na niego nieco dalej, wydaje się, że chociaż nie ma żadnych klatek kluczowych w przycisku w Flash IDE Flash tworzy 4 wystąpień każdej pozycji (kalka przez upState na przykład da mi TextField z nazwa instancji "instance2", natomiast w wersji downState nazwa instancji to "instance4"). Jeśli zmienię tekst w jednym stanie, nie będzie on odzwierciedlany w innych.

myślę, że gdy program Flash tworzy obiekty, to nie kopiując nad wszystkimi właściwościami prawidłowo (czyli nazwa instancji)

EDIT

Zgadzam się, że odpowiedź Shane'a jest obejście - I Sam powiedziałem, że znam różne metody omijania problemu, ale ignoruje on problem, nie rozwiązuje go (jest to jedyny powód, dla którego go nie zaakceptowałem). Najpierw przyszedłem do SO, aby sprawdzić, czy ktoś może wie, dlaczego to się dzieje w pierwszej kolejności (tbh, wygląda na błąd w SDK).

Rozumiem również powód leżący u podstaw argumentu: "nie powinieneś mieć dostępu do dzieci w SimpleButton, jeśli chcesz mieć większą kontrolę, użyj Sprite lub MovieClip", ale nie zgadzam się z tym. Flash IDE pozwala tworzyć przyciski z nazwanymi instancjami wewnątrz nich, a dokumenty SimpleButton dają dostęp do różnych stanów, więc dla mnie jest to akceptowane zachowanie. Jeśli SimpleButton może być użyty tylko dla bardzo podstawowych, niezmiennych przycisków statycznych (również myśl o lokalizacji), to jest całkiem bezużyteczne. Możesz używać Sprite i MovieClip, ale musisz sam kontrolować różne stany, co staje się niewygodne. Mam własną klasę Button do obsługi zestawu znaków, ale nie powinienem musiał przepisywać podstawowej funkcjonalności SDK, dlatego dla mnie jest to błąd.

Zostawię nagrodę za czas, który tam jest. Jeśli nie otrzymam nic innego, to dam to Shane.

+1

shanethehat ma absolutną rację, nie można uzyskać dostępu do obiektów wewnątrz przycisku. – hardik

+0

@Hardik można uzyskać dostęp do obiektów wewnątrz przycisku, robię to w powyższym kodzie. Jeśli jest to przypadek, ja * nie powinienem *, to jest inna historia – divillysausages

+0

OK, jeśli chcesz zrobić jakiś efekt animacji z przyciskiem na jego stanie spróbuj stworzyć przycisk MovieClip wewnątrz. oddziel MovieClip na UP OVER DOWN. – hardik

Odpowiedz

5

To dlatego, że klasa flash.display.SimpleButton nie dziedziczą DisplayObjectContainer i pojemniki państwowe nie są również DisplayObjectContainers: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/SimpleButton.html

zasadzie proste przyciski są przez ich definicji prosty.Jeśli chcesz mieć bardziej złożoną kontrolę nad obiektami wewnętrznymi, będziesz musiał użyć Sprite lub MovieClip z buttonMode ustawionym na true.

+1

'SimpleButtons 'same nie są' DisplayObjects' lub 'DisplayObjectContainers', ale ich stany w górę, w dół, w dół i uderzenia są, w ten sposób, jak wyszukujesz obiekty znajdujące się w nich na pierwszym miejscu. – divillysausages

+2

SimpleButton _is_ a Obiekt wyświetlany. Jego dziedziczeniem jest SimpleButton -> InteractiveObject -> DisplayObject -> EventDispatcher -> Object. – shanethehat

+0

Przepraszam, chciałem wyjaśnić, że szukam obiektów wewnątrz stanów SimpleButton (upState, downState itp.). One istnieją, po prostu nie mają swoich nazw instancji ustawionych na – divillysausages

Powiązane problemy