| |||||||
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) |
| Neuer User Registriert seit: Nov 2011
Beiträge: 17
| currentFrame
Hallo, Wie muss ich folgenden Code ändern, damit ich ihn in einer Klasse, die mit einem Movieclip meiner Biblithek verknüpft ist, verwenden kann? Code: addEventListener(Event.ENTER_FRAME, myFrame);
public function myFrame(event:Event):void{
if(currentFrame == 1){
//code
}
} |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.325
|
was heisst verknüpft? wenn dieser script sich in der klasse befindet, die auch die klasse (oder basisklasse) des bibliothekobjektes ist, dann stimmt's so. this ist die klasse und wäre dann auch das mc. wenn das mc in der klasse als objekt erzeugt wurde, dann halt die dabei erzeugte referenz vor currentFrame schreiben. z.b.: meinMC.currentFrame wenn alles seine richtigkeit hat, dann geht auch event.target.currentFrame eventuell noch das event.target umtypen?
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (02-01-2012 um 21:12 Uhr) |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Nov 2011
Beiträge: 17
|
mit verknüpft meine ich in der .fla-Datei unter Bibliothek die AS-Verknüpfung der einzelnen MovieClips. also für jeden moveclip eine eigene klasse. mit event.target.currentFrame folgenden Fehler ReferenceError: Error #1069: Eigenschaft currentFrame für flash.display.Stage nicht gefunden und es ist kein Standardwert vorhanden. ich habe es auch mit this.currentFrame versuht, da bekomme ich zwar keinen Fehler, aber es funktioniert auch nicht. (ich teste mit trace). und wenn ich auf dem Frame bin wird nichts ausgegeben... meinMC.currentFrame mache ich nicht, weil ich diese Klasse so verwenden will, dass andere Klassen von ihr erben können...also extends Klassenname ich hoffe was ich geschrieben habe, ist verständlich |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.325
|
bei flash ist event.target ziemlich geschlechtslos. also ein objekt. und ein solches hat erstmal kein currentFrame. deshalb musst du ihm erst sagen, wessen kind es ist, damit flash auch weiss welche eigenschaften und functionen event hat. und deine klasse muss natürlich extends MovieClip sein. ein sprite z.b. hätte auch kein currentFrame so z.b.? Code: public function myFrame(event:Event):void{
var mc:DeinKlassenNamen;
if (event.target is DeinKlassenNamen) {
mc = event.target as DeinKlassenNamen;
if(mc.currentFrame == 1){
//code
}
}
} um grafik/view und logig/model trennen zu können wird das bibliothekszeugs nur noch als grafik verstanden (und als swc vorcompiliert). dann erzeugt man eine klasse, die sich die grafik mit new irgendwas() holt. das wäre das meinMC.currentFrame gewesen. wenn das script in den bibliothekts-objekten steckt, musst du jedesmal die komplette fla mit compilieren. das ist bei grösseren projekten nicht mehr ratsam.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (02-01-2012 um 22:14 Uhr) |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Nov 2011
Beiträge: 17
|
also hier mal der ganze code Code: package
{
import flash.events.*;
import flash.display.*;
public class Alle extends MovieClip
{
public function Alle()
{
addEventListener(MouseEvent.MOUSE_DOWN, dragging);
addEventListener(MouseEvent.MOUSE_DOWN, noDragging);
addEventListener(Event.ENTER_FRAME, stopListener);
}
public function dragging(event:MouseEvent):void
{
startDrag();
}
public function noDragging(event:MouseEvent):void
{
stopDrag();
}
public function stopListener(event:Event):void{
if(currentFrame == 2){
trace("Test");
removeEventListener(MouseEvent.MOUSE_DOWN, dragging);
}
}
} Diese Klasse ist ein Quadrat,das ich schon auf die Bühne gegeben habe, und kann alle Methoden von der Klasse "Alle" Code: package {
public class Quadrat extends Alle
{
}
} Ich möchte, wenn ich auf Frame 2 bin, die Methode dragging entfernen. In meiner Hauptklasse, die mit der .fla-Datei verknüpft ist, habe ich noch ein MouseEvent mit der ich zu Frame 2 gehe, nachdem ein button geklickt wurde (gotoAndStop(2)) |
| | |
| | #6 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.325
|
hmmm, hmmmm, hmmmmm, seltsamme konstruktion aber du wirst schon wissen was es geben soll? und denk bitte bei deinen fragen und antworten, das wir das nicht wissen. wäre aber zum beantworten von fragen und für empfehlungen schon ganz nützlich ;-) Code: public function stopListener(event:Event):void{
// ergänze mal:
trace(event, event.target, event.target.name, currentFrame);
if(currentFrame == 2){ addEventListener(MouseEvent.MOUSE_DOWN, dragging); addEventListener(MouseEvent.MOUSE_DOWN, noDragging); also bei mouseDown soll sowohl dragging als auch noDragging ausgeführt werden? ".. In meiner Hauptklasse, die mit der .fla-Datei verknüpft ist, habe ich noch ein MouseEvent mit der ich zu Frame 2 gehe, nachdem ein button geklickt wurde (gotoAndStop(2)) .." ja, dazu könnte ich eine menge sagen bzw. schreiben, wenn ich's denn sehen könnte. z.b. WER geht da zu frame 2? dein quadrat oder die hauptzeitleiste?
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (02-01-2012 um 23:58 Uhr) |
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Nov 2011
Beiträge: 17
|
Bei MOUSE_DOWN habe ich vergessen das hier auszubessern, hab nämlich die zeile gelöscht und dann das von der zeile mit dragging kopiert. Also hier mal das ganze Beispiel, damit es hoffentlich verständlicher ist... Ich möchte eben, dass die objekte ins richtige feld gezogen werden dann gehts zum nächsten frame (mit dem movieclip "weiter", wo das, was man gemacht hat, nicht mehr verändert werden kann (also den listener dragging entfernen). Das ist jetzt auch nur ein Testbeispiel, ich möchte zuerst, dass der code funktioniert, deswegen ist das grafische nicht gerade schön ![]() mit trace(event, event.target, event.target.name, currentFrame); wird folgendes öfters ausgegeben: [Event type="enterFrame" bubbles=false cancelable=false eventPhase=2] [object Dreieck] dreieck 1 [Event type="enterFrame" bubbles=false cancelable=false eventPhase=2] [object Kreis] kreis 1 [Event type="enterFrame" bubbles=false cancelable=false eventPhase=2] [object Quadrat] quadrat 1 Danke |
| | |
| | #8 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.164
|
Ich finde diese Statusverwaltung über Frames auch etwas seltsam, aber wenn Du das so machen möchtest, solltest Du wenigstens auf das Event.ENTER_FRAME verzichten und stattdessen das hier verwenden: ActionScript:
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! Geändert von Martin Kraft (04-01-2012 um 12:34 Uhr) |
| | |
| | #10 (permalink) |
| Flash-Designer Registriert seit: May 2006 Ort: Wiesbaden
Beiträge: 6.164
| Das erledigt so die Funktion stopListener die Du mit addFrameScript auf Frame 2 legst.
__________________ Viele Grüße // Martin Martin Kraft // Interaktionsdesign Hilfreiche Websites: // Hilfe zur Adobe Flash Plattform // ActionScript 2 Referenz // ActionScript 3 Referenz // ActionScript 3 Arbeitshandbuch // weitere Flash Ressourcen Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da! |
| | |
| | #11 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.325
|
so, habe gestern einen stellungswechsel innerhalb deutschlands vorgenommen. jetzt wieder aus dem kühlen, stürmischen norden: habe mir deine fla angesehen, deine dreiecke usw. haben garkeine 2 frames ??? wie vermutet, deine hauptzeitleiste hat deren zwei. dann (aber um himmels willen, lass das ;-) if(main.currentFrame == 2){ also main als referenz auf deine dokumentenklasse .. die du garnicht hast ? :-( kannst du nicht mal was sinnvolles machen? weil diesem mehr als abstrakten test fehlt einfach jegliche logig. sorry, da kann man nichts dazu empfehlen ... - vergib deiner basisklasse mal einen sinnvollen namen (Alle ???) und stecke das grafik-zeugs in einen eigenen ordner/package - dann, erstelle unbedingt eine dokumentenklasse (Main). halte Main frei von jeglichem müll und erstelle z.b. die class DrawPanel als fenster/behälter für deine grafischen objekte - dann, lass das zeugs auf der bühne weg. statt dessen per programm dreiecke und quadrate usw. erzeugen. - dann, überlege dir mal, wer die events bekommen soll? allgemeines geschiebe gehört in die basisklasse. clicken um 'was weiss ich' gehört z.b. darüber also in DrawPanel. wenn es da eine klare zuordnung gibt, dann weiss man auch, wo und wann was wieder entfernt werden muss.
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (04-01-2012 um 12:54 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Flash CS3] currentframe | derfrederik | Flash Einsteiger | 3 | 17-03-2009 12:31 |
| currentframe bis ??? | roettges | Flash MX | 4 | 06-09-2003 12:38 |
| if(currentframe) | timbo | Flash MX | 8 | 18-01-2003 22:44 |
| If currentframe | Deschdrozer | Flash 4 und Flash 5 | 2 | 13-06-2002 11:31 |