Flashhilfe.de - Flash Community

Auf dynamisch erzeugte Instanzen zugreifen und durchklicken [Flash 11]

 


AntwortenRegistrieren Seite1  

ecker71#1
Benutzerbild von ecker71
Beiträge: 86
Wohnort: münchen
Registriert: Apr 2005

13.05.2013, 12:59

Hi!

Ich hab momentan ein kleines Problem beim Zugrif auf per Script erstellte Instanzene eines Movieclips. Ich lese eine XML aus und setze pro Knoten eine Instanz mit folgendem Script

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
for each ( var aktLayout:XML in xml.layout ) {
         
          var name_instanz:String = "mc" + mc_count;
          var mc_name:Mglas = new Mglas();
          addChild(mc_name);
          mc_name.name = name_instanz;
          mc_name.x = pos_x;
          pos_x += 75;
          mc_count += 1;
          trace ("ende funktion: " + instanz_name);
         
         
       }


name_instanz ergibt in der Schleife : mc1, mc2 usw

Jetzt versuche ich mit die Instanzen anzusprechen z.B mit:

MovieClip(root).mc1.y = 150;

Aber da bekommen ich eine Fehlermeldung - wie müsste man da rangehen um die Instanzen korrekt anzusprechen?

Dankschee!
so long, and thanks for all the fish!

ecker71
katastrophenscripter
Geändert von ecker71 am 13.05.13 um 13:27 Uhr
ecker71#2
Benutzerbild von ecker71
Beiträge: 86
Wohnort: münchen
Registriert: Apr 2005

Themenautor/in

13.05.2013, 13:24

Schon einmal ein wenig weiter gekommen. YEAH!
Zeile 6 war falsch - und ansprechen kann ich jetzt zumindest eine Instanz

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var mc_count:Number = 1;
var pos_x:Number = 0;
var req:URLRequest = new URLRequest ('Mglas.xml');
var loader:URLLoader = new URLLoader();
loader.load(req);
loader.addEventListener(Event.COMPLETE, loadLayouts );

function loadLayouts (e:Event):void {
     var code:String = e.target.data;   
     var xml:XML = new XML(code);
     // var anzahl:Number =  xml.children().length();
   
     for each ( var aktLayout:XML in xml.layout ) {
        
        var instanz_name:String = "mc" + mc_count;
        
        var mc_name:Mglas = new Mglas();
        addChild(mc_name);
        mc_name.name = instanz_name as String;
        mc_name.x = pos_x;
        pos_x += 75;
 
        mc_count/**/<+= 1;
        trace ("ende funktion: " + instanz_name);      
        
     }
     
}


movieClip_1.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event:MouseEvent):void
{
     var tempmc:MovieClip = getChildByName("mc1") as MovieClip;
     tempmc.x = 500;
 
}



Jetzt möchte ich gerne die Clips in einer Reihe durchklicken ... also wie in einer Slideshow eine Instanz anziegen mit zwei Buttons "vor" und "zurück".
Habe hier an ein seprates Array gedacht in das ich jeweils den mc_name.name hinzufüge. Und mit diesem Array später die "Slideshow" steuere.


Aber hier bin ich mit meinem AS3 Latein am Ende :-(
so long, and thanks for all the fish!

ecker71
katastrophenscripter
Geändert von ecker71 am 13.05.13 um 13:46 Uhr
RustyCake#3
Benutzerbild von RustyCake
Beiträge: 1776
Wohnort: Laimbach 6 1/2
Registriert: Nov 2002

14.05.2013, 07:55

Servus
Hier mal ein Beispiel.
Hab noch mehr davon, aber um Dich auf eine Idee zu bringen, dürfte das auch reichen.
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import flash.utils.getDefinitionByName;

var a:Array =[];
var b:Array = [];
for (var i:int =0; i<4; i++)
{
     var _container:Sprite = new Sprite();
     _container.name = "conti"+i;
     addChild (_container);
     b[i] =_container
     b[i].addEventListener (MouseEvent.CLICK, clicker_b);
     var c:Class = getDefinitionByName("mc_1"+i) as Class;
     var mc:MovieClip=new c as MovieClip;
     a[i] = mc;
     _container.x = 10+80*i;
     _container.y = 50;
     _container.addChild (a[i]);
 
}

function clicker_b (e:Event):void
{
     e.target.y += 40;
}
Bitte keine Fragen, zu Flash per PM. Dazu ist das Forum da. Danke MFG_RustyCake!
"Wer tanzen will, muss erst gehen lernen"
Geändert von RustyCake am 14.05.13 um 07:56 Uhr
ecker71#4
Benutzerbild von ecker71
Beiträge: 86
Wohnort: münchen
Registriert: Apr 2005

Themenautor/in

14.05.2013, 11:41

Hi Rusty!

Danke für das Script :-)

Wenn ich das richitge verstehe rutschen hier quasi die MCs beim Klick darauf immer um X weiter.

Ich habe mich irgendwie in diese Variante mit Vor/Zurück Buttons versteigert - die Clips werden via XML geladen:
ActionScript:
1
2
3
4
5
6
7
8
9
for each ( var aktLayout:XML in xml.layout ) {      
        var instanz_name:String = "mc" + mc_count;      
        var mc_name:Mglas = new Mglas();
        addChild(mc_name);
        mc_name.name = instanz_name as String;
        mc_name.visible = false;
        mc_count += 1;
        slideshow.push (mc_name.name);   
     }



Dann zwei Buttons für vor bzw. zurück:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function nextLayout(event:Event):void {
     
     if ( aktuell == gesamt) {
        aktuell = 0;
        trace ("Aktuell ist: " + aktuell);
        // tweenOUT();
      }
     else if ( aktuell < gesamt ) {
        aktuell += 1;
        trace ("Aktuell ist: " + aktuell);
        // tweenOUT();
      }
}


Die zurück Funktion is dementsprechend anders - aber das brauch ich Dir ganz bestimmt nicht sagen ;-)

Den ersten Clip aus dem Array würde ich wieder sichtbar machen:

XXX.meinErsterClip.visible = true;

Mit einer tweenOUT Funktion könnte ich dann den aktuellen Clip verschwinden und den nächsten auftauchen lassen.

Mit dieser Methode kann ich zwar gezielt einen ansprechen, aber wenns dynamisch werden soll beiß ich mir die Zähne aus:

ActionScript:
1
2
3
4
5
6
function fl_MouseClickHandler(event:MouseEvent):void
{
       var tempmc:MovieClip = getChildByName("mc1") as MovieClip;
      // mach dies mach das

}


Mein Problem ist "einfach":
Wie um alles in der Welt kann ich diese Instanzen blos ansprechen ?!? Es war so schön mit attachMovie ;-)

P.S.
Kann ich in der for each Schleife die Variable mc_name nicht dynamisch machen damit ich später auf mc_name1 , mc_name2 direkt zugreifen kann ? Wenn ja wie?

ActionScript:
1
2
var ["name"+i]:Mglas = new Mglas();
addChild(["name"+i]);
so long, and thanks for all the fish!

ecker71
katastrophenscripter
Geändert von ecker71 am 14.05.13 um 12:08 Uhr
ecker71#5
Benutzerbild von ecker71
Beiträge: 86
Wohnort: münchen
Registriert: Apr 2005

Themenautor/in

14.05.2013, 12:34

TATA! Schon wieder ein Stück weiter - for each wurde zur for Schleife
ActionScript:
1
2
3
4
5
6
7
8
for ( var i:int = 0; i <= anzahl ; i++) {
        
        slideshow[i] = new Mglas();
        addChild(slideshow[i]);
        slideshow[i].visible = false;      
        trace ("Aktuelles i: " + i + " Slideshow: " + slideshow );
 
     }

Jetzt kann ich die Clips auch ansprechen...YEAH!
so long, and thanks for all the fish!

ecker71
katastrophenscripter
Geändert von ecker71 am 14.05.13 um 12:37 Uhr

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de