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

时间:2018-06-25 17:01:37

标签: flash sprite haxe openfl haxeflixel

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

但是最终输出只是最后一件衣服。

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

posix_spawnp(NULL, pgm, NULL, NULL, (char**) argv, environ)

如您所见,我尝试使用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()上绘制像素,并且还尝试标记从衣服图像生成的精灵。

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

Example

Body Shoes

1 个答案:

答案 0 :(得分:2)

  

但是最终输出只是最后一件衣服。

使用您的代码,我实际上看到这两个资产是相互重叠的 -我猜这可能不太明显,具体取决于您使用的资产。

修复很简单:您需要在stamp()调用中抵消后续的子画面,例如如果您想垂直堆叠资产,可以这样:

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