在实体上精确固定阴影

发布时间:2020-07-06 20:58

我想问一个问题,希望能为您提供建议。在我的项目中,我正在研究将要出现的不同实体,其中之一就是“ TreeEntity”。显然它由四个部分组成。 “叶子,阴影,树桩,树干”。这四个部分只有一个ID,并且在调用新的“ TreeEntity”时会随机选择。此外,根据树的年龄,树叶和阴影都有四种不同的状态。阴影将必须根据时间围绕树干旋转。现在,由于我的项目引擎希望创建尽可能通用的引擎,以便它也可以在其他项目或其他人中使用,所以我面临死胡同。

我目前有这个结果(前提是,所有使用的图像仅用于测试目的):

enter image description here

可以看出,阴影与行李箱非常分离。从理论上讲,可以通过修改所使用的图像来对其进行修复:

enter image description here

或者编写一本巨大的字典,为每个由叶子,阴影,树桩和树干组成的图像写上所有精确的锚点。

但是这样做会损害我的目标。因此,我想问您的建议是,是否使用pyglet或其他方式,而不管使用的阴影(在这种情况下为随机阴影),是否可以选择将其放置在正确位置的锚点?还是您必须修改图像或创建字典?

我的问题来自这样一个事实:我已经看过几次图像,例如阴影或其他类似我在此处插入的图像,但在这种情况下,阴影位于正确的位置。从这里开始我拍摄照片进行测试的同一游戏,受一两个机制的启发,阴影被放置在正确的位置。所以我不知道该走哪条路。

目前,所有四个部分都有一个由小词典指定的通用锚点:

__statdict = {
        "leaves": {
            "cell": (3, 1),
            "anchor_x": "center",
            "anchor_y": "bottom"
        },
        "shadow": {
            "cell": (4, 1),
            "anchor_x": "left",
            "anchor_y": "bottom"
        },
        "stump": {
            "cell": (1, 1),
            "anchor_x": "center",
            "anchor_y": "bottom"
        },
        "trunk": {
            "cell": (1, 1),
            "anchor_x": "center",
            "anchor_y": "bottom"
        }
    }

在加载资源时,会分配锚点:

if self.__statdict[name]["anchor_x"] == "center":
    ancx = texture.width // 2
elif self.__statdict[name]["anchor_x"] == "right":
    ancx = texture.width
else:
    ancx = 0
if self.__statdict[name]["anchor_y"] == "center":
    ancy = texture.height // 2
elif self.__statdict[name]["anchor_y"] == "top":
    ancy = texture.height
else:
    ancy = 0
texture.anchor_x = ancx
texture.anchor_y = ancy

我试图做到尽可能完整。谢谢你的帮助。也许我什么都没遇到问题,解决方案比我想象的要简单,所以我很抱歉。

更新(1):

给定子画面的方向(在本例中为右侧),是否可以通过pyglet或模块将其陪伴,以了解第一个非alpha像素的位置?像这样:“ SpriteShadow的方向是向右。具有rbg值且alpha等于255的第一个像素是ay = 20(相对于sprite的宽度)。然后,我将SpriteShadow移到左侧相对于20像素的常规锚点“

回答1