PDA

Volledige versie bekijken : Class extends MovieClip + attachMovie


eindbaas
%Europe/Berlin %978 %2006, 23:29
Allereerst hallo iedereen, want dit is mijn aller-uber-eerste post op dit forum. Na de veel te korte formaliteiten het probleem waar ik mee zit.

Ik heb een class Interface, die uit meerdere delen bestaat, en daarvoor ook de bijbehorende classes als properties heeft. Eentje daarvan is een Viewer, die de MovieClip-class extends.

dus zoiets:

class Interface{
var viewer:Viewer;
... ...
...
}

class Viewer extends MovieClip{


}

daarbij heb ik een viewer-movieclip (met daarin het uiterlijk van de viewer) in mijn library staan die gelinked is aan de Viewer-class.

als de interface wordt aangemaakt (new Interface), wordt in de constructor daarvan mbv createEmptyMovieClip en vervolgens AttachMovie die gelinkte movieclip op de stage gezet. De link met de Viewer-class werkt goed, want ik zie dat de constructor van die class wordt aangeroepen (hij tracet iets). Er wordt dus een instantie van die class aangemaakt, en nu komt mijn vraag: de referentie daarnaartoe zou ik heel graag in de property viewer van de interface hebben.

Hoe krijg ik die? Of doe ik hele rare en omslachtige dingen?

Dauntless
%Europe/Berlin %983 %2006, 23:36
Welkom op het forum! :)

Wel een beetje verwarrend dat je je classe 'Interface' noemt (Interface <-> interface).

Waarom gebruik je eerst createEmptyMovieClip en dan attachMovie ? Waarom niet direct attachMovie ?

Om je geattachte (hoe schrijf je dat?) movieclip te linken aan een classe, moet je normaal toch nog iets extra doen... Kijk hier even:
http://www.flashfocus.nl/forum/showthread.php?t=18389

eindbaas
%Europe/Berlin %007 %2006, 00:11
Ja, die createemptymovieclip is inderdaad overbodig, en de naam interface is niet handig, heb het inmiddels aangepast. Maar de methode om die twee (de mc en de class) te linken werkt prima; zoals gezegd wordt de constructor van de desbetreffende class aangeroepen zodra ik die mc op de stage zet.

het is me inmiddels ook gelukt (met dank aan de flash-hulplijn van koert) om de instantie van de class te pakken te krijgen, en dat was vrij eenvoudig (en logisch) te doen door:

viewer = _root.attachMovie("lib_Viewer","mc_Viewer",_root.getNextHighestDepth());

ik had dit al eens eerder geprobeerd, maar toen ging Flash mekkeren en dat bleek te liggen aan het feit dat ik de property viewer had gedeclareed als zijnde van het type viewer:

class Interface{
var viewer:Viewer;
}

als ik die type-vermelding weghaal (of er movieclip van maak) werkt het allemaal prima. en op de een of andere manier snap ik dat niet, want het is toch eigenlijk een Viewer die ik erin stop.

Dauntless
%Europe/Berlin %328 %2006, 07:53
Jah, dat ligt aan het ontbreken van goede polymorfisme in Flash... Als je er een cast rond zet gaat het ook :).

viewer = Viewer(_root.attachMovie("lib_Viewer","mc_Viewer",_root.getNextHighestDepth()));
En dan kan je het type laten staan.