Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-06-2010, 09:41   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2010
Beiträge: 9
Question Dynamische Function Namen

ich will eine for schleife basteln die sowohl movieclips erstellt als ihnen auch eigene namen und functions inkl. event listener zuteilt

Code:
for (var i:Number=0; i<10; i++) {
	var my_mc = new MovieClip();
	my_mc.graphics.beginFill(0xFF0000);
	my_mc.graphics.drawRect(0, 0, 100, 80);
	my_mc.graphics.endFill();
	my_mc.name="mc"+i;
	my_mc.x=125*i-100;
	addChild(my_mc);
	my_mc.addEventListener(this["testFunction"+i]);
	function "testFunction"+i(event:MouseEvent):void {
	trace(i)
	}
}
bis jetzt hab ich es hinbekommen,dass die schleife die movieclips generiert (wäre jedoch schöner wenn er sie aus der bibliothek ziehen+ duplizieren würde, habe das noch nicht so hinbekommen)
bei der function jedoch bekomm ich allerlei compiler fehler =/
jemand ne idee wie man das problem lösen kann?

P.S.: beschäftige mich erst seit kurzem mit AS3 (hatte vorher aber einige AS2 erfahrungen gesammelt)
gurki ist offline   Mit Zitat antworten
Alt 30-06-2010, 11:05   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Das funktioniert so nicht. Schaue dir mal die Signatur der addEventListener Methode an. Zumal du keinen Gewinn davon trägst, alles super dynamisch zu bauen.
Omega Psi ist offline   Mit Zitat antworten
Alt 30-06-2010, 11:23   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2010
Beiträge: 9
hm ah okay, ja kleiner flüchtigkeitsfehler das ich den MouseEvent vergessen hatte my fault
Code:
my_mc.addEventListener( MouseEvent.CLICK,this["testFunction"+i]);
	function this["testFunction"+i](event:MouseEvent):void {
	trace(i)
}
funzt aber trotzdem nicht



das spätere endprodukt soll 40 dieser buttons umfassen(und niemand bastelt 40 mal die selbe funktion mit minimalen änderungen)

ne idee wie man das sonst generieren kann, ohne jede funktion einzeln zu machen?
gurki ist offline   Mit Zitat antworten
Alt 30-06-2010, 11:26   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Wieso arbeitest Du nicht einfach so:
PHP-Code:
my_mc.addEventListenerMouseEvent.CLICK, function(event:MouseEvent):void {
    
trace(event.currentTarget)
}); 
Die Klammersyntax ist nicht typsicher. Und wenn Du die Funktion erst deklarierst nachdem sie an addEventListener übergeben wird ist this["testFunction"+i] dort null.
__________________
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 (30-06-2010 um 11:30 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 30-06-2010, 11:40   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
  1. Es hängt von den Änderungen ab. Was soll denn passieren?
  2. Anonyme Funktionen sind nicht gerade das gelbe vom Ei, da sie im anonymous Namesapce liegen und man nicht intutiv die Fehler lesen kann.
Omega Psi ist offline   Mit Zitat antworten
Alt 30-06-2010, 11:43   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2010
Beiträge: 9
ah okay event.currentTarget kannte ich noch nicht! ddas hilft mir schon um einiges weiter, danke =)


hab jetzt mal folgendes ausprobiert
Code:
trace(event.currentTarget.name.split("mc"))
ich will im grunde nur das er die zahl ausspuckt, die am ende des namens ist, jedoch bekomme ich ", 1" anstatt "1"
gurki ist offline   Mit Zitat antworten
Alt 30-06-2010, 11:51   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Code:
var _clips:Array = [];
for (var i:int = 0; i< 10; i++)
{
  var clip:MovieClip = new MovieClip();
  clip.addEventListener(MouseEvent.CLICK, clickHandler);
  clip.graphics.beginFill(0xFF0000);
  clip.graphics.drawRect(0, 0, 100, 80);
  clip.graphics.endFill();
  clip.x=125 * i-100;
  _clips[i] = addChild(clip);
}

function clickHandler(event:MouseEvent):void
{
  trace(_clips.indexOf(event.currentTarget));
}
So in etwa. Es könnte noch ein Tippfehler drin sein.
Omega Psi ist offline   Mit Zitat antworten
Alt 30-06-2010, 11:51   #8 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Am saubersten wäre natürlich eine eigene Klasse für die Buttons zuschreiben und darin die gesamten Funktionalitäten zu kapseln.
__________________
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 30-06-2010, 11:52   #9 (permalink)
Neuer User
 
Registriert seit: Jun 2010
Beiträge: 9
@Omega Psi:

die buttons bekommen allerlei eventListener für dragNdrop, einige tweens(größer/kleiner werden) und werte bezüglich der position an ne variable+ array übertragen (alles schon getan, fehlt halt nur noch ne for schleife zum generieren)

EDIT:
zu deinem code:
funktioniert recht gut!ich glaube das weitere erübrigt sich
den rest sollte ich gebacken bekommen, falls nicht meld ich mich nochmal
vielen dank für die schnelle hilfe

Geändert von gurki (30-06-2010 um 12:00 Uhr)
gurki ist offline   Mit Zitat antworten
Alt 30-06-2010, 15:16   #10 (permalink)
Neuer User
 
Registriert seit: Jun 2010
Beiträge: 9
hm okay habs jetzt soweit:

Code:
var _clips:Array = [];
var rectangle:Rectangle=new Rectangle(but1.x,330,0,-130);

for (var i:int = 0; i<= 10; i++)
{
  var clip:MovieClip = new MovieClip();
  clip.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
   clip.graphics.beginFill(0x000000);
  clip.graphics.drawCircle(10, 100, 10);
  clip.graphics.endFill();
  clip.name="mc"+i
  clip.x=50 * i-25;
  _clips[i] = addChild(clip);
}


function downHandler(event:MouseEvent):void
{
	this["mc"+_clips.indexOf(event.currentTarget)].startDrag(false, rectangle);
	//clicked=
  trace("mc"+_clips.indexOf(event.currentTarget));
  trace(event.currentTarget.name)
  }
nur klappt das irgendwie mitm ansprechen nicht ganz.
dachte die namen werden doch zugeteilt und sind dann ansprechbar?
gurki ist offline   Mit Zitat antworten
Alt 30-06-2010, 15:34   #11 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Der name hat in AS3 nicht mehr zwingend etwas mit der lokalen Variable zu tun, die auf den MC zeigt. Das ist aber in der Regel auch gar nicht mehr nötig:
PHP-Code:
function downHandler(event:MouseEvent):void {
    var 
mc event.currentTarget as MovieClip;
    if(
mc){
        
mc.startDrag(falserectangle);
    }    

Das ansprechen von DisplayObjekten über die Klammer-Syntax sollte man in AS3 vermeiden.

Aber nochmals mein Tip: Schau Dir mal Klassen an. Die wurden nämlich genau für das erfunden, was Du hier vorhast (viele Objekte mit gleichen Funktionen und verschiedenen Eigenschaftsausprägungen).
__________________
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 (30-06-2010 um 15:37 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 30-06-2010, 15:39   #12 (permalink)
Neuer User
 
Benutzerbild von Simse179
 
Registriert seit: Feb 2005
Beiträge: 457
Vielleicht so in etwa?

ActionScript:
  1. function downHandler(event:MouseEvent):void
  2. {
  3.     event.currentTarget.startDrag();
  4.     trace(_clips.indexOf(event.currentTarget));
  5. }

edit: Oh, zu spät...
Simse179 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
dynamisch, for schleife, function, name

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
dynamische klassen namen ? bloba ActionScript 2 3 06-01-2009 22:47
Dynamische Namen und Eigenschaften jumpingjokes ActionScript 1 5 23-09-2004 20:35
Dynamische Namen für MCs & onPress baju Flash MX 10 11-08-2004 16:00
dynamische array-namen newramses ActionScript 1 3 15-05-2004 19:27
dynamische Variablen-Namen marox ActionScript 1 3 26-06-2002 16:53


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele