簡體   English   中英

ActionScript 3數組返回運行時錯誤

[英]ActionScript 3 Array Return Runtime Error

好吧,所以我有以下代碼,它所做的只是在屏幕上放置3個純色方塊,在右下角放置一個彩虹色方塊。 當用戶按下任何一個純色方塊時,該點被彩虹色的方塊填滿,並且在彩虹的原始位置進入被點擊的方塊。 除了一件事之外,代碼幾乎完美無缺。 當用戶嘗試單擊位於彩虹方塊下方的方塊時,它將返回運行時錯誤。

我的代碼:

一世

mport flash.display.DisplayObject;
import flash.ui.Mouse;

var t1:DisplayObject = new mc_1;
var t2:DisplayObject = new mc_2;
var t3:DisplayObject = new mc_3;
var t4:DisplayObject = new mc_4;

var tile:Array = [[t1,t2],[t3,t4]];

var r:int;
var c:int;
var a:int = 50;
var b:int = 50;
var aa:int = 1;
var bb:int = 1;
function reDraw() {
    a = 50;
    b = 50;
    for (r=0;r<2;r++) {
        for (c=0;c<2;c++) {
            tile[r][c].x = a;
            tile[r][c].y = b;
            trace(tile[r][c]);
            stage.addChild(tile[r][c]);
            tile[r][c].addEventListener(MouseEvent.CLICK, go);
            a += 100;
        }
        a = 50;
        b += 100;
    }
}
reDraw();

function go(e:MouseEvent):void {
    trace(e.target);
    //Right:
        if (e.target == tile[aa][bb+1]) {
            tile[aa][bb] = e.target;
            bb += 1;
            tile[aa][bb] = t4;
            reDraw();
            trace("Right");
        }
    //Left:
        else if (e.target == tile[aa][bb-1]) {
            tile[aa][bb] = e.target;
            bb -= 1;
            tile[aa][bb] = t4;
            reDraw();
            trace("Left");
        }
    //Up:
        else if (e.target == tile[aa-1][bb]) {
            tile[aa][bb] = e.target;
            aa -= 1;
            tile[aa][bb] = t4;
            reDraw();
            trace("Up");
        }
    //Down:
        else if (e.target == tile[aa+1][bb]) {
            tile[aa][bb] = e.target;
            aa += 1;
            tile[aa][bb] = t4;
            reDraw();
            trace("Down");
        }
        else trace("FAILED!");
    trace(aa +" " +  bb);
}

錯誤:

TypeError:錯誤#1010:術語未定義且沒有屬性。 在win_fla :: MainTimeline / go()

如果你看看你的代碼,你有這個:

//Down:
    else if (e.target == tile[aa+1][bb]) {
        tile[aa][bb] = e.target;
        aa += 1;
        tile[aa][bb] = t4;
        reDraw();
        trace("Down");
    }

現在你可以看到它在尋找tile [aa + 1]然而aa = 1在開頭所以aa + 1 = 2並且tile [2]不存在或未定義。 您需要將邏輯更改為:

var tileFound:Boolean = false;
for(var i:int = 0; i < 2; i++){
    for(var j:int = 0; j < 2; j++){
        if(tile[i][j] == e.target){
            tileFound = true;
            tile[aa][bb] = e.target;
            tile[i][j] = t4;
            if(i > aa) trace ("Right");
            else if(i < aa) trace ("Left");
            if(j > bb) trace ("Bottom");
            else if(j < bb) trace ("Top");
            aa = i;
            bb = j;
            reDraw();
            tileFound = true;
            break;
        }
    }
    if(tileFound) break;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM