Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-10-2010, 21:21   #1 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 3
Question flash überschreibt falsche variable

Hi Leute,

ich sitze nun schon einige Tage an folgendem Problem:

Und zwar habe ich eine function erstellt in die mehrere Werte übergeben werden, diese werden dann in dieser ausgewertet und verarbeitet. Merkwürdigerweise wird dabei eine Variable, meiner Meinung nach, grundlos Überschrieben.

Hier der aufs Nötigste reduzierte Codeausschnitt:

PHP-Code:
public function getNextTurn(..., pMainBlock:Array, ..., ..., ..., ..., ...):Point 
{            
            var 
newMainBlock:Array = pMainBlock;
            var 
outPut:Point = new Point(00);
            
            var 
zeile:int;
            var 
spalte:int;
            
            for (
zeile 0zeile 3zeile++)
            {
                for (
spalte 0spalte 3spalte++)
                {
                    if (
pMainBlock[zeile][spalte] == 0)
                    {
                        
newMainBlock pMainBlock;
                        
newMainBlock[zeile][spalte] = 2;

                        ...
                    }
                }
            }
           
            ...

            return 
outPut;
        } 
Der pMainBlock ist ein zweidimensionales Array welches 3x3 Werte enthält. Diese Werte sind vom Typ int und sollen die Werte 0, 1 oder 2 speichern. Ohne eine für mich ersichtlichen Grund werden, nach dem Durchlauf der beiden Schleifen, in pMainBlock alle 0en durch 2en ersetzt.

Vielleicht kann mir jemand von euch erklären was hier geschieht.

Danke schonmal im Voraus.
tomabu ist offline   Mit Zitat antworten
Alt 30-10-2010, 22:28   #2 (permalink)
Neuer User
 
Registriert seit: Aug 2002
Beiträge: 607
Zitat:
Zitat von tomabu Beitrag anzeigen
ActionScript:
  1. ...
  2.                     if (pMainBlock[zeile][spalte] == 0)
  3.                     {
  4.                         newMainBlock = pMainBlock;
  5.                         newMainBlock[zeile][spalte] = 2;
  6.  
  7.                         ...
  8.                     }
  9. ...
ist doch das gleiche wie das:
ActionScript:
  1. if (pMainBlock[zeile][spalte] == 0)
  2. {
  3.         pMainBlock[zeile][spalte] = 2;
  4. }
Also wird jede 0 durch eine 2 ersetzt.
bizz ist offline   Mit Zitat antworten
Alt 30-10-2010, 22:58   #3 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 3
Verstehe ich nicht ganz , ich lese doch immer nur Daten aus dem pMainBlock, aber verändere ihnen nie. newMainBlock soll eine Kopie von pMainBlock sein und nur dort sollen auch erstmal Veränderungen vorgenommen werden.

pMainBlock soll nie geändert werden, zumindest nicht in diser Funktion.
tomabu ist offline   Mit Zitat antworten
Alt 31-10-2010, 02:33   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
nun kurz ausgedrückt, newMainBlock ist keine Kopie von pMainBlock, sondern eine Referenz. Beide Variablen zeigen auf das selbe Objekt!

Alle Objekttypen werden in Flash so gehandhabt!
noch ein gutes Stichwort zu dem Thema ist die clone-Methode. einige Objekte in Flash implementieren sie von Haus aus, alle anderen Objekte musst du von Hand "klonen".

zu deinem Code, das korrekte Vorgehen wäre folgendes:
ActionScript:
  1. var zeile:int, spalte:int, newMainBlock:Array = [];
  2.  
  3. for (zeile = 0; zeile < 3; zeile++)
  4. {
  5.     newMainBlock[zeile] = [];
  6.     for (spalte = 0; spalte < 3; spalte++)
  7.     {
  8.         if (pMainBlock[zeile][spalte] == 0)
  9.         {
  10.             newMainBlock[zeile][spalte] = 2;
  11.         }else{
  12.             newMainBlock[zeile][spalte] = pMainBlock[zeile][spalte];
  13.         }
  14.     }
  15. }
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (31-10-2010 um 02:34 Uhr)
thomas_E ist gerade online   Mit Zitat antworten
Alt 31-10-2010, 09:22   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2010
Beiträge: 3
Danke für die schnelle Antwort. Hat so geklappt wie du es beschrieben hast.
tomabu ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
array, as3, flash, function, überschreiben

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
a überschreibt a img Digger2k3 HTML und CSS 6 11-07-2009 18:28
Falsche Ausgabe (Flash/XML) AthlonXP2000 Flash MX 2004 8 20-08-2005 12:50
drucken aus flash, falsche farben basilio Am Rande 0 20-04-2003 14:08
Flash MX Plugin + falsche Textfeldgröße Björn L. Flash MX 0 21-03-2002 12:21


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele