Kuriose Fehlerplatzierung von Punkt

SCIPIO-AEMILIANUS

aka Dubdidadu
Ich schreib grad ein kleines Spiel in AS3. Mein Problem ist das ein Objekt derbst deplatziert wird(siehe Grafik im Anhang). Benutzen tu ich bisher lediglich folgenden Code(Habe ihn weil ich einfach den Fehler nicht finde auf lediglich das wichtigste zusammengekürzt und mag somit etwas seltsam aussehen aber das Problem besteht immer noch.)

CODE:
Code:
var field:Array=new Array();
function createField(){
    field=new Array();
    var i:int=0;
    var u:int=0;
    var rand:Number;
    while(i<10){
        u=0;
        field[i]=new Array();
        while(u<6){
            rand=20;
            if(i<3){
                rand=Math.random();
            }
            if(rand<=1/5){
                field[i][u]=1;
            }
            else if(rand<=2/5){
                field[i][u]=2;
            }
            else if(rand<=3/5){
                field[i][u]=3;
            }
            else if(rand<=4/5){
                field[i][u]=4;
            }
            else if(rand<=5/5){
                field[i][u]=5;
            }
            else{
                field[i][u]=0;
            }
            u++;
        }
        i++;
    }
    redrawField();
}
function redrawField():void{
    var dott:dot;
    var i:int=0;
    var u:int=0;
    
    while(i<10){
        u=0;
        while(u<6){
            if(field[i][u]==1){
                dott=new dot(0xFFaa22);
            }
            if(field[i][u]==2){
                dott=new dot(0xFFFF22);
            }
            if(field[i][u]==3){
                dott=new dot(0xFFaaFF);
            }
            if(field[i][u]==4){
                dott=new dot(0xFFaa99);
            }
            if(field[i][u]==5){
                dott=new dot(0xF33a22);
            }
            dott.posX=(i*30);
            holder.addChild(dott);
            dott.x=i*30;
            dott.y=u*30;
            u++;
        }
        i++;
    }
}
createField();

dot ist ein Objekt das lediglich einen Kreis erzeugt und diesen darstellt.

Mein Problem ist der Punkt rechts unten der da eigentlich nicht sein dürfte. Inzwischen sitz ich an dem Problem seit 2 Stunden und find den Fehler nicht.

Siehe:
displacedDot.JPG
 
Puhh, komplizierter Code.

Also du machst folgenden Fehler.
In der ersten funktion hast du 2 while schleifen, daraus bekommst du insgesamt (10x6) 60 Werte in dein Multi- Array.
Dabei sind aber die ersten 30! Felder mit einer zahl zwischen 1-5 belegt der rest (30 felder) sind 0.
In der zweiten Funktion Fragst du dieses Array mit seinen 60 Felder nochmal ab.
Alle Arrayelemente die einen Wert von 1-6 beinhalten sollen ein dot instanzieren.
Da aber nach den 30ten Element die Werte 0 sind wird zwar kein dot instanziert aber das allerletzte dot das auf die bühne gelegt wurde wird insgesamt weiter 30 mal auf x,y ausgerichtet und landet dann immer am ende auf x = 300, y = 180. Die Referenz bleibt ja auf diesem letzten dot der instanziert wurde.

Mach mal folgendes:
PHP:
 function redrawField():void{
   
    var i:int=0;
    var u:int=0;
    
    while(i<10){
        u=0;
        while(u<6){

 var dott:dot = null;

            if(field[i][u]==1){
                dott=new dot(0xFFaa22);
            }
            if(field[i][u]==2){
                dott=new dot(0xFFFF22);
            }
            if(field[i][u]==3){
                dott=new dot(0xFFaaFF);
            }
            if(field[i][u]==4){
                dott=new dot(0xFFaa99);
            }
            if(field[i][u]==5){
                dott=new dot(0xF33a22);
            }
           if(dott != null){
            dott.posX=(i*30);
            holder.addChild(dott);
            dott.x=i*30;
            dott.y=u*30;
           }
            u++;
        }
        i++;
    }
}
 
AHHH :D Jetzt wo du es sagst seh ich den Fehler auch. Hätt mir eigentlich auch klar sein müssen aber manchmal steht man schon aufm Schlauch.

Vielen Dank
 

Neue Beiträge

Zurück