嵌套数组不起作用

时间:2011-09-10 01:25:45

标签: actionscript-3

我有以下问题:我有这个多级数组(嵌套数组),其中包含两行bitmapData。第1行:360度旋转bitmapData对象;第2行:360度旋转和彩色的bitmapData对象。

我尝试访问第2行,但这不起作用。有一些神秘的错误消息出现(“TypeError:错误#1034:类型强制失败:无法将[] @ 36d7e9e9转换为flash.display.BitmapData。在BasicBlitArrayObject / updateFrame()”)。

有人可以帮我解决这个问题吗?非常感谢你。

此函数旋转并着色bitmapData;旋转的bitmapData被抛入一个数组,彩色的bitmapData被抛入另一个数组;第三个数组用作一个级别数组,用于嵌套其中的另外两个数组

public function     createColoredRotationBlitArrayFromBD(sourceBitmapData:BitmapData, inc:int,     offset:int = 0, color:Number = 1, $alpha:Number = 1):Array
{

tileList = [];
tileListSec = [];
levelArray = [tileList, tileListSec];
var rotation:int = offset; 

while (rotation < (360 + offset))
{
    var angleInRadians:Number = Math.PI * 2 * (rotation / 360);
    var rotationMatrix:Matrix = new Matrix();

    rotationMatrix.translate(-sourceBitmapData.width * .5, -sourceBitmapData.height * .5);
    rotationMatrix.rotate(angleInRadians);
    rotationMatrix.translate(sourceBitmapData.width * .5, sourceBitmapData.height * .5);


    var matrixImage:BitmapData = new BitmapData(sourceBitmapData.width, sourceBitmapData.height,
                                true, 0x00000000);

    matrixImage.draw(sourceBitmapData, rotationMatrix);
    tileList.push(matrixImage.clone());


    bitmapData = new BitmapData(matrixImage.width, matrixImage.height, true, 0x00000000);
    bitmapData = matrixImage;


    var colorMatrix:ColorMatrixFilter = new ColorMatrixFilter (
                        [color, 0, 0, 0, 0,
                        0, 0, 0, 0, 0,
                         0, 0, 0, 0, 0,
                         0, 0, 0, $alpha, 0]);

    matrixImage.applyFilter(bitmapData, bitmapData.rect, point0, colorMatrix);


    tileListSec.push(matrixImage.clone());


    rotation += inc;

    matrixImage.dispose();
    matrixImage = null;
    rotationMatrix = null;
    bitmapData.dispose();
    bitmapData = null;
    colorMatrix = null;
    }

return(levelArray);

}

创建我的旋转和彩色位图数据

animationFrames = tempBlitArrayAsset.createRotationBlitArrayFromBD($bitmapData, 1, 270);

这里我尝试访问我的关卡数组的第一行(这不起作用;我无法访问它)

tempEnemy.animationList = animationFrames;
tempEnemy.bitmapData = tempEnemy.animationList[1][tempEnemy.frame];

此功能用于更新帧

public function updateFrame(inc:int, row:int = 0):void
{
frame += inc;

if (frame > animationList.length - 1){
    frame = 0;
}
bitmapData = animationList[row][frame];                 


}

}   

这是显示我的游戏中如何使用updateFrame函数的行(trueRotation为0)

tempEnemy.updateFrame(tempEnemy.trueRotation);

1 个答案:

答案 0 :(得分:1)

我找不到createColoredRotationBlitArrayFromBD

的任何错误
var $bitmapData:BitmapData = new BitmapData(40,40,false, 0x7f7f7f);
var animationFrames:Array = createColoredRotationBlitArrayFromBD($bitmapData, 1, 270);
trace(animationFrames.length);   // 2
trace(animationFrames[0].length);  // 360
trace(animationFrames[1].length);  // 360

var bitmap:Bitmap = new Bitmap();
this.addChild(bitmap);
bitmap.bitmapData = animationFrames[1][0]; // works..

这似乎是正确的。对?我得到一个红色的位图。

我在您列出的代码中看到的唯一“错误”是updateFrame

if (frame > animationList.length - 1){
    frame = 0;
}

应该是:

if (frame > animationList[row].length - 1){
    frame = 0;
}

因为animationList.length == 2

但是你提供的代码中其他一切看起来都没问题,所以如果没有更多的代码,我不确定是否有任何帮助。