1

我会尽量简明扼要。

我正在关注以下链接中的 tcod Rouguelike 教程:

http://rogueliketutorials.com/tutorials/tcod/

我正在使用 PyCharm 社区版,但我认为这并不重要。一切进展顺利,直到第 4 部分结束,我们为玩家实施了 FOV。当我尝试使用以下代码(在教程中给出)运行主引擎时:

def recompute_fov(fov_map, x, y, radius=1, light_walls=True, algorithm=0):
libtcod.map_compute_fov(fov_map, x, y, radius, light_walls, algorithm)

编译器吐出以下错误:

File "C:\Users\drago\anaconda3\envs\Roguelike\lib\site-packages\tcod\libtcodpy.py", line 3320, in map_compute_fov
    m.compute_fov(x, y, radius, light_walls, algo)
AttributeError: 'NoneType' object has no attribute 'compute_fov'

Process finished with exit code 1

我至少知道它是在谈论 tcod 包本身。但我不明白。谢天谢地,PyCharm 给了我一些见解……

PyCharm 对 libtcod.map_compute_fov 的洞察

所以我听从了它的建议,将 libtcod.map_compute_fov 更改为 libtcod.map.compute_fov

它给了我另一个错误:

File "C:\Users\drago\PycharmProjects\Roguelike\map_objects\fov_functions.py", line 13, in recompute_fov
    libtcod.map.compute_fov(fov_map, x, y, radius, light_walls, algorithm)
TypeError: compute_fov() takes from 2 to 5 positional arguments but 6 were given

Process finished with exit code 1

因此,PyCharm 再次能够告诉我这个新函数,以及它如何使用不同的值。它没有使用 FOV_map,而是使用称为 pov 的东西,并且该 pov 需要一个包含 2 个值的数组。它也与透明度有关,在这一点上,为了我想要完成的目的,它超出了我的想象。


我仍在学习 Python,因此本教程。我知道数组是什么。但是我不知道如何使我现有的代码与这个新功能/模块一起工作(我把两者混在一起了),因为旧的已经贬值了。

任何帮助,将不胜感激。

我也在使用 Python 3.8。

4

1 回答 1

1

我只是遇到了同样的问题,发现把

def recompute_fov(fov_map, x, y, radius, light_walls=True, algorithm=0):
    libtcod.map_compute_fov(fov_map, x, y, radius, light_walls, algorithm)

在 fov_functions.py 中的代码末尾修复了

“AttributeError:‘NoneType’对象没有属性‘compute_fov’”

我和你一样的问题。

以下是教程作者(截至第 4 部分)设置 fov_functions.py 的方式:

import libtcodpy as libtcod


def initialize_fov(game_map):
    fov_map = libtcod.map_new(game_map.width, game_map.height)

    for y in range(game_map.height):
        for x in range(game_map.width):
            libtcod.map_set_properties(fov_map, x, y, not game_map.tiles[x][y].block_sight,
                                       not game_map.tiles[x][y].blocked)

    return fov_map


def recompute_fov(fov_map, x, y, radius, light_walls=True, algorithm=0):
    libtcod.map_compute_fov(fov_map, x, y, radius, light_walls, algorithm)

这是作者在教程每个部分末尾放置的第 4 部分代码的链接:https://github.com/TStand90/roguelike_tutorial_revised/tree/part4 这是我找到我的 fov_functions 文件的地方和我的相比

作者将代码放在每个部分末尾的地方:https ://i.stack.imgur.com/AgjCp.png

希望这可以帮助你!

于 2020-07-14T18:47:17.670 回答