| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| MFA Registriert seit: Oct 2003 Ort: Bielefeld
Beiträge: 87
| Dynamische Farben, aber keine Ani mehr möglich?!
Hi ich habe einen Flash Film wie folgt: Hauptebene l- MC1 l-MC11 l-MC12 l-MC13 l-Schaltfläche Auf der Hauptebene steht im Code, dass ich per new color und set RGB die Farben der MCs11-13 vergebe. Im MC1 ist ein Tweening angelegt, jeder MC11-13auf eigener Ebene, dass die MCs bewegt, von A nach B. Sobald ich auf die Schaltfläche drücke, soll das Tweening gestartet werden. Doch nur die Schaltfläche bewegt sich. Sobald ich die Farbzuweisung setRGB aus dem Code in der Hauptebene lösche, funktioniert es einwandfrei. Leider ist beides wichtig, Kann mir einer einen Tip geben? ICh kann auch mal den Flashfilm hochladen für testzwecke... Tobi |
| | |
| | #2 (permalink) |
| mod_rewrite Registriert seit: Feb 2003 Ort: München
Beiträge: 15.621
|
Ja offenbare doch mal mehr Code oder tu mal die fla hoch. Das würd mich jetzt auch interessieren...
__________________ RTFM Wie man Fragen richtig stellt. Achim Bindannmalweg Money makes the world go round, fear makes it turn much faster. (New Model Army) |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
in OpenInfos.zip habe ich ein bisschen mehr gemacht: a) nicht 1000 objekte animieren, sondern nur eins. so kann man leichter ändern und es macht weniger arbeit. mit dem stillstand des einzufärbenden objektes erübrigt sich auch "dein" problem. b) deine namensgebung lasst vermuten, das du 1000 duplikate benützt. das ist ungünstig :-( wozu hats denn die objekte? auf der bühne haben die instanzen eigene namen - das langt zur unterscheidung. innnerhalb haben alle objekte den selben namen (es sind ja instanzen des selben objektes). so kann man fein for-schleifen programmieren. c) mit functionen bzw. objektorientiert arbeiten macht die sache übersichtlicher. so habe ich auch die funktion des buttons auf _root verlinkt. wenn man alles beisammen hat lässt es sich einfacher programmieren. d) bei mehrere fenstern (ich vermute, dass das eine deiner nächste frage sein würde?), da sollte immer nur eins offen sein. p.s. gotoAndPlay(vX._totalframes-vX._currentframe) da habe ich ein bisschen in die trickkiste gegriffen. und funktioniert auch nur, weil "fenster offen" auf der mitte dieser animation steht. e) unterschiedliche fenster haben auch unterschiedliche inhalte. nicht das fensterobjekt dublizieren :-/ eine möglichkeit ist, die inhalte während der initialisierung zu den fenster-instanzen zu attachen :-) f) Color=parseInt("0xFF0000") warum erzeugst du einen string, den du direkt in eine zahl wandelst? schreib doch die zahl als zahl Color=0xFFFFFF;
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (14-02-2004 um 19:03 Uhr) |
| | |
| | #6 (permalink) |
| MFA Registriert seit: Oct 2003 Ort: Bielefeld
Beiträge: 87
| noch eine Frage
Ich habe deine Funktion des Bewegens, fInfo_Move übernommen. Beim anderen muss ich noch ein wenig dahinter steigen. Verstehe es noch nicht ganz. Kannst du mir sagen warum Filmsequenzen, die in der tiefsten Ebene eines Kontainers platziert werden, also dort wo die einzelnen Flächen und der Button an der linken oberen Ecke ist, jedesmal auf Bild 1 zurückspringen, obwohl ich vorher mit einem telltarget diese filmsequenz auf bild 2 umschalte? tobi |
| | |
| | #7 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
hallo --------------- also telltarget ist erst einmal "tiefstes mittelalter"! im actionScript referenzhandbuch seite 375 steht: telltarget diese aktion gilt in flash 5 als veraltet ... "..die in der tiefsten Ebene eines Kontainers platziert werden.." die dinger haben auch namen :-) versuchst du auf frame 2 von KontKomplett zu gehen? der hat keinen frame 2! --------------- Beim anderen muss ich noch ein wenig dahinter steigen. Verstehe es noch nicht ganz: zuerst einmal namen: in der bibliothek hat jedes objekt seinen symbol-namen in der bibliothek menü optionen verknüpfungen... steht ziemlich versteckt der symbol-namen, der für z.b. attach benötigt wird (siehe symbol inhalt0 ..2) ein symbol auf die bühne gezogen ergibt eine instanz. instanzen-namen werden im instanzen-fenster eingetragen. man kann ja von einem symbol beliebig viele instanzen ziehen, die muss man ja unterscheiden können. so, jetzt: du hattest die weisse-, die blaue- fläche und den button animiert. ich habe das alles zusammen in ein objekt gepackt: "KontKomplett" so braucht man nur dieses eine zu animieren in "KontBewegung". da KontKomplett keine animation beinhaltet, stöhrt es auch nicht, das die per "new Color" erzeugte fläche sich nicht bewegt. darüber habe ich mich auch schon tierisch aufgeregt! eine alternative wäre, in KontKomplett pro frame eine andere farbe zu erstellen und die farbauswahl würde man dann z.b. erreichen per _root.Info0.Kont.gotoAndStop(3) <-- so und nicht mit telltarget!!! wenn es sowas geben würde, das selbe mit den Symbolnamen: _root.KontBewegung.KontKomplett.gotoAndStop(3) <-- nur zum verständnis der button befindet sich in KontKomplett. die zwei stop()s befinden sich in KontBewegung, also _parent (eine instanz näher zu _root). du hattest in deinen button drinn gotoAndPlay(2) und gotoAndPlay(11) - das funktioniert. aber sobald du etwas an der animation veränderst musst du diese zahlen mit verändern - das ist schlecht. für dein ursprüngliches flash geht auch: on (release) { this.nextFrame; this.play(); } für das von mir geänderte wäre es dann on (release) { _parent.nextFrame; _parent.play(); } und weil ich dann noch ergänzt habe steht da jetzt on (release) { _root.fInfo_Move(_parent); } so habe ich alle programmteile im überblick und muss nicht ständig suchen. Code: function fInfo_Move (vObj) {
/*
in der funktion wird das argument _parent mit dem frei gewählten namen vObj
bezeichnet (ersetze gedanklich vObj durch _parent; es ist das selbe).
*/
var v, vX;
//
vObj.nextFrame;
vObj.play();
/*
zum testen und verstehen ist immer gut ein paar trace-befehle einzubauen!
so erkennt man, wann das programm wo ankommt und was in den variablen drinn ist.
*/
trace("das wurde übergeben "+vObj);
/*
wessen fenster ich gerade anklicke das ist offen. das merk ich mir hier
*/
vObj.offen = true;
//
/*
in gInfos steht ein array aller fenster. die gehe ich jetzt der reihe nach durch.
alle <> (ungleich) dem aktuellen fenster und wer davon offen ist,
mache ich zu (offen=falsch).
vX = gInfos[v];
ist eine vereinfachung beim schreiben. anstatt jedesmal gInfos[v] zu tippen
kann ich ab jetzt vX schreiben. auch für den rechner ist es einfacher,
da er so nicht jedesmal den v-ten eintrag im Array suchen muss.
wenn du auf einen button klickst fährt das fenster auf.
wenn du auf einen 2. button klickst fährt dieses fenster auf. angenommen,
das 1. fenster ist bisher 7 frames weit gekommen, dann müsste es jetzt von
frame 13 bis 20 fahren um wieder zuzugehen. 20-7 = 13 kapiert?
*/
for (v=0; v<gInfos.length; v++) {
vX = gInfos[v];
if (vX<>vObj) {
if (vX.offen == true) {
vX.gotoAndPlay(vX._totalframes-vX._currentframe);
vX.offen = false;
}
}
}
}
var gInfos = new Array(_root.Info0, _root.Info1, _root.Info2);
/*
hier gebe ich jedem fenster eine farbe; indem ich die funktion 3x aufrufe.
vObj=gInfos[v] ist wieder die schreibvereinfachung
alle fenster sind am anfang zu offen = false (aha, hier hatte ich sogar
ein fehler drinn, beim 1. mal ruckeln alle fenster kurz; das kommt davon)
und ich gebe jedem fenster seinen inhalt (bibliothek inhalt0.. 2, der name
der in verknüpfungen steht gilt!!!)
*/
function fInfo_Init (v, vColor) {
var vC, vT;
//
vObj=gInfos[v];
trace("es wird initialisiert "+vObj);
vC = new Color(vObj.Kont.Blau);
vC.setRGB(vColor);
//
vObj.offen = false;
vObj.Kont.Weiss.attachMovie("Inhalt"+v, "Inhalt",1);
}
fInfo_Init(0, 0xFF0000);
fInfo_Init(1, 0x00FF22);
fInfo_Init(2, 0x0044DD); ------ hups, hoffentlich hats keiner gesehen: 20-7 = 13 und nicht 14 :-(
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (17-02-2004 um 22:11 Uhr) |
| | |
| | #8 (permalink) |
| MFA Registriert seit: Oct 2003 Ort: Bielefeld
Beiträge: 87
| Aaaaahhhh
Es klingelt! Ja so langsam habe ich es verstanden...Ist eine ganz neue Materie für mich, denn bis vor 2 Monaten habe ich mit Actionscript nur die nötigsten Dinge erledigt. So langsam arbeite ich mit den ersten Funktionen und erfreue mich an schlaflosen Nächten in denen visible, trace und andere Dinge durch meinen Kopf schwirren ![]() Vielleicht kannst du mir bei einer Sache noch helfen. Ich will eine Funktion schrieben, die für 5 Objekte gleich ist, doch der Zähler muss jedesmal auf die Objektnumemr angepast werden, wie z.B. bei Kont4._visible = true ich habe mir einen String zusammengebastelt: vTemp = "Kont" + KontNr + "._visible = true" nur wie führe ich das aus? ich kann ja nicht einfach vTemp; schrieben. Tobi
__________________ Same procedure as every frame! |
| | |
| | #9 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
"..Ja so langsam habe ich es verstanden..." als ich meinen 1. computer anfang '79 bekommen hatte, da hab ich auch nichts geschnallt. inzwischen gehts so lala :-) "..Ich will eine Funktion schreiben, die für 5 Objekte gleich ist.." sonst bräuchte man keine funktionen. "..nur wie führe ich das aus?.." am besten an der langen leine, direkt in den abfalleimer. wenn, dann z.b. so: eval("Kont"+KontNr+"._visible") = true; ist aber auch extrem unfein. lieber nicht. das hier macht keinen sinn. soll nur die variablen erklären. Code: _root.aufgerufen=0;
_root.fSeltsamDing(_root.Kont1, 90);
_root.fSeltsamDing(_root.Kont2, 33);
_root.fSeltsamDing(_root.Kont3, 70);
trace("so oft aufgerufen: "+_root.aufgerufen);
/*
beim aufruf einer funktion kannst du variable übergeben.
die variablen können text, zahl, objekte, arrays usw. sein.
das 1. argument im funktionsaufruf ist die 1. variable in der funktion.
beim 1. aufruf ist die variable vThis = _root.Kont1
beim 2. aufruf ist die variable vThis = _root.Kont2
...
beim 1. aufruf ist die variable vAlpha = 90
beim 2. aufruf ist die variable vAlpha = 33
...
*/
function fSeltsamDing(vThis,vAlpha){
var vNurHier=123;
_root.aufgerufen++;
//
vThis._visible = true;
vThis.zaehler++;
vThis._alpha=vAlpha;
//
trace("das steht in vThis: "+vThis);
trace("das steht in vAlpha: "+vAlpha);
}
/*
die mit "var" generierte variable vNurHier existiert nur in
der funktion, wenn die funktion abgearbeitet ist gibt es diese
variable nicht mehr.
_root.aufgerufen existiert ausserhalb der funktion. diese
variable steht "global", also immer, zur verfügung.
in vThis haben wir einen zeiger auf ein objekt (hier _root.Kont1)
übergeben. ersetze gedanklich vThis durch _root.Kont1
und aus
vThis._visible = true;
wird
_root.Kont1._visible = true;
sinngemäss mit _root.Kont2 und _root.Kont3 usw.
*/ info-fenster anhängst. aber objektorintiert machen wir dann im nächsten monat ;-)
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
| | #10 (permalink) |
| MFA Registriert seit: Oct 2003 Ort: Bielefeld
Beiträge: 87
| Achsoooo
Jetzt klingelts immer mehr So langsam habe ich es verstanden. Danke nochmal für deine ausführlichen Beiträge. Ich werd das bei Gelenheit wieder gutmachen.... Objektorrientierte Programmierung? Au weia. Ich hatte 2,5 Jahre Javaprogrammierung in der Schule und dazu noch VB.Net privat am brodeln....ich glaub das sollte erstmal reichen, oder auch nicht *g*
__________________ Same procedure as every frame! |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |