hilfe bei actionscript
hi leute,
konkret will ich folgendes mit actionscript nachbauen.
https://www.gutmarkiert.de/edit-product.asp?ordernumber=102
ich meine den flash bereich wo durch ein mouseover über den kreiesen die farbe wechselt.
ich kann gut programmieren, bin allerdings ein actionscript neuling. deshalb wollte ich fragen wie ich das am besten realisiere.
ich hätte mal gesagt ich zeichne die ganzen sachen einfach auf den hintergrund und verwende einen mouselistener um das ganze zu machen.
wird das in actionscript so gemacht, oder gibts da bessere varianten? wenn ja was sind klassen die mir helfen können.
danke schonmal für eure hilfe.
jperl
konkret will ich folgendes mit actionscript nachbauen.
https://www.gutmarkiert.de/edit-product.asp?ordernumber=102
ich meine den flash bereich wo durch ein mouseover über den kreiesen die farbe wechselt.
ich kann gut programmieren, bin allerdings ein actionscript neuling. deshalb wollte ich fragen wie ich das am besten realisiere.
ich hätte mal gesagt ich zeichne die ganzen sachen einfach auf den hintergrund und verwende einen mouselistener um das ganze zu machen.
wird das in actionscript so gemacht, oder gibts da bessere varianten? wenn ja was sind klassen die mir helfen können.
danke schonmal für eure hilfe.
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Da du von listenern sprichst, denke ich mal du möchtest das Ganze in AS3 realisieren. Was auch gut so ist, denn AS2 ist schon wieder alt
Im Groben hast du schon recht:
- Irgend ein Element bekommt zwei eventListener bezüglich eines MouseOver & eines MouseOut
- Die eventListener lösen Funktionen aus, die die Eigenschaft "Farbe", "Größe", "Alpha", oder was auch immer ansprechen
- Das zu steuernde Element wird in der gerade erwähnten Eigenschaft verändert
Wie das im einzelnen geht schreib ich dir morgen mal wenn ich Zeit finde.

