【发布时间】:2011-07-07 15:09:01
【问题描述】:
我在尝试为太空游戏中飞来飞去的物体着色时遇到了一个大问题。
当我射击并击中它们时 - 受影响的敌人会眨眼。图形是预渲染的(即有一个旋转数组和函数,其中存储/计算对象的度数及其适当的旋转以获得更好的性能)。
所以 - 我的想法是通过额外着色的功能来增强旋转功能;但彩色和旋转对象应与正常旋转对象分开存储。为此,我制作了一个嵌套数组: 第一行有一个对象的 360 度旋转图形,第二行有一个旋转和彩色对象的 360 度图形。
问题:着色有效,但未旋转(始终为 0 度)。请帮帮我——我花了好几个小时才弄清楚为什么它不起作用,所以我放弃了。如果有人能找到问题,那就太酷了!非常感谢!
public function createRotationWithColorBlitArrayFromBD(sourceBitmapData:BitmapData, inc:int, offset:int = 0):Array
{
trace("sourceBitmapData.width=" + sourceBitmapData.width);
trace("sourceBitmapData.height=" + sourceBitmapData.height);
tileList = [];
tileListSec = [];
levelArray = [];
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());
var colorMatrix:ColorMatrixFilter = new ColorMatrixFilter (
[1, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 1, 0]);
matrixImage.applyFilter(sourceBitmapData, sourceBitmapData.rect, point0, colorMatrix);
tileListSec.push(matrixImage.clone());
rotation += inc;
matrixImage.dispose();
matrixImage = null;
rotationMatrix = null;
}
levelArray = [tileList, tileListSec];
return(levelArray);
}
【问题讨论】:
标签: actionscript-3