【问题标题】:why blurred or glow effect doesn't work with GPU render mode?为什么模糊或发光效果不适用于 GPU 渲染模式?
【发布时间】:2014-01-23 14:52:33
【问题描述】:

我正在使用 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 设备上运行时......

【问题讨论】:

    标签: android actionscript-3 flash gpu glow


    【解决方案1】:

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

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

    // 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 中使用 GPU 渲染模式时存在以下限制 2.5及以上:

    • 不支持过滤器。

    Source

    【讨论】:

    • 好的。但似乎“new GlowFiler(5, 5, 5)”不起作用...错误 1136:参数数量不正确。预期为 0。你知道为什么吗?因为它们很重要(没有它就无法工作)
    • 对不起,是凭记忆写的。我编辑了,现在可以使用了
    • 嗯,很奇怪。没有错误,在模拟设备上运行良好,但在我的安卓设备上仍然无法运行..(看不到任何发光......)
    • 是位图的父级缓存为位图。 Flash 中的 GPU 开发几乎基于将 displayObjects 缓存为位图
    • 位图实际上并没有一个特定的父级,因为游戏的每个场景中的每个项目都会发光..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2017-05-10
    • 2021-08-16
    相关资源
    最近更新 更多