Im Groben hast du schon recht:
- Irgend ein Element bekommt zwei eventListener bezüglich eines MouseOver & eines MouseOut
- Die eventListener lösen Funktionen aus, die die Eigenschaft "Farbe", "Größe", "Alpha", oder was auch immer ansprechen
- Das zu steuernde Element wird in der gerade erwähnten Eigenschaft verändert
Wie das im einzelnen geht schreib ich dir morgen mal wenn ich Zeit finde.
actionscript: parameter an listener übergeben
habs jetzt mal prototypisch implementiert.
siehe hier:
http://jperl.wmw.cc/Labels.swf
ich habe noch eine frage wegen der übergabe von parametern an den Listener.
ich erzeuge meine buttons dynamisch in einer schleife.
dabei gebe ich ja allen die funktion mouseOverHandler an.
in dieser funktion mache ich dann eine if abfrage welches target das event ausgelöst hat.
das ist leider kein wirklich schöner programmierstil. geht das auch besser?
würde der vergleich == "instance2" überhaupt zuverlässig funktionieren? derzeit hab ich nur via firefox getestet.
auf jeden fall würde ich dieses probleme gerne programmiertechnisch schön lösen und hoffe mal actionscript bietet hier auch einen vernünftigen mechanismus an um parameter angeben zu können.
jperl
siehe hier:
http://jperl.wmw.cc/Labels.swf
ich habe noch eine frage wegen der übergabe von parametern an den Listener.
ich erzeuge meine buttons dynamisch in einer schleife.
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
for (var index:int = 0; index < colors.length; index++)
{
var tSprite:Sprite = new Sprite();
tSprite.graphics.beginFill(borderColor,1);
tSprite.graphics.drawRoundRect(start-borderW,10-borderW,width+2*borderW,height+2*borderW,cornerRadius);
tSprite.graphics.beginFill(colors[index],1);
tSprite.graphics.drawRoundRect(start,10,width,height,cornerRadius);
tSprite.graphics.endFill();
start += 20 + spacing;
tSprite.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
mySprite.addChild(tSprite);
}
|
dabei gebe ich ja allen die funktion mouseOverHandler an.
in dieser funktion mache ich dann eine if abfrage welches target das event ausgelöst hat.
das ist leider kein wirklich schöner programmierstil. geht das auch besser?
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
private function mouseOverHandler(e:MouseEvent):void
{
var s:Sprite = new Sprite();
var nColor:int = 0;
if(e.target.name == "instance2")
{
nColor = colors[0];
}
else if(e.target.name == "instance3")
{
nColor = colors[1];
}
else if(e.target.name == "instance4")
{
nColor = colors[2];
}
else if(e.target.name == "instance5")
{
nColor = colors[3];
}
else if(e.target.name == "instance6")
{
nColor = colors[4];
}
else if(e.target.name == "instance7")
{
nColor = colors[5];
}
s.graphics.beginFill(nColor,1);
s.graphics.drawRoundRect(10,50,280,80,20);
addChild(s);
trace(e.target.name);
}
|
würde der vergleich == "instance2" überhaupt zuverlässig funktionieren? derzeit hab ich nur via firefox getestet.
auf jeden fall würde ich dieses probleme gerne programmiertechnisch schön lösen und hoffe mal actionscript bietet hier auch einen vernünftigen mechanismus an um parameter angeben zu können.
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Moin Moin,
So kann man es natürlich machen, aber wenn es um Flash geht, würde ich anders vorgehen. Da Änderungen an einer swf-Datei immer mehr Arbeit mitbringen, als wie bei HTML zum Beispiel, mache ich mir vorher immer genau klar, was benötigt wird und was nicht. Beim späteren Programmieren wird dann vieles einfacher.
In deinem Fall also, sagen wir du weißt: Ich möchte 4 Farben anbieten.
Dann fällt es einem wesentlich leichter, definitiv ansprechbare Instanzen eines "Button-movieclips" anzusprechen und ihnen listener anzuhängen.
Jetzt hast du außerdem das unschöne Problem, dass immer neue childs (s) geaddet werden.
Um endlich zum Punkt zu kommen: Du solltest eine Instanz deines Ziel-Labels erzeugen und dann die Farbe über colorTransform ändern
So kann man es natürlich machen, aber wenn es um Flash geht, würde ich anders vorgehen. Da Änderungen an einer swf-Datei immer mehr Arbeit mitbringen, als wie bei HTML zum Beispiel, mache ich mir vorher immer genau klar, was benötigt wird und was nicht. Beim späteren Programmieren wird dann vieles einfacher.
In deinem Fall also, sagen wir du weißt: Ich möchte 4 Farben anbieten.
Dann fällt es einem wesentlich leichter, definitiv ansprechbare Instanzen eines "Button-movieclips" anzusprechen und ihnen listener anzuhängen.
Jetzt hast du außerdem das unschöne Problem, dass immer neue childs (s) geaddet werden.
Um endlich zum Punkt zu kommen: Du solltest eine Instanz deines Ziel-Labels erzeugen und dann die Farbe über colorTransform ändern
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »J-W« (2. Februar 2010, 11:43)
Moin Moin,
So kann man es natürlich machen, aber wenn es um Flash geht, würde ich anders vorgehen. Da Änderungen an einer swf-Datei immer mehr Arbeit mitbringen, als wie bei HTML zum Beispiel, mache ich mir vorher immer genau klar, was benötigt wird und was nicht. Beim späteren Programmieren wird dann vieles einfacher.
In deinem Fall also, sagen wir du weißt: Ich möchte 4 Farben anbieten.
Dann fällt es einem wesentlich leichter, definitiv ansprechbare Instanzen eines "Button-movieclips" anzusprechen und ihnen listener anzuhängen.
Jetzt hast du außerdem das unschöne Problem, dass immer neue childs (s) geaddet werden.
Um endlich zum Punkt zu kommen: Du solltest eine Instanz deines Ziel-Labels erzeugen und dann die Farbe über colorTransform ändern
gute hinweis. das mit dem color transform und der instanz habe ich mal umgesetzt.
da ich als programmierer möglichst skalierbaren code erzeugen will, soll in meinem code die anzahl der farben sehr leicht anpassbar sein. ich brauche nur im farbenarray eine neue farbe angeben und schon wird ein neues element gezeichnet und der farbwechsel funktioniert.
habe jetzt eine möglichkeit gefunden, die mehrfachen if abfragen zu verhindern, indem ich die einzelnen sprites in einem array speichere und damit vergleichen kann.
somit kann ich so viele farben anbieten wie ich will und den code sehr leicht anpassen, ohne weitere fehler einzubauen. damit ist der code wiederverwendbarer und wäre eventuellen kundenwünschen nach mehr farben gewappnet.
einige fragen noch, da ich wie gesagt actionscript anfänger bin:
was ist unschön an neuen child(ren)? sind doch im grunde nur subelemente.
was ist der vorteil eines button-movieclips (einen listener kann ich mit den sprites auch gut verwenden)? wie erzeuge ich per code einen neuen button movieclip (ist das die klasse button?)?
danke schonmal.
jperl
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Kein Problem, ich freue mich ja, dass ich hier im Forum auch mal Leute finde, die sich mit Flash beschäftigen 
Das Problem bei "addChild" ist das der "viewStack" (quasi eine Liste aller displayObjects auf deiner Bühne) immer wieder um ein Eintrag erweitert wird.....und somit langsam zumüllt. Das ist zum einen ungeschickt gelöst und zum anderen, kann es auch schnell zu Performance-Problemen kommen.
ABER: Das würde addChild ja überflüssig machen, daher gibt es auch wieder removeChild. Du könntest in deinem Beispiel also jedes mal, wenn eine andere Farbe gewählt wird, das alte Child removen.
Mit "Button-movieclip" meinte ich, dass du innerhalb von Flash ein neues Symbol anlegst (einen movieclip eben) der dann deinen Farbwähler darstellt.
Von diesem movieclip kannst du dann auch wieder beliebig viele Instanzen zu deinem viewStack hinzufügen....nämlich mit addChild.
Das gute an der Methode, dir erst ein Symbol zu basteln und es dann auf der Bühne zu instanzieren, ist, dass du dir alle Mühe beim "bauen" oder auch "designen" deines Farbwähler machen kannst und dann holst du dir beliebig viele Farbwähler als Instanzen. Natürlich kannst du dann auch auf die Farbeigenschaft dieser Instanzen zugreifen und die eine Blau, die andere Grün (und so weiter und so weiter) machen.
Im Grunde machst du nicht viel anders, als wenn du mit Sprites arbeitest, aber du hat auf diesem Wege nicht so eine gute Kontrolle über komplexere Buttons.

Das Problem bei "addChild" ist das der "viewStack" (quasi eine Liste aller displayObjects auf deiner Bühne) immer wieder um ein Eintrag erweitert wird.....und somit langsam zumüllt. Das ist zum einen ungeschickt gelöst und zum anderen, kann es auch schnell zu Performance-Problemen kommen.
ABER: Das würde addChild ja überflüssig machen, daher gibt es auch wieder removeChild. Du könntest in deinem Beispiel also jedes mal, wenn eine andere Farbe gewählt wird, das alte Child removen.
Mit "Button-movieclip" meinte ich, dass du innerhalb von Flash ein neues Symbol anlegst (einen movieclip eben) der dann deinen Farbwähler darstellt.
Von diesem movieclip kannst du dann auch wieder beliebig viele Instanzen zu deinem viewStack hinzufügen....nämlich mit addChild.
Das gute an der Methode, dir erst ein Symbol zu basteln und es dann auf der Bühne zu instanzieren, ist, dass du dir alle Mühe beim "bauen" oder auch "designen" deines Farbwähler machen kannst und dann holst du dir beliebig viele Farbwähler als Instanzen. Natürlich kannst du dann auch auf die Farbeigenschaft dieser Instanzen zugreifen und die eine Blau, die andere Grün (und so weiter und so weiter) machen.
Im Grunde machst du nicht viel anders, als wenn du mit Sprites arbeitest, aber du hat auf diesem Wege nicht so eine gute Kontrolle über komplexere Buttons.
Kein Problem, ich freue mich ja, dass ich hier im Forum auch mal Leute finde, die sich mit Flash beschäftigen
Das Problem bei "addChild" ist das der "viewStack" (quasi eine Liste aller displayObjects auf deiner Bühne) immer wieder um ein Eintrag erweitert wird.....und somit langsam zumüllt. Das ist zum einen ungeschickt gelöst und zum anderen, kann es auch schnell zu Performance-Problemen kommen.
ABER: Das würde addChild ja überflüssig machen, daher gibt es auch wieder removeChild. Du könntest in deinem Beispiel also jedes mal, wenn eine andere Farbe gewählt wird, das alte Child removen.
ahja ich verstehe was du meinst. dieses problem sollte aber jetzt durch die verwendung von colortransform obsolet geworden. ich ändere ja nur mehr die farbe der instanz und füge keine neuen hinzu.
Mit "Button-movieclip" meinte ich, dass du innerhalb von Flash ein neues Symbol anlegst (einen movieclip eben) der dann deinen Farbwähler darstellt.
Von diesem movieclip kannst du dann auch wieder beliebig viele Instanzen zu deinem viewStack hinzufügen....nämlich mit addChild.
Das gute an der Methode, dir erst ein Symbol zu basteln und es dann auf der Bühne zu instanzieren, ist, dass du dir alle Mühe beim "bauen" oder auch "designen" deines Farbwähler machen kannst und dann holst du dir beliebig viele Farbwähler als Instanzen. Natürlich kannst du dann auch auf die Farbeigenschaft dieser Instanzen zugreifen und die eine Blau, die andere Grün (und so weiter und so weiter) machen.
Im Grunde machst du nicht viel anders, als wenn du mit Sprites arbeitest, aber du hat auf diesem Wege nicht so eine gute Kontrolle über komplexere Buttons.
werde ich mir mal näher anschauen. eine eigene klasse für den farbwähl-button würde sich wohl anbieten.
danke für deine bisherige hilfe.
jperl
#edit:
bin jetzt gerade dabei javascript mit actionscript zu verbinden. nur wie schaffe ich es, dass durch ein movie.SetVariable("variable", "wert") etwas im actionscript eine aktion ausgelöst wird?
irgendwie weiß ich nicht wie ich meinen actionscript code anlegen soll, sodass dieser auf die änderung reagiert.
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »jperl« (3. Februar 2010, 23:30)
Ich würde das ganze mit der API "ExternalInterface" lösen (wenn es nicht sogar die einzige Lösung ist, da bin ich mir aber nicht sicher).
Mehr dazu: HIER
genau damit habe ich es gestern schon gelöst.
danke für deine hilfe. funktioniert einwandfrei.
jperl
#edit
größenproblem mit stage.scalemode gelöst.
Konfuzius [chinesischer Philosoph (551 - 479 v. Chr.)]
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Das Entscheidende am Wissen ist, daß man es beherzigt und anwendet.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »jperl« (5. Februar 2010, 17:05)
Ähnliche Themen
-
(X)HTML & CSS & DHTML & Javascript »-
funktionsweise folgender seite
(1. Februar 2010, 14:24)
-
Allgemeines Forum »-
bilder freistellen
(30. November 2009, 21:07)
-
Flash »-
Legaler DL EBook "Flash MX ActionScript"
(29. August 2003, 16:10)
-
Flash »-
actionScript bei flash 5
(4. Mai 2003, 13:20)
-
Flash »-
HILFE bitte >> actionscript für <input type="submit" name="action" value="Star">
(28. April 2003, 21:07)


