Toon posts:

[FlashMX] attachMovie met methods, methods niet bereikbaar

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende situatie:

createEmptyMovieClip("eend", 2);
eend.attachMovie("page", "Print", 1);
eend.Print.laadbestand("page"+i+".jpg");
with (eend.Print) {
_x = pageWi/2;
_y = -pivotY;
}
}

De MC page wordt netjes uit de library getrokken en geinstantieerd naar Print, en de _x en de _y worden tevens netjes doorgevoerd, maar de method laadbestand in de movieclip worden echter niet uitgevoerd. Deze zijn gedefineerd in frame 1 van de MC.

Zodra ik echter een laadbestand function maak in het frame waarin bovenstaande code wordt uitgevoerd, dan wordt deze uitgevoerd terwijl ik toch duidelijk eend.Print als referentie meegeef.

laadBestand aanroepen binnen het with(){} statement geeft hetzelfde effect. Is er een mogelijkheid om normaal zonder alles in de _root te dumpen, de methods van een nieuwe instantie van een MC direct aan te roepen? :)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Is die method nou geprototyped of heb je een method (??) gecreeerd op je master MC (in je library)?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
BtM909 schreef op 06 mei 2004 @ 16:40:
Is die method nou geprototyped of heb je een method (??) gecreeerd op je master MC (in je library)?
Method is gecreerd in frame 1 van de MC die uit de library komt ja :)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Om een of andere reden krijg ik dit op jouw manier ook niet aan de praat (terwijl ik dat volgens mij wel eerder heb gedaan). Maar waarom prototype je die method niet gewoon. Dan werkt het zeker weten :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
BtM909 schreef op 07 mei 2004 @ 09:25:
Om een of andere reden krijg ik dit op jouw manier ook niet aan de praat (terwijl ik dat volgens mij wel eerder heb gedaan). Maar waarom prototype je die method niet gewoon. Dan werkt het zeker weten :)
Omdat de call wordt gedaan vanuit een heel andere movieclip :)

Maar het is een heel bijzonder iets inderdaad, ik heb zelfs geprobeerd om via referenties te werken van attachMovie, maar ook dat werkt niet. Het model lijkt in FlashMX met losse zijden draadjes aan elkaar te hangen.

Enige wat ik me kan voorstellen is dat hij niet wil dat je de method definieert in frame 1 van de MC, maar direct op de MC. Daarvoor zal ik hem echter op de stage moeten zetten, iets wat ook niet kan ivm het laden van afbeeldingen.

[ Voor 17% gewijzigd door Verwijderd op 07-05-2004 09:35 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 07 mei 2004 @ 09:33:
[...]


Omdat de call wordt gedaan vanuit een heel andere movieclip :)
Dat maakt toch niet uit :? Ik heb het over prototypen voor je MC in je library.. Dan krijgt toch elke nieuwe instance die method mee ?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Justice
  • Registratie: Maart 2001
  • Laatst online: 07-08-2025
niet alleen alle nieuwe maar alle movieclips :) (als ik het goed heb)

Human Bobby


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Justice schreef op 07 mei 2004 @ 10:25:
niet alleen alle nieuwe maar alle movieclips :) (als ik het goed heb)
Nee hoor :). Je prototyped toch naar een movieclip in je library ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Justice
  • Registratie: Maart 2001
  • Laatst online: 07-08-2025
Ow heb je daar een voorbeeldje van dan, want ik ben OOPlerend :) Jij bedoelt dan wat anders dan dat ik dacht :)

Human Bobby


Verwijderd

Topicstarter
BtM909 schreef op 07 mei 2004 @ 10:06:
[...]

Dat maakt toch niet uit :? Ik heb het over prototypen voor je MC in je library.. Dan krijgt toch elke nieuwe instance die method mee ?
Op welke manier bedoel je dit? :) Waar kan ik de prototypes aanmaken dan, als ik dus object.prototype.laadbestand = function(){} aanmaak in mijn "page" movieClip in frame 1, dan zal hij nog steeds niet bereikbaar worden. En waarom zou een prototype ineens wel bereikbaar zijn ipv een function :)

[ Voor 17% gewijzigd door Verwijderd op 07-05-2004 10:29 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 07 mei 2004 @ 10:28:
[...]


Op welke manier bedoel je dit? :) Waar kan ik de prototypes aanmaken dan, als ik dus object.prototype.laadbestand = function(){} aanmaak in mijn "page" movieClip in frame 1, dan zal hij nog steeds niet bereikbaar worden. En waarom zou een prototype ineens wel bereikbaar zijn ipv een function :)
La maar, zit te klooien met ActionScript1.0. Voor 2.0 moet je zeer waarschijnlijk de wondere wereld van classes en public / private functions in duiken :D
denk ik O-)


Edit:

Heb je een FLA ergens online? Als ik nl. een functie creeer in een frame van een object in m'n library, dan kan ik die gewoon vanaf een ander item aanroepen, dmv:

code:
1
_level0.Gordijnstok.doMe()


waarbij Gordijnstok de instance naam is en doMe de functie ;)

[ Voor 27% gewijzigd door BtM909 op 07-05-2004 10:56 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
Eigenlijk is de hele situatie, ik heb een movieclip in me library en daar wil ik een method in aanbrengen. Deze movieclip wordt met attachMovie geinstantieerd, en nu wil ik de method daarin aanroepen.

Deze method daarin die laad vervolgens binnen die movieclip een afbeelding in.

How difficult can that be :?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 07 mei 2004 @ 10:57:
Eigenlijk is de hele situatie, ik heb een movieclip in me library en daar wil ik een method in aanbrengen. Deze movieclip wordt met attachMovie geinstantieerd, en nu wil ik de method daarin aanroepen.

Deze method daarin die laad vervolgens binnen die movieclip een afbeelding in.

How difficult can that be :?
Wat krijg je als je het volgende in je code toevoegt:
trace(eend.Print.laadbestand)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
use components.... ;)

ben je tenminste zeker dat je method blijven bestaan...

[ Voor 59% gewijzigd door hobbit_be op 07-05-2004 11:06 ]


Verwijderd

Dat komt omdat de functie (geen method) nog niet is geladen. Je plaatst de movieclip op stage, en roept direct de funtie aan. Dit terwijl de movieclip nog niet frame 1 heeft ingeladen. Geen wonder dat hij het niet doet. Enkele oplossingen zijn, je maakt een nieuw object, waarin je een prototype maakt (dan is het een method;)) of je maakt een setInterval waarmee je de functie aanroep!

Verwijderd

Topicstarter
hobbit_be schreef op 07 mei 2004 @ 11:06:
use components.... ;)

ben je tenminste zeker dat je method blijven bestaan...
Dat zou toch belachelijk zijn, voor een product dat wordt gepositioneerd als de ultieme tool voor het creeren van web apps :)

Ik zie ook niet zo het probleem, waarom ik wel de _x en _y mag refereren, maar de methods erin totaal niet aanwezig lijken te zijn. Een trace geeft ook undefined terug.

Verwijderd

omdat de _x en _y getters/setters in de class van een MC zijn gedefinieerd. Wanneer een MC op stage word gezet, worden alle methods, properties, en getters/setters geladen alvorens je hem kan aanroepen.

[ Voor 19% gewijzigd door Verwijderd op 07-05-2004 11:58 ]


Verwijderd

Topicstarter
Verwijderd schreef op 07 mei 2004 @ 11:51:
Dat komt omdat de functie (geen method) nog niet is geladen. Je plaatst de movieclip op stage, en roept direct de funtie aan. Dit terwijl de movieclip nog niet frame 1 heeft ingeladen. Geen wonder dat hij het niet doet. Enkele oplossingen zijn, je maakt een nieuw object, waarin je een prototype maakt (dan is het een method;)) of je maakt een setInterval waarmee je de functie aanroep!
Maar op welke object zou je dit moeten zetten, ik gebruik immers attachMovie("libobject","nieuwobject"). :)

Heb je hier iets van materiaal over? :)

Verwijderd

Wat je nu doet is geen nieuw object aanmaken, maar van een movieclip (object) uit je library een movieclip maken op je stage. De makkelijkste manier nu is denk ik om de movieclip class uit te gaan breiden. Zet daarom op het eerste frame van je FLA het volgende:

[script=as]
MovieClip.prototype.loadPicture = function () {
.. hier je functie
}
[/script]

Wat je nu hebt gedaan is de MovieClip class uitgebreid met de method loadPicture. Deze word nu wanneer je een movieclip aanmaakt direct geladen, waardoor je hem ook direct kan aanroepen zodra de movieclip op je stage staat.

Een andere methode is de setInterval functie. Opzich ook makkelijk te gebruiken, je roept de functie een halve seconde aan, nadat je de movieclip op stage heb gezet. Wat je ook kan doen, is de functie een frame later aanroepen.

Verwijderd

Topicstarter
Ach so, en ik kan het Movieclip object ook specifiek uitbreiden voor een movieclip in de library, of is dit echt een method die je global moet definieren op de timeline in je _root? :)

Overigens best vreemd, dat zou betekenen dat je voor elke movieclip in je library waar je methods op hebt gedefinieerd, en die je niet direct op stage hebt staan, dus het movieclip object direct moet extenden met extra methods? :)

Hoe pak je dat dan op met bijvoorbeeld, eenzelfde functiebenaming voor verschillende movieclips in je library. Bijvoorbeeld mc1 heeft init() en mc2 heeft tevens init() :)

Overigens nog extra, hoe pak je dit op met geneste mc's die je bij attachen direct wil aanroepen? :) Deze zijn schijnbaar ook niet direct beschikbaar.
MovieClip.prototype.loadPicture = function (file) {
trace(this.imageClip);
}

[ Voor 75% gewijzigd door Verwijderd op 07-05-2004 12:57 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 07 mei 2004 @ 12:51:

Hoe pak je dat dan op met bijvoorbeeld, eenzelfde functiebenaming voor verschillende movieclips in je library. Bijvoorbeeld mc1 heeft init() en mc2 heeft tevens init() :)
Je prototyped toch op mc niveau (in je library)... Dus instances van mc1 hebben een init functie en instances van je mc2 ook.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
BtM909 schreef op 07 mei 2004 @ 12:57:
[...]

Je prototyped toch op mc niveau (in je library)... Dus instances van mc1 hebben een init functie en instances van je mc2 ook.
Tenzij de init functies tussen de clips verschillen, dan zul je daarin ook onderscheid moeten maken.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 07 mei 2004 @ 12:58:
[...]


Tenzij de init functies tussen de clips verschillen, dan zul je daarin ook onderscheid moeten maken.
Wacht ff:

Je hebt 2 library items: Gordijnstok en BtM909

Dan kan je op de volgende manier die movieclips extenden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function GordijnClass() {
}

var g = GordijnClass.prototype = new MovieClip();
g.loadMC = function () {
  // functie uitvoer
}

function BtMClass(){
}

var b = BtMClass.protoype = new MovieClip();
b.loadMC = function(){
  // andere functie uitvoer
}

Object.registerClass("Gordijnstok", GordijnClass);
Object.registerClass("BtM909", BtMClass);


Hierdoor hebben alle instances van Gordijnstok en BtM909 de functies loadMC, waarbij ze beide anders zijn.

Zo heb ik het eens een keer gestolen geleerd van B-Top.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Wat ik doe is alle MC's uitbreiden, omdat dit het makkelijkste is in jouw geval (omdat ik aannam dat je niet wist hoe je eigen objecten moet aanmaken). Het klopt dat niet alle MC's deze functies hoeven te gebruiken, maar he, gebruik jij bij elke movieclip de createEmptyMovieClip method ... precies. Voor dit ene geval maakt het dus niet uit.

Het is natuurlijk veel netter om je eigen objecten te schrijven, dan zit je ook niet met benaming problemen (inheritance, polymorphism). Wat ik zou doen als ik jou was is me verdiepen in Object-Oriented Programming.

edit:
Wat je doet is dus 2 classes aanmaken, en die een method geven. Object Oriented Programming with Actionscript is een goed boek wanneer je met actionscript 1.0 werkt. Overigens geld het bovenstaande van BtM niet met actionscript 2.0, die werkt met een compleet andere syntax, en is het maken van objecten vele maler eenvoudiger!

[ Voor 24% gewijzigd door Verwijderd op 07-05-2004 13:06 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op 07 mei 2004 @ 13:04:
edit:
Wat je doet is dus 2 classes aanmaken, en die een method geven. Object Oriented Programming with Actionscript is een goed boek wanneer je met actionscript 1.0 werkt. Overigens geld het bovenstaande van BtM niet met actionscript 2.0, die werkt met een compleet andere syntax, en is het maken van objecten vele maler eenvoudiger!
Dat klopt inderdaad :|

Kan jij een vb geven hoe je dit met AS2.0 op zou pakken?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Topicstarter
OO is geen enkel probleem, hoe Flash dit probeert te implementeren wel :) Er zitten gewoon een aantal zaken in die je maar net moet weten, en die je niet tegenkomt als je een keer in de 6 maanden iets in Flash moet doen :)

Zoals bijvoorbeeld waarom een movieClip binnen een movieClip niet direct aanspreekbaar is bij het aanmaken van het object. :) Dat heeft weer niets met OO te maken maar met hoe Flash bepaalde zaken behandeld, initialiseert, etc. :)

Zeker omdat je constructor in principe ook vast ligt in de library.

[ Voor 6% gewijzigd door Verwijderd op 07-05-2004 13:12 ]


Verwijderd

Flash ActionScript:
1
2
3
4
5
6
7
class Flashaddict extends MovieClip {
    function Flashaddict () {}

    private function loadMC ( movie_param:String ) {
        ....
    }
}

Hier is de extends MovieClip gelijk aan jouw regel : var g = GordijnClass.prototype = new MovieClip(); Met extends inherit het object Flashaddict alle methods en properties van een MC. Ik kan ook bv. extends Sound gebruiker, ik erf dan alle methods en properties van het soundObject.
Zeker omdat je constructor in principe ook vast ligt in de library.
Wanneer een object word aangemaakt, word de constructor uitgevoerd, en alle methods, en properties geladen. Niet eerder. En het direct aanroepen van een MC in een MC is geen probleem hoor:

Flash ActionScript:
1
2
3
var myMC = createEmptyMovieClip ("myMC", "mc", 1 );
var anotherMC = myMC.createEmptyMovieClip ("myMC", "mc", 1 );
var anotherOne = anotherMC.createEmptyMovieClip ("myMC", "mc", 1 );


werkt gewoon

[ Voor 96% gewijzigd door Verwijderd op 07-05-2004 13:20 ]


Verwijderd

Topicstarter
Ik heb bijvoorbeeld adhv jouw voorbeeld de method toegevoegd aan de class movieClip.

MovieClip.prototype.loadPicture = function (file) {
trace("ja");
this.imageClip.loadMovie(file);
}

Elke mc waarop deze method wordt uitgevoerd heeft de MC imageClip op het canvas staan met de instanceName imageClip. Desondanks wordt hij niet gevonden :) Een trace op this.imageClip geeft tevens undefined terug :)

Maar dit zou volgens jou dus direct benaderbaar moeten zijn? :)


edit:

oww ... |:( moet je vooral net 5 minuten daarvoor de mc hebben ontdaan van die Movieclip :)

[ Voor 13% gewijzigd door Verwijderd op 07-05-2004 13:29 ]


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Verwijderd schreef op 07 mei 2004 @ 11:52:
[...]


Dat zou toch belachelijk zijn, voor een product dat wordt gepositioneerd als de ultieme tool voor het creeren van web apps :)

Ik zie ook niet zo het probleem, waarom ik wel de _x en _y mag refereren, maar de methods erin totaal niet aanwezig lijken te zijn. Een trace geeft ook undefined terug.
1) Die ultieme tool is geen Flash, maar heet Flex, is een factor 12 duurder ;)
2) Als ik in SWT een control probeer aan te spreken die ik daarvoor nog helemaal niet gedefineerd heb, dan gaat mijn compiler ook klagen. Part of the game, zo zou je dit ook kunnen vergelijken
3) Kan iedereen hier ff stoppen met het toepassen van het woord prototype in de werkwoord vorm, ten eerste is het fout, ten tweede klinkt het voor geen meter. Dank u. :)
4) Over de suggestie van hobbit_be over het gebruik van Components, second that. :)

"You're only as good, as what you did last week."


Verwijderd

Pelle is ooit begonnen met het prototypen, so blame him >:)
Pagina: 1