将图形叠加到单个Sprite中

将图形叠加到单个Sprite中

我有一些代码可以通过拉动每个单独的身体/衣服项目并按特定顺序覆盖来生成玩家头像子画面。本质上,我正在尝试通过将衣物彼此叠在一起而将它们组合成一个整体。

但是最终输出仅是最后抽取的衣服。

这是我正在使用的两段代码:

public function new(_username:String)
{
    super();

    itemArray = new Array<String>();
    itemArray[0] = "Body";
    itemArray[1] = "Shoes";
    this.pixels = new BitmapData(Std.int(itemRect.width), Std.int(itemRect.height));

    for (itemName in itemArray)
    {
        //this.pixels.draw(prepareItem(itemName).pixels);
        var itemSprite:FlxSprite = prepareItem(itemName);
        stamp(itemSprite);
    }
}

private function prepareItem(assetName:String):FlxSprite
{
    var assetSprite:FlxSprite = new FlxSprite();
    assetSprite.loadGraphic("assets/images/" + assetName + ".png");

    assetSprite.pixels.threshold(assetSprite.pixels, itemRect, new Point(0, 0), "==", 0xFF00FF00);
    assetSprite.pixels.threshold(assetSprite.pixels, itemRect, new Point(0, 0), "==", 0xFFFF0000);

    return assetSprite;
}


如您所见,我尝试使用draw()在现有的BitmapData上绘制像素,并且还尝试标记从衣服图像生成的精灵。

我将举一个例子来阐明我的目标。注意鞋子是如何在身体上分层的。但是按照我当前的代码,鞋子可以完全代替身体。

flash - HaxeFlixel:将图形叠加到单个Sprite中-LMLPHP

flash - HaxeFlixel:将图形叠加到单个Sprite中-LMLPHP
flash - HaxeFlixel:将图形叠加到单个Sprite中-LMLPHP

最佳答案

但是最终输出仅是最后抽取的衣服。


使用您的代码,我实际上看到了两个资产相互重叠-根据您使用的资产,我猜可能不太明显。

修复很简单:您需要抵消stamp()调用中的后续精灵,例如如果您想垂直堆叠资产,则如下所示:

var currentY = 0;
for (itemName in itemArray)
{
    var itemSprite:FlxSprite = prepareItem(itemName);
    stamp(itemSprite, 0, currentY);
    currentY += Std.int(itemSprite.height);
}

关于flash - HaxeFlixel:将图形叠加到单个Sprite中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51028511/

10-08 21:47