我有代码可以通过拉动每个单独的身体/衣物并按特定顺序覆盖来生成玩家头像子画面。 从本质上讲,我正在尝试将衣物彼此叠放在一起以形成一个整体。
但是最终输出只是最后一件衣服。
这是我正在使用的两段代码:
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()
上绘制像素,并且还尝试标记从衣服图像生成的精灵。
我正在举一个例子来阐明我的目标。注意鞋子是如何在身体上分层的。但是按照我目前的代码,鞋子可以完全取代身体。
答案 0 :(得分:2)
但是最终输出只是最后一件衣服。
使用您的代码,我实际上看到这两个资产是相互重叠的 -我猜这可能不太明显,具体取决于您使用的资产。
修复很简单:您需要在stamp()
调用中抵消后续的子画面,例如如果您想垂直堆叠资产,可以这样:
var currentY = 0;
for (itemName in itemArray)
{
var itemSprite:FlxSprite = prepareItem(itemName);
stamp(itemSprite, 0, currentY);
currentY += Std.int(itemSprite.height);
}