Roguelike开发障碍! libtcod.map_compute_fov贬值了?

Roguelike Development Roadblock! libtcod.map_compute_fov depreciated?

我会尽量做到既简短又透彻。

我正在关注下面的 tcod Rouguelike 教程 link:

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

我正在使用 PyCharm Community Edition,但我认为这并不重要。一切进展顺利,直到第 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's insight on 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,因此教程。我知道数组是什么。但是我不知道如何让我现有的代码与这个新的 function/module 一起工作(我把这两个搞混了),因为旧的已经贬值了。

如有任何帮助,我们将不胜感激。

我也在用 Python 3.8。

我刚遇到同样的问题,发现把

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 部分代码的 link:https://github.com/TStand90/roguelike_tutorial_revised/tree/part4 这是我找到 fov_functions 文件的地方,我将其与我的

进行了比较

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

希望对您有所帮助!