flash - 如何获得透明度以在 Actionscript 中处理位图

标签 flash actionscript-3 bitmap transparency bitmapdata

对于一个类(class)项目,我正在研究“Pissed Off Pigs”(我想你明白了, pig 会报复,别担心,我不会发布它!)我想创造用位图填充的圆圈(圆圈是因为碰撞数学更容易)。这是它们现在的样子。

How my Pigs look now

当然,白色是问题所在。下面是我的“ pig ”类。有任何想法吗?我试过 gif、png、8 位 png 等,似乎没有什么区别。图片本身是 20px 的正方形,圆的半径是 10px(所以直径是 20px)。这是我正在使用的图像:My Pig Image

而且我知道我可能应该在类之外加载图像,并在我创建新 pig 时只传递 BitmapData,这样我就不必在每次创建新 pig 时都加载图像,但现在它可以工作了! (排序)。

矩阵平移有问题吗?

哦,我已经检查了 bmpImage.transparent 并且它返回 true(即使我没有在构造函数中指定 true)。

` 包裹 { 导入 flash.display.; 导入 flash.net。; 导入 flash.events.; 导入 flash.geom。; 导入 flash.display.BitmapDataChannel;

public class pig extends Sprite {
    public var radius:uint;
    public var velocity:Vec2;
    public var tt:Sprite;
    public var pigLoader:Loader;
    public var bmpImage:BitmapData;
    public var framesAlive:uint;


    public function pig(xx:uint, yy:uint, radius:uint, vx:Number, vy:Number, sprite:String){
        this.x = xx;
        this.y = yy;
        this.radius = radius;

        this.velocity = new Vec2(vx, vy);

        pigLoader = new Loader();
        pigLoader.load(new URLRequest(sprite));
        pigLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, picLoaded);

    }
    private function picLoaded(event:Event):void {
        bmpImage = new BitmapData(pigLoader.width, pigLoader.height, true);
        bmpImage.draw(pigLoader);
        tt = new Sprite();
        var matrix:Matrix;
        matrix = new Matrix();
        matrix.translate( -10, -10);
        tt.graphics.beginBitmapFill(bmpImage, matrix, false, false);
        tt.graphics.drawCircle(0, 0, this.radius)
        tt.graphics.endFill();
        this.addChild(tt);
    }
}

`

最佳答案

你把问题复杂化了。当您想用平铺图案填充大面积区域时,通常使用位图填充,并且图案来自位图(想想墙纸),您不需要在这里使用它。您应该做的是使用 Loader.content 位图。您不需要 draw() 或矩阵,只需使用 .x 和 .y 将您的 pig 位图移动到以您的 Sprite 的 (0,0) 点为中心(如果这是您用于碰撞检测的圆的中心)。

没有理由让你的 pig Sprite 有一个可视圆圈来使用基于圆圈的碰撞检测。视觉表示对您的碰撞检测根本不重要。基于圆的碰撞检测通常只是毕达哥拉斯距离公式的应用,即如果中心之间的距离小于(或等于)被测圆的半径之和,则存在重叠(碰撞)。

如果你用这个替换最后一个函数会怎样:

private function picLoaded(event:Event):void
{
    var pigPic:Bitmap = event.target.loader.content;
    pigPic.x -= 10;
    pigPic.y -= 10;
    this.addChild(pigPic);
}

关于flash - 如何获得透明度以在 Actionscript 中处理位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5766691/

相关文章:

flash - 如何手动发送 MouseEvent?

actionscript-3 - 如何访问 AS3 中的 flashvars,并将它们添加到现有文本字段?

c# - AS3 套接字和策略文件请求到 C# 服务器

xml - 访问AS3中XML对象的可能未定义的属性?

Android渐变图形质量(缩放位图)

java - 从方法(可运行)计时器中获取对象

java - 在 Android/Java 中使用 Canvas 在图像上绘图

jquery - Flash 视频仍在使用 jQuery 删除的 DIV 上播放(IE 错误)

flash - 如何安全地将直播流发布到 Adob​​e Flash Media Server

ios - 闪存临 CS6 : Publishing for iOS using AIR - "Could not access digital certificate"