0

我正在使用 Adob​​e Flash Pro CC 在 AS3 中制作游戏。

我已经为 Android 制作了一个移动版本,但如果我将 GPU 置于渲染模式,我的模糊效果或发光效果在设备上不起作用。

如果我把 CPU 或直接的模糊和发光效果工作,但动画不流畅。(使用 GPU 渲染,一切都更加流畅!)

您知道如何使用 GPU 渲染模式获得模糊效果和发光效果吗?

非常感谢,

斯蒂芬


这是我所做的(但它仍然无法在实际的 Android 设备上运行):

我的代码是:

private function itemGlow(isGlowing:Boolean):void{
                        if (isGlowing){
                                    var glow:GlowFilter = new GlowFilter();
                                    glow.color = 0xFFFF00;
                                    glow.alpha = .75;
                                    glow.blurX = 10;
                                    glow.blurY = 10;
                                    glow.quality = BitmapFilterQuality.MEDIUM;

                                    draggedItem.filters = [glow];
                        } else {
                                    draggedItem.filters = null;
                        }

我用这段代码替换它:

public function itemGlow(isGlowing:Boolean):void{
                        if (isGlowing){
                                    var glow:Sprite = new Sprite();
glow.graphics.beginFill(0); // black color
glow.graphics.drawCircle(20, 20, 20);
glow.graphics.endFill();

draggedItem.filters = [new GlowFilter(0xFFFF00, 1)];

var bd:BitmapData = new BitmapData(50, 50, true, 0x00000000);
bd.draw(glow);

var glowbit:Bitmap = new Bitmap(bd);
addChild(glowbit);

                        } else {
                                    draggedItem.filters = null;
                        }

没有错误,在模拟设备上可以看到发光。但是当它不能在真正的Android设备上运行时......

4

1 回答 1

1

矢量效果和混合模式在 GPU 模式下不起作用。如果你想得到一个发光效果,你必须在内存中计算它,但显示一个具有效果的位图。

这是一个极简主义的例子:

// creating a glowing sprite in memory
var glowingSprite:Sprite = new Sprite();
glowingSprite.graphics.beginFill(0); // black color
glowingSprite.graphics.drawCircle(20, 20, 20);
glowingSprite.graphics.endFill();
glowingSprite.filters = [new GlowFilter(0xFFFFFF, 1)];

var bd:BitmapData = new BitmapData(50, 50, true, 0x00000000); // when entering size, usually get the size from glowingSprite.getBounds(), it will return the size with the filter
bd.draw(glowingSprite);

var b:Bitmap = new Bitmap(bd);
addChild(b);

正如您将看到的,您现在可以使用过滤器和混合模式!如果你想要一个动画,只需创建一个 bitmapData 对象数组,然后在 bitmap 对象中更改每一帧的 bitmapData 属性。

来自 Adob​​e:

在 AIR 2.5 及更高版本中使用 GPU 渲染模式时存在以下限制:

  • 不支持过滤器。

资源

于 2014-01-06T08:58:00.653 回答