ActionScript 3 BitmapData 的方法未实现。如何访问其方法?



最终,我要做的是对运行时加载的一些位图应用gamma校正。我能够创建一个BitmapData对象,然后从BitmapData创建Bitmap,并且我能够使用addChildBitmap添加到阶段中。到目前为止还不错。但是,如果我尝试以任何方式更改BitmapData(无论是在创建Bitmap之前还是之后(,我都会收到以下警告:

Warning: The method BitmapData::fillRect() is not implemented
Warning: The method BitmapData::paletteMap() is not implemented
Warning: The method BitmapData::clone() is not implemented

为了尽可能简化事情,让我们试着在https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#paletteMap((

我创建了一个空白的ActionScript 3文档,按F9,然后将此代码复制并粘贴到时间线中,在Layer_1:Frame 1:上

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
var myBitmapData:BitmapData = new BitmapData(80, 80, false, 0x00FF0000);
myBitmapData.fillRect(new Rectangle(20, 20, 40, 40), 0x0000FF00);
var redArray:Array = new Array(256);
var greenArray:Array = new Array(256);
for(var i:uint = 0; i < 255; i++) {
redArray[i] = 0x00000000;
greenArray[i] = 0x00000000;
}
redArray[0xFF] = 0x0000FF00;
greenArray[0xFF] = 0x00FF0000;
var bottomHalf:Rectangle = new Rectangle(0, 0, 100, 40);
var pt:Point = new Point(0, 0);
myBitmapData.paletteMap(myBitmapData, bottomHalf, pt, redArray, greenArray);
var bm1:Bitmap = new Bitmap(myBitmapData);
addChild(bm1);

这些都是直接从示例中复制的。当我尝试运行它时,日志告诉我fillRectpaletteMap没有实现。我在Animate 19和Flash Pro CS6中尝试过,在这两个地方都有相同的结果。

知道我做错了什么吗?为什么BitmapData的方法没有实现,我该如何实现它们?

问题出在Scaleform Launcher上,我用它来测试电影。不使用Scaleform Launcher进行测试,请转到Control>测验那里的一切似乎都很顺利。

不幸的是,如果你依赖Scaleform集成从游戏引擎内部与Flash交互,你将无法从Flash内部修改位图。Scaleform似乎遗漏了bitmapData方法背后的所有代码。

我认为不太可能再有人需要在Flash中对位图进行伽马校正,但以防万一,下面是你的操作方法:

import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
var bitmapData:BitmapData = new BeforeColorCorrection();
var rectangle:Rectangle = new Rectangle(0, 0, bitmapData.width, bitmapData.height);
var point:Point = new Point(0, 0);
var redGamma:Array = new Array(256);
var greenGamma:Array = new Array(256);
var blueGamma:Array = new Array(256);
var gamma:Number = 2.0;
var corrected:Number;
var i:int
for(i = 0; i <= 255; i++)
{
corrected = 255 * Math.pow((i / 255.0), (1.0 / gamma));
redGamma[i] = uint(corrected) << 16;
greenGamma[i] = uint(corrected) << 8;
blueGamma[i] = uint(corrected);
}
bitmapData.paletteMap(bitmapData, rectangle, point, redGamma, greenGamma, blueGamma);
var bitmap:Bitmap = new Bitmap(bitmapData);
addChild(bitmap);

CCD_ 12是我的图书馆中的一个图像;导出ActionScript";已检查。如果Scaleform有效,我会在游戏过程中替换该图像,并运行一个功能,通过伽马校正使其变亮。

最新更新