Zurück   Flashforum > Flash > Flash Einsteiger

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-01-2012, 19:06   #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
    }
}
danke im vorraus
maronvert ist offline   Mit Zitat antworten
Alt 02-01-2012, 21:11   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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)
hgseib ist offline   Mit Zitat antworten
Alt 02-01-2012, 21:59   #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
maronvert ist offline   Mit Zitat antworten
Alt 02-01-2012, 22:05   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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
    }
  }
}
am besten, du zeigst mal etwas mehr von deinem script.


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)
hgseib ist offline   Mit Zitat antworten
Alt 02-01-2012, 22:30   #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);
                }
        }
}
und dann eben die einzelnen Klassen für die MovieClips, die von der Klasse "Alle" erben:


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
	{
	}	
}
Und solche gibt es mehrere z.B. Kreis, Dreieck.

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))
maronvert ist offline   Mit Zitat antworten
Alt 02-01-2012, 23:52   #6 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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){
und benütze mal den debugger. ich denke, du denkst falsch und bestimmte bereiche deines programms werden garnicht angesprochen. zumindestens nicht in dem ablauf, den du dir vorstellst?
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)
hgseib ist offline   Mit Zitat antworten
Alt 03-01-2012, 10:44   #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
Angehängte Dateien
Dateityp: zip Tester.zip (12,9 KB, 2x aufgerufen)
maronvert ist offline   Mit Zitat antworten
Alt 03-01-2012, 11:08   #8 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
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:
  1. // Im Konstruktor
  2. addFrameScript(1, stopListener);
  3.  
  4. // Die zugehörige Funktion
  5. public function stopListener(event:Event):void{
  6.    removeEventListener(MouseEvent.MOUSE_DOWN, dragging);
  7.    removeEventListener(MouseEvent.MOUSE_UP, noDragging);
  8. }
__________________
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)
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-01-2012, 12:26   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2011
Beiträge: 17
aber wie bekomme ich nun den eventlistener weg?
maronvert ist offline   Mit Zitat antworten
Alt 04-01-2012, 12:33   #10 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Zitat:
Zitat von maronvert Beitrag anzeigen
aber wie bekomme ich nun den eventlistener weg?
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!
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-01-2012, 12:47   #11 (permalink)
Techniker
 
Benutzerbild von hgseib
 
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)
hgseib 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


Ä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


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele