Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-07-2004, 13:43   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 83
Question as mit unterschiedlichem Resultat

Hallo
Ich habe einen mc (name="clip") mit dem as erstellt:
Code:
onClipEvent (mouseDown) {
	if (this.hitTest(_xmouse, _ymouse, true)) {
		trace("hit");
	}
}
Dummerweise funktioniert das script aus mir unerklärlichen Gründen nicht.
Wenn ich jedoch das nahezu identische script in die Hauptbühne lege, funktioniert es.

Code:
clip.onMouseDown=function(){
	if (this.hitTest(_xmouse, _ymouse, true)) {
		trace("hit");
	}	
}
Worin liegt den der Unterschied und warum geht das as in dem mc nicht???
Ich weiss hier einfach nicht weiter, bin für jede Hilfe sehr dankbar.
slapy
Angehängte Dateien
Dateityp: zip mc_frame.zip (5,3 KB, 1x aufgerufen)
slapy ist offline   Mit Zitat antworten
Alt 16-07-2004, 14:04   #2 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
hast du es mal mit:
ActionScript:
  1. _root._xmouse
  2. _root._ymouse

versucht?


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 16-07-2004, 14:30   #3 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
die 2. variante ist außerdem viel schöner und besser und ...
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 16-07-2004, 15:03   #4 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 83
Arrow

die 2. Variante ist natürlich auf den ersten Blick schöner, doch da ich den mc duplizieren möchte, also auch den code der darin steht, finde ich die erste Variante aber sehr viel komfortabler.

komischerweise ist mir dieses nicht funktionieren fast gleicher codes nochmal aufgefallen, und zwar hier:

Das funktioniert:
Code:
on (release) {
	duplicateMovieClip("clip1","clip2",84545);
	this["clip2"]._x=0;
	this["clip2"]._y=0;
}
Das aber nicht.
Code:
but.onRelease=function(){
	duplicateMovieClip("clip1","clip2",84545);
	this["clip2"]._x=0;
	this["clip2"]._y=0;
}
???
slapy ist offline   Mit Zitat antworten
Alt 16-07-2004, 15:11   #5 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
is ja auch klar weil im 2. beispiel versucht er den duplicate an den button und buttons haben keine duplicateMC methode.

du müßtest das so schreiben:


PHP-Code:
but.onRelease=function(){
   
// duplicateMC an _root
   
_root.duplicateMovieClip("clip1","clip2",84545);
   
_root["clip2"]._x=0;
   
_root["clip2"]._y=0;
}

// oder falls der button irgendwo verschachtelt ist
but.onRelease=function(){
    
// duplicateMC an den elternMC des Buttons
   
this._parent.duplicateMovieClip("clip1","clip2",84545);
   
this._parent.["clip2"]._x=0;
   
this._parent.["clip2"]._y=0;

du hast wahrscheinlich noch nicht richtig das konzept der 2. variante verstanden. die erste variante war noch flash 5 und da gab es ein anderes verhalten.

immer wenn du sowas machst:

instanzname.onIrgendwas = function() {

}

dann ist innerhalb der klammern der scope auf instanzname, d.h. wenn du schreibst:
instanzname.onIrgendwas = function() {
zahl = 3;
}

passiert dasselbe als wenn du schriebst:
instanzname.zahl = 3;
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 16-07-2004, 15:30   #6 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 83
Danke erstmal
Aber dann dürfte duplicateMovieClip... im button auch nicht funktionieren oder?
Tuts aber. Und deine Variante mit _root.dupli... funktioniert leider auch nicht.
Ich habe im Anhang mal die Datei. Ändere die Funktion mal nach deinen Vorstellungen, denn bis jetzt klappts nicht.

Um zu deiner Erklärung zu kommen:
Es ist doch egal ob ich:
but.onRelease=function(){zahl=1;}
oder ob ich
on(release){zahl=1;} mache. Das Resultat ist das Gleiche. Die "zahl", die auf der Hauptbühne definiert ist ändert sich.
Angehängte Dateien
Dateityp: zip mc_frame2.zip (5,6 KB, 2x aufgerufen)
slapy ist offline   Mit Zitat antworten
Alt 16-07-2004, 15:54   #7 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
but.onRelease=function(){
trace("klick")
duplicateMovieClip(_root.clip1,"clip2",100);
_root.clip2._x=0;
_root.clip2._y=0;

}
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 16-07-2004, 15:55   #8 (permalink)
a.k.a maddin79
 
Benutzerbild von madflanderz
 
Registriert seit: Jul 2003
Ort: berlin f-hain
Beiträge: 1.693
und zu der zahl, vergiss es einfach :-)
__________________
www.madflanderz.de

ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°` _ addicted to bass _ `°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
madflanderz ist offline   Mit Zitat antworten
Alt 16-07-2004, 15:57   #9 (permalink)
flashoholika
 
Benutzerbild von Morshiba
 
Registriert seit: May 2002
Ort: Good old cologne
Beiträge: 118
Code:
// so funzt das von der Timeline aus
but.onRelease=function(){
	this._parent.clip1.duplicateMovieClip("clip2",100);
	this._parent.clip2._x=150;
	this._parent.clip2._y=150;
}
// und so vom Button aus
on (release) {
	duplicateMovieClip("clip1","clip2",84545);
	this["clip2"]._x=0;
	this["clip2"]._y=0;
}
Zitat:
Es ist doch egal ob ich:
but.onRelease=function(){zahl=1;}
oder ob ich
on(release){zahl=1;} mache. Das Resultat ist das Gleiche. Die "zahl", die auf der Hauptbühne definiert ist ändert sich.
Das stimmt nicht ganz!

Bei "on(release){zahl=1;} " änderst du den wert in _root ( wenn der Button in _root liegt!
Bei but.onRelease=function(){zahl=1;} änderst du den Wert im Button!

Beweis:

Code:
on(release){trace("Von Button aus: "+this);} 
but.onRelease=function(){trace("Von Timeline aus: " + this);}
__________________
----------------------->
www.morshiba.de
<-----------------------
www.koelnbeben.de
<-----------------------
www.takitasworld.de
----------------------->

AchimX
*die ungelösten Fälle des FF*
Morshiba ist offline   Mit Zitat antworten
Alt 16-07-2004, 16:25   #10 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
Zitat:
is ja auch klar weil im 2. beispiel versucht er den duplicate an den button und buttons haben keine duplicateMC methode.
maddin79..

des stimmt leider so nicht...

der duplicate wird korrekt gesetzt...
aber er sucht den mc dann innerhalb des buttons, weil

ActionScript:
  1. but.onRelease=function(){
  2.     duplicateMovieClip("clip1","clip2",84545);
  3.     this["clip2"]._x=0; // <.------ hier
  4.     this["clip2"]._y=0; // <--- und hier
  5. }

das scoping INNERHALB einees onEvents IMMER auf das objekt zeigt, dass den event hat...
in dem fall ist innerhalb des events ein 'this' der button selbst...
und
ActionScript:
  1. this['clip2']

existiert nicht...denn der wurde, da ja ohne vorangestelltes this dupliziert, und ist deshalb in der timeline, in der das script liegt, wiedeer zu finden


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 16-07-2004, 17:51   #11 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 83
Danke nochmal.
@Morshiba
Also wenn ich ein dynamisches Textfeld mit der Variablen zahl auf meine Bühne lege, und die beiden genannten Methoden probiere, geht die zahl immer auf eins, also ändere ich doch den Wert zahl in der Bühne auch wenn ich but.onRelease... in der Hauptzeitleiste verwende.
Beweis siehe Anhang. Bitte verbessere mich unbedingt, wenn das nicht stimmt!

@Kelor
Was du mit dem "this" sagt leuchtet mir ein, aber warum kann ich das this.clip2._x... im Button selber nutzen, also bei on(release){...} ? Wäre es nicht logischer, wenn dort auch nur _root. gehen würde?
Angehängte Dateien
Dateityp: zip zahl.zip (4,3 KB, 0x aufgerufen)

Geändert von slapy (16-07-2004 um 17:58 Uhr)
slapy ist offline   Mit Zitat antworten
Alt 16-07-2004, 18:27   #12 (permalink)
querdenker
 
Benutzerbild von kelor
 
Registriert seit: Jun 2001
Ort: formel1-stadt hockenheim
Beiträge: 4.731
Zitat:
also bei on(release){...}
diese alte syntax der clipEvents erkannte/erkennt den button nicht als objekt.

mach mal folgendes...

lege auf einen button dieses script hier...

ActionScript:
  1. on(release){
  2.    trace('THIS auf dem Button = '+this);
  3. }

und mach auch mal das hier in der hauptzeitleiste:

ActionScript:
  1. name_deines_Buttons.onRelease = function(){
  2.        trace('THIS aus dem onEvent = '+this);
  3. }

und siehst du den unterschied...?

die erste syntax ist noch alte 5er-syntax...
die andere ist die elegantere, neuere - und auch bessere/saubere - MX-syntax...

ab flashMX ist Button als auch TextField ein vollwertiges Object, wie MovieClip...und erkennt sich auch als solches, wenn man 'this' ruft...
allerdings NUR korrekt in der modernen variante, der onEvents...


ich rate jedem meiner schüler, seit es MX gab, nur und ausschließlich die event-syntax in der zeitleiste zu nutzen und die alte form der clip-events zu unterlassen...


greetz

kelor
kelor ist offline   Mit Zitat antworten
Alt 16-07-2004, 18:38   #13 (permalink)
Neuer User
 
Registriert seit: Feb 2002
Beiträge: 83
Vielen Dank Keldor, das hat mir sehr geholfen!
slapy
slapy 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 22:10 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele