Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-12-2004, 01:58   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Ort: karlsruh
Beiträge: 13
function aufruf

Jaja ich weiß, ich bin ganz neu und schon kommt eine Frage... hab mich aber schon im Forum umgeschaut, nix gefunden und jetzt dreist zu folgendem Script, dass komplett in der Zeitleiste liegen soll, die Frage:

Wie weise ich dem "mc" die function zu, ohne auf das .onRelease zurück greifen zu müssen?


Code:
function knopfScript(objekt, releaseFrame, rollOverFrame, aktion) {
	objekt.onRelease.gotoAndPlay(releaseFrame);
	objekt.onRollOver.gotoAndPlay(rollOverFrame);
	objekt._alpha = aktion;
}

mc.onRelease  = function() {
	knopfScript(mc, 5, 10, 50);
};
Mit dem .onRelease werden naturgemäß alle MouseEvents die in der Funktion für den mc definiert sind ignoriert.

Natürlich könnte man auch für ein und den selben mc mehrere Funktionen definieren (onRelease, onRollOver, onUndSOWeiter...) aber ich will es elegant haben, sonst würde ich ja nicht Flash programmieren (versuchen).

Ich hoffe das Problem wird deutlich. Vielen Dank für die Hilfe
Tim
tim24 ist offline   Mit Zitat antworten
Alt 30-12-2004, 02:53   #2 (permalink)
*warg*
 
Registriert seit: May 2002
Ort: Berlin
Beiträge: 261
hi,
nach reiflichen überlegungen bin ich zu folgenden punkten gekommen:

1.) das Forum ist dazu da, damit du fragen stellen kannst :-)
2.) Ich habe schon lange nicht mehr geflasht .. *fluch* .oO(wieso treib ich mich schon wieder hier rum)
3.) .. du solltest dein "knopfscript" als funktion für deine MCs einführen.
das heißt OOP und ist immer einer äußerst elegante Lösung! :-)
hier mal ein wenig code . als kleines schema . der code ist aber in flash MX und nicht MX2004 entstanden und ich hab mich seitdem nicht mehr mit AS beschäftigt und glaube, gerade im OOP bereich hat sich doch flash mit mx2004 stark weiterentwickelt (oder?).. also, wer n besseren vorschlag hat oder mal "optimieren" mag, immer zu !

ActionScript:
  1. function myMc() {
  2.     this._alpha = 100; /* *achselzuck* aus freude am scripten */
  3. }
  4. myMc.prototype.onRelease = function() {
  5.     trace("du hast mich gedrückt")
  6.  /*nur ein beispiel, das sowas auch möglich ist
  7. hier natürlich nicht wirklich sinnvollM; ansonsten : freude am scripten :-) */
  8. };
  9.  
  10. myMc.prototype.knopfScript(releaseFrame, rollOverFrame, aktion) = function() {
  11.     this.onRelease.gotoAndPlay(releaseFrame);
  12.     this.onRollOver.gotoAndPlay(rollOverFrame);
  13.     this._alpha = aktion;
  14. }
  15. Object.registerClass("deinObjektNameAusDerLibrary", myMc);
  16.  /*das mit dem object-namen .. ich glaube, dass sollte der "identifier" sein
  17. (rechsklick in der biblio , properties, ggf. "Advanced" anklicken und eintragen) */
  18.  
  19. /* aufgerufen mit */
  20. myMc_Instanz1.knopfscript(5,10,50);
müsste so klappen - sofern dein script oben klappt - aber:
kann auch absoluter mist gewesen sein, was ich hier geschrieben habe, falls ja, haut mich einer bitte.

*überleg* .. du könntest natürlich die function gleich als eine function für alle movieClips definieren .. ähmm . habs aber nie getan, weiß nicht, wie man es ganz korrekt macht
.oO( MovieClip.prototype.knopfscript=function() { ... } - ?? )
aber ob das alles wirklich elegant ist .... *schaut* .. naja, weiß nicht, wie man es sonst eleganter machen sollte
ich frage mich nur .. wozu ein solches script?

schönen Gruß
_Tuffy

Edit:
*sich das anschau .. .. überleg .. überleg .. anschau .. deine frage anschaut* ..
*achselzuck* ..
vll. hast du aber eher sowas gesucht:
ActionScript:
  1. function knopfScript(objekt, releaseFrame, rollOverFrame, aktion) {
  2.     objekt.onRelease.gotoAndPlay(releaseFrame);
  3.     objekt.onRollOver.gotoAndPlay(rollOverFrame);
  4.     objekt._alpha = aktion;
  5. }
  6.  
  7. mc.onLoad= function() { //hier geändert
  8.     knopfScript(mc, 5, 10, 50);
  9. };

naja .. ..inzwischen bin ich mir auch nicht so ganz sicher, wo es dich juckt .. eins von beiden wird sicherlich deine Lösung sein (oder dich deiner Lösung näherbringen *ggg* )

Gruß Tuffy
__________________
"nimm dir das leben - es gehört dir!"
"die realität versucht mich einzuholen - doch ich bin schneller !"

Geändert von Tuffyfant (30-12-2004 um 03:10 Uhr)
Tuffyfant ist offline   Mit Zitat antworten
Alt 30-12-2004, 08:37   #3 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
Thumbs up

wie geil tuffy...das liest sich wie´n roman...hähä..

aber davon ab...wenn ich schon dinge sehe wie:

mc.onRollOver.gotoAndPlay

sag mal...wo findet man so was geschrieben?
syntaktisch ist das ein erschiessungskommando..*räusper*
was haben wir über onEvents gelernt?
sie müssen erst mal initialisiert werden, bevor wir wild mit ihnen hantieren dürfen - und das geschieht über:

ActionScript:
  1. onEvent = function (){
  2.                //code
  3. }

also machen wir mal folgendes:
ActionScript:
  1. function knopfScript(objekt, releaseFrame, rollOverFrame, aktion) {
  2.         objekt.relFrame = releaseFrame;
  3.         objekt.rollFrame = rollOverFrame;
  4.     objekt.onRelease= function(){this.gotoAndPlay(this.relFrame);};
  5.     objekt.onRollOver= function(){this.gotoAndPlay(this.rollFrame);};
  6.     objekt._alpha = aktion;
  7. }
  8.  
  9. mc.onRelease  = function() {
  10.     knopfScript(mc, 5, 10, 50);
  11. };


so würde das auch gehen, selbst mit einem onRelease.
wäre ja noch schöner, wenn man pro object nur einen event feuern könnte...*gg*


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 31-12-2004, 00:58   #4 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Ort: karlsruh
Beiträge: 13
So, Hallo,
Mensch das ging ja wahnsinnig schnell und dann auch noch so gut!


@Tuffy:
liest sich, da stimme ich kelor zu, sehr gut was du schreibst, man hört fast wie du denkst und wie es dir freude mach zu scripten, auch sehr sinnvoll einfach den alphawert mal auf 100 zu setzten, als hätten wir sonst keine Sorgen...

Die zweite Lsg die du vorgeschlagen hast war genau das was ich suchte, funzt aber seltsamer_weise nicht...
Das erste war auch sehr nett anzuschauen aber... naja, ich bin ja nicht blöd, aber leider noch nicht so weit das ich das alles geblickt habe, also raff das schon aber... naja, elegant aber: simpel... das hätte ich vielleicht dazu sagen sollen...

@kelor:
hab dann einfach dein script genommen und es etwas modifiziert, sieht jetzt so aus:

Code:
function knopfScript(objekt, releaseFrame, rollOverFrame, rollOutFrame) {
	objekt.relFrame = releaseFrame;
	objekt.rollOverFrame = rollOverFrame;
	objekt.rollOutFrame = rollOutFrame;
	objekt.onRelease = function() {
		this.gotoAndStop(this.relFrame);
		trace("onRelease");
	};
	objekt.onRollOver = function() {
		this.gotoAndStop(this.rollOverFrame);
		trace("rollOverFrame");
	};
	objekt.onRollOut = function() {
		this.gotoAndStop(this.rollOutFrame);
		trace("onRollOut");
	};
}
mc.onRollOver  = function() {
	trace("main:move");
	knopfScript(mc, 5, 10, 1);
};
das ist auch super aber:
beim ersten onRollOver , den man im film auf dem mc macht, macht er zwar den trace aber die funktion wird wohl noch nicht angesprochen, also den trace aus der Funktion macht er beim ersten rollOver nicht.

so weit so dumm von mir, vielleicht wisst ihr ja noch was und wie gesagt: das mit dem onLoad klappt net (wäre ja auch zu einfach gewesen)

grüsse
Tim (24)
tim24 ist offline   Mit Zitat antworten
Alt 31-12-2004, 11:55   #5 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
ja den trace aus dem zweiten onRollover innerhalb der funktion kann er ja auch erst beim zweiten mal feuern.
der wird ja erst NACH dem ersten mal erstellt.
außerdem wäre die übergabe innerhalb des onRollOver-events mit 'this' anstelle von 'mc' richtig.
stichwort: scoping!


und du willst, dass beide gefeuert werden? oder wie?



greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 31-12-2004, 19:58   #6 (permalink)
*warg*
 
Registriert seit: May 2002
Ort: Berlin
Beiträge: 261
Zitat:
auch sehr sinnvoll einfach den alphawert mal auf 100 zu setzten, als hätten wir sonst keine Sorgen...
*hehe* .. jaa .. ich hab spaß dran ;-) hier kommt der nächste Roman (ich hoffe "roman" war nicht böse gemeint @ kelor )

ein paar weitere Gedanken:
achja.. zwischen Simpel und elegant ist ungewollt meist ein himmelweiter unterschied....

ich glaube z.B. dass objekt.onRelease.gotoAndPlay() zwar ne syntaktische vergewaltigung darstellen mag, aber simpler gehts eigentlich nicht zu schreiben oder ? .. zumindest, wenn man ledeglich eine Aktion ausführen will.

dass er dein trace nicht ausgibt ist doch eigentlich ganz klar. wenn ich mir deinen Code so anschaue und mir einen Debugger vorstelle, denke ich folgendes:

das onRollOver wird ausgelößt:
ActionScript:
  1. mc.onRollOver  = function() {
  2.     trace("main:move");
  3.     knopfScript(mc, 5, 10, 1);
  4. };
es wird getraced ( ich liebe deutsch!) und erst dann wird knopfScript aufgerufen. der Debugger geht zum knopfscript quelltext und ...
erst nach dem ersten onRollOver wird das verhalten :

ActionScript:
  1. objekt.onRelease = function() { ... };
  2. objekt.onRollOver = function() { ... };
  3. objekt.onRollOut = function() { ...);
für deinen MC gesetzt.
so das er beim zweiten onRollOver gleich zum knopfscript springt.
wenn du willst, dass sofort dein trace ausgegeben wird, musst du dein knopfscript noch vor dem ersten onRollover laden.
das kannst du dann wie erwähnt mit
ActionScript:
  1. mc.onLoad= function() {
  2.     trace("main:move");
  3.     knopfScript(mc, 5, 10, 1);
  4. };
machen, aber dann wird dein trace sofort beim laden ausgegeben ...
oder du machst eine elegante klasse (*gg*) wie in meinem ersten beispiel und schreibst ledeglich
ActionScript:
  1. myMc.knopfScript(mc, 5, 10, 1)
dann brauchst du auch keinen onEvent um dein knoptScript zu laden. Aber wenn du willst, dass dein:
trace("main:move");
nur ein erstes mal ausgegeben wird, während auch noch
ActionScript:
  1. objekt.onRollOver = function() {
  2.         this.gotoAndStop(this.rollOverFrame);
  3.         trace("rollOverFrame");
  4.     };
tut. dann musst du das trace in dein kopfscriupt-onRollOver packen und ein wenig mit hilfsvariablen herumbauen, in der du abspeicherst, ob
trace("main:move");
schon mal aufgerufen worden ist.....

so, dass reicht erstmal an kreativen ergüssen meinerseits heute *g*

schönen Gruiß und frohes Neues
wünscht euch _Tuffy
__________________
"nimm dir das leben - es gehört dir!"
"die realität versucht mich einzuholen - doch ich bin schneller !"
Tuffyfant ist offline   Mit Zitat antworten
Alt 06-01-2005, 16:42   #7 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Ort: karlsruh
Beiträge: 13
Cool ach ja...

Tuffy, du hast ja so recht es müsst eklappen, aber es klappt nicht, ich bin am ende, am boden zerstört, mein kopf raucht und ich komme um vor leid....

nun ja, also eigentlich gehts mir gut nur ich versteh es halt nicht
Code:
mc.onLoad= function() { 
    trace("main:move"); 
    knopfScript(mc, 5, 10, 1); 
};
klappt genau nicht; klappen tut aber:
Code:
mc.onEnterFrame = function() {
	trace("main:move");
	knopfScript(mc, 5, 10, 1);
};
das ist halt ein wenig ressourcenintensiver... das main:move wird naturgemäß dann in jedem frame getraced (auch meine lieblingssprache asi-deutsch [actionScriptInterpolations-Deutsch])
Ich versteh aber überhaupt gar nicht und ich sehe es auch nicht ein, dass das onLoad nicht funzt.... ratlos und geflasht....

ach,
Code:
_root.onLoad = function() {
	trace("main:move");
};
funktioniert, also dann wird "main:move" ausgegeben... aber ich wills doch mit dem mc.... hach ja
gruss
Tim
tim24 ist offline   Mit Zitat antworten
Alt 06-01-2005, 17:25   #8 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
onLoad funktioniert NUR und ausschließlich mit objekten, die geladen werden... (dazu zählt auch _root(_level0))...

also einen mc, den du da hast wird das onLoad wenig jucken...
aber warum auch in den onLoad rein?

schreib´s dioch einfach auf die zeitleiste ohne handler...

also simpel in die erste zeile...

ActionScript:
  1. trace("main:move");
  2.     knopfScript(mc, 5, 10, 1);

wozu muss da n eventhandler herhalten?


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 06-01-2005, 17:48   #9 (permalink)
Neuer User
 
Registriert seit: Dec 2004
Ort: karlsruh
Beiträge: 13
Jajaja, du hast völlig recht, hab ich dann auch grade festgestellt, leider leider bleibt es wahr: es gibt dumme Fragen und manchmal gibt es auch in meinem Kopf zu wenige Gedanken.

Hatte mich grad schon auf sowas eingeschossen:

Code:
_root.onLoad = function() {
	trace("something");
	knopfScript(mc, 5, 10, 1);
	knopfScript(mcc, 5, 10, 1);
};
aber man kann das natürlich auch weglassen...und wie du sagst, einfach das zeug in die erste zeile schreiben... fühl mich wie ein erstklässler der grad in die Hose gemacht hat.... aber es ist ein warmes Gefühl

Vielen Dank auf jeden Fall
Tim
tim24 ist offline   Mit Zitat antworten
Alt 06-01-2005, 18:08   #10 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
Thumbs up

Zitat:
aber es ist ein warmes Gefühl..
*muuahh* der war gut!..



greetz

kelor
kelor ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele