我有以下问题:我有这个多级数组(嵌套数组),其中包含两行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);
答案 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
但是你提供的代码中其他一切看起来都没问题,所以如果没有更多的代码,我不确定是否有任何帮助。