首页 > 解决方案 > 精确锚定实体上的阴影

问题描述

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

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

在此处输入图像描述

可以看出,阴影与树干非常分离。从理论上讲,这可以通过修改使用的图像来修复它:

在此处输入图像描述

或者编写一个巨大的字典,其中包含为构成树叶、阴影、树桩和树干的每个图像编写的所有精确锚点。

但这样做会不利于我的目标。所以,我想问你的建议是,无论使用 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(相对于精灵的宽度)。然后我将 SpriteShadow 向左移动关于 20 像素的一般锚点"

标签: python-3.xpython-3.7pyglet

解决方案


推荐阅读