Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-07-2010, 15:55   #1 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Unhappy MCs dynamisch in 2D-Array speichern und darüber auf ihn zugreifen

Hi @ all,

ich hab ein Problem mit dynamisch erzeugten MCs (in einem zweidimensionalen Array, über den ich dann auf sie zugreife), hier mal der Code:

Code:
var rectArray:Array = new Array(new Array(), new Array());
var rect_mc:rect = new rect();
var columns:Number = 60;
var rows:Number = 50;
var i:uint;
var j:uint;

for (i = 0; i <= columns; i++)
	{
		for (j = 0; j <= rows; j++)
			{
				rectArray[i][j] = rect_mc;
				rectArray[i][j].x = i * 10;
				rectArray[i][j].y = j * 10;
				addChild(rect_mc);
			}
	}
So, mein Ziel wäre es, dass eben dieser MC (rect_mc) wie in Tabellenform 50x60mal nebeneinander erzeugt wird. Wenn ich mir per trace-Funktion aber i und j anzeigen lasse stoppt es da immer schon bei i=1 (also j machts immer brav durch, aber i halt nicht), das Hauptproblem ist jedoch, dass einfach kein einziger MC auf der Bühne ist (oder höchstens einer).

Ich schätze mal das liegt daran, dass ich mit rect_mc immer dasselbe anspreche und damit seine Position immer wieder verändere, aber ich hab jetzt schon alle möglichen Stellungen ausprobiert (zuerst addChild oder auf die For-Schleifen aufteilen, usw) und es hat nichts funktioniert...

Bin im Moment total verwirrt und blick überhaupt nicht mehr durch diese mehrdimensionalen Arrays und dynamisch erstellte Objekte durch :S

pls help!
peat-ar ist offline   Mit Zitat antworten
Alt 13-07-2010, 16:05   #2 (permalink)
................
 
Benutzerbild von Der Frager
 
Registriert seit: Jun 2004
Beiträge: 15.890
Hallo,

probier's mal so:

PHP-Code:
var rectArray:Array = new Array();

var 
columns:Number 60;
var 
rows:Number 50;
var 
i:uint;
var 
j:uint;

for (
0<= columnsi++) {
    for (
0<= rowsj++) {
        var 
rect_mc:rect = new rect();
        
rectArray[i] = new Array()
        
rectArray[i][j] = rect_mc;
        
rectArray[i][j].10;
        
rectArray[i][j].10;
        
addChild(rect_mc);
    }

__________________

ternärer Konditionaloperator

+++ Bitte keine Privat-Nachrichten bezüglich Flashfragen! +++
Der Frager ist offline   Mit Zitat antworten
Alt 13-07-2010, 16:19   #3 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Wow, danke, es funktioniert!

Doch etwas komplizierter als ich dachte ... ~.^

Geändert von peat-ar (13-07-2010 um 16:21 Uhr) Grund: Hab was vergessen
peat-ar ist offline   Mit Zitat antworten
Alt 13-07-2010, 17:02   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Eigentlich dürfte das so noch nicht funktionieren, da z.Z. der Array für die Reihen in jeder Reihe neu belegt wird. Das sollte aber immer nur am Anfang einer Spalte geschehen:
PHP-Code:
var rectArray:Array = new Array();

var 
columns:uint60;
var 
rows:uint50;
var 
i:uint;
var 
j:uint;

for (
0<= columnsi++) {
    
rectArray[i] = new Array();

    for (
0<= rowsj++) {
        var 
rect_mc:rect = new rect();

        
rect_mc.10;
        
rect_mc.10;

        
rectArray[i][j] = rect_mc;

        
addChild(rect_mc);
    }

P.S.: Auch hier mal wieder der Tip: Du machst Deinen Code leichter lesbar, wenn Du konsequent alle KlassenNamen mit einem Großbuchstaben beginnst. Also nicht "rect" sondern "Rect".
__________________
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 (13-07-2010 um 17:06 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 13-07-2010, 19:10   #5 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Smile

Ok, danke, werds mir merken und habs schon ausgebessert

Jetzt noch eine off-Topic Frage: Wenn ich aber für jedes dieser "rect_mc"s eine Hover-Funktion initiieren will, dann kann ich das nicht gleich mit rectArray[i][j].addEventListener....... dazuschreiben, weil ich es dann nachher ja nicht mehr individuell ansprechen kann (innerhalb der Funktion, weil sich ja i und j ändern), oder hab ich da einen Denkfehler? Und dieses "function xyz(x:int, y:int)" das kann ich ja nicht bei der addEventListener Methode dazuschreiben...

Sollte ich das also ganz einfach und brachial mit den Koordinaten der Maus (/10 und davon dieses %-Dings, damit ich auf die Position innerhalb des Arrays von den einzelnen MCs komme, um sie so anzusprechen) umgehen, oder gibts dafür auch so eine elegantere Lösung?

Habt mir auf jeden Fall schon sehr viel weitergeholfen, thx

mfg Peter
peat-ar ist offline   Mit Zitat antworten
Alt 13-07-2010, 22:34   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2008
Beiträge: 45
könnte vielleicht so..

guten abend, es könnte vielleicht so gehen. bestimmt gibt es elegantere lösungen. die hier wäre sozusagen für jeden mc ein mouseover.

PHP-Code:
var rectArray:Array = new Array();

var 
columns:uint60;
var 
rows:uint50;
var 
i:uint;
var 
j:uint;

for (
0<= columnsi++) {
    
rectArray[i] = new Array();

    for (
0<= rowsj++) {
        var 
rect_mc:rect = new rect();

        
rect_mc.10;
        
rect_mc.10;

        
rectArray[i][j] = rect_mc;

        
addChild(rect_mc);
if (
rectArray[i][0]) {
rectArray[i][0].addEventListener(MouseEvent.MOUSE_OVER,mouseHover);
    }
if (
rectArray[i][1]) {
rectArray[i][1].addEventListener(MouseEvent.MOUSE_OVER,mouseHover2);
    }
    
//usw
    
}
}
function 
mouseHover(e:Event):void {
// do something...
}
function 
mouseHover2(e:Event):void {
// do something...
}


 
//usw.... 
grussi :-)

Geändert von fevzi (13-07-2010 um 22:35 Uhr) Grund: korrektur
fevzi ist offline   Mit Zitat antworten
Alt 14-07-2010, 08:24   #7 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Wäre es nicht möglich eine Funktion für alle MCs zu schreiben (bei der ich dann weiß bei welchem die Maus grad drüber ist; dessen z-Wert sollte sich dann etwas ändern und der von allen daneben auch (deshalb der 2D-Array, da ich dachte ich könnte es dann in einer Funktion relativ angeben, zB.: rectArray[MouseX%seitenlängeDesMCs-1][MouseY%seitenlängeDesMCs].z -= 5, usw)?

So müsste ich ja für jeden MC eine eigene Funktion schreiben, oder?

und warum...

PHP-Code:
if (rectArray[i][0]) 
...wenn rectArray[i][0] true ist, dann...? Wie kann ein Array true sein (davon wird ja ausgegangen wenn ich in einer if-Function nichts wie "==" oder so schreibe...)?

Vielen Dank auf jeden Fall, hoffe weiterhin auf freundliche Antworten

mfg Peter
peat-ar ist offline   Mit Zitat antworten
Alt 14-07-2010, 11:39   #8 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Wieso schreibst Du die Eventlistener nicht einfach in Deine Klasse rect?

Die Funktionen der Klasse sind ja überall vorhanden und Du musst deshalb nicht mehr mit irgendwelchen durchnummerierten Funktionen rumbasteln..
__________________
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 14-07-2010, 11:51   #9 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Stimmt auch wieder...leider kenn ich mich mit den Klassen nicht wirklich aus, nur soweit, dass ich ein Objekt dynamisch erzeugen kann.

Wenn ich den EventListener allerdings in die Klasse schreibe, kann ich dem auch Informationen (seine Position innerhalb des Arrays) mitgeben, sodass er auch die umliegenden MCs ansprechen kann?

Aber danke schon mal für den Tip, bin total auf der Leitung gestanden
__________________
Ich spreche Deutsch, Englisch, Französisch, Latein und Russisch... nur mit AS will's nicht so ganz hinhauen.
peat-ar ist offline   Mit Zitat antworten
Alt 14-07-2010, 12:08   #10 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Ich hatte überlesen, dass Du mehrere Kästen beeinflussen willst. Das wiederum würde ich ganz ohne rollover mithilfe einer Mouseabstandsberechnung lösen (wofür man nichtmal eine 2D-Array bräuchte):
PHP-Code:
addEventListener(MouseEvent.MOUSE_MOVEhandleMouse);

private function 
handleMouse(e:MouseEvent):void {

    var 
i:uint;
    var 
y:uint;
    var 
r:rect;
    var 
maxZ:Number 50;
    var 
scaleXY:Number 300;

    for (
0rectArray.lengthi++) {
        for (
0rectArray[i].lengthj++) {
            
rectArray[i][j] as rect;
            if (
rr.maxZ / (Math.pow(r.mouseX*scaleXY2) + Math.pow(r.mouseY*scaleXY2) );
        }
    }        

(Wie immer: Code noch nicht getestet)

Spiel mal etwas mit den Parametern maxZ und scaleXY bis Dir das Ergebniss passt.
__________________
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 (14-07-2010 um 12:11 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 14-07-2010, 13:27   #11 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Talking

Ok...sieht sehr intelligent aus ^^

Ab

PHP-Code:
            r rectArray[i][j] as rect;
            if (
rr.maxZ / (Math.pow(r.mouseX*scaleXY2) + Math.pow(r.mouseY*scaleXY2) ); 
versteh ichs zwar nicht so, aber ich such mir diese (mir neuen) Funktionen, usw mal raus

Nochmals vielen Dank für eure Hilfe!
__________________
Ich spreche Deutsch, Englisch, Französisch, Latein und Russisch... nur mit AS will's nicht so ganz hinhauen.
peat-ar ist offline   Mit Zitat antworten
Alt 14-07-2010, 14:22   #12 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Die Funktion berechtnet mit Hilfe des Pytagoras aus den Mouse-Koordinaten den Mouseabstand:
PHP-Code:
// d² = x² + y² =>
Math.sqrtMath.pow(x,2) + Math.pow(y,2) ); 
Und gewichtet diesen Abstand dann mit Hilfe der folgenden Formel als Glockenkurve, die Ihr Maximum bei 0,1 hat und in beide Richtungen gegen 0 abfällt:
PHP-Code:
/ (1Math.pow(d,2)); 
Zusammen mit ein paar Parametern sieht das dann so aus wie das, was ich oben gepostet habe.
__________________
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 (15-07-2010 um 08:49 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 15-07-2010, 14:30   #13 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Question

Ich komm mir irgendwie grad vor wie der größte Trottel, aber
1) wofür brauch ich den Abstand?
2) Glockenkurve ist laut Wikipedia für Wahrscheinlichkeitsberechnung, usw... was hat das mit dem Beispiel zu tun? (sorry in der Schule sind wir noch nicht so weit )
3) (die wohl dümmste Frage): Wo schreibe ich die Funktion die definiert was beim Hover-Effekt passieren soll hin?
__________________
Ich spreche Deutsch, Englisch, Französisch, Latein und Russisch... nur mit AS will's nicht so ganz hinhauen.
peat-ar ist offline   Mit Zitat antworten
Alt 15-07-2010, 14:50   #14 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
...bei der ich dann weiß bei welchem die Maus grad drüber ist; dessen z-Wert sollte sich dann etwas ändern und der von allen daneben auch
Ich habe dich so verstanden, dass Du alle Kästen mit der Mouse abhängig von ihrem Abstand beeinflüssen möchtest...

Zitat:
Zitat von peat-ar Beitrag anzeigen
1) wofür brauch ich den Abstand?
...und dafür brauchst Du natürlich genau diesen Abstand

Zitat:
Zitat von peat-ar Beitrag anzeigen
2) Glockenkurve ist laut Wikipedia für Wahrscheinlichkeitsberechnung, usw... was hat das mit dem Beispiel zu tun? (sorry in der Schule sind wir noch nicht so weit )
Diese Kurve hilft Dir dabei auszurechnen wie stark eine Kasten entsprechenden seines Mouseabstand beeinflusst wird. Sie geht von 1 (starker Einfluss) wenn die Mouse direkt über dem Kasten ist, bis fast 0 (gar kein Einfluss) in den Randbereichen.

Zitat:
Zitat von peat-ar Beitrag anzeigen
3) (die wohl dümmste Frage): Wo schreibe ich die Funktion die definiert was beim Hover-Effekt passieren soll hin?
Over-Effekte brauchst Du nicht mehr, weil Du aller Parameter die sich ändern sollen (hier z.B. "z" und "alpha") dynamisch mit dieser Funktion änderst:
PHP-Code:
addEventListener(MouseEvent.MOUSE_MOVEhandleMouse);

private function 
handleMouse(e:MouseEvent):void {

    var 
i:uint;
    var 
y:uint;
    var 
r:rect;
    var 
scaleXY:Number 300;
    var 
f:Number;

    for (
0rectArray.lengthi++) {
        for (
0rectArray[i].lengthj++) {
            
rectArray[i][j] as rect;

            
// f ist der Wert für die Beeinflussung. Erliegt immer zwischen 0 und 1
            
/ (Math.pow(r.mouseX*scaleXY2) + Math.pow(r.mouseY*scaleXY2) );

            
// Und jetzt werden entsprechend die Parameter angepasst
            
if (r){
              
r.maxZ;
              
r.alpha f*.5 .5;
              
// usw..
            
}

        }
    }        

__________________
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 (15-07-2010 um 14:54 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 15-07-2010, 14:59   #15 (permalink)
questions++;
 
Registriert seit: Jul 2010
Beiträge: 51
Thumbs up

ad omnia: Oh, ich hatte noch meine ursprüngliche Lösung im Kopf, dass ich das über den Array mit einem Hover-Effekt mache

Vielen Dank

PS.: Geniale Lösung, dachte das müsste man mit Arrays machen
__________________
Ich spreche Deutsch, Englisch, Französisch, Latein und Russisch... nur mit AS will's nicht so ganz hinhauen.
peat-ar ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
array, dynamisch, erstellt, mehrdimensionaler array

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
auf array "dynamisch" zugreifen Mr Tyler Durden ActionScript 3 4 26-01-2010 15:44
LoadVars im Array Prototype: Wie auf Array zugreifen? ING ActionScript 1 4 17-05-2008 16:38
alle dynamisch geladen Variablen einer Textdatei in Array speichern p-flash Flash MX 2004 2 28-09-2005 09:54
Auf array dynamisch zugreifen piXeLfanatiker ActionScript 1 5 21-02-2005 22:03
jedes zweite array element in neuem array speichern dizzlwizzl Flash MX 2 24-01-2005 00:01


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele