首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的Libtcod访问冲突错误

Python中的Libtcod访问冲突错误
EN

Stack Overflow用户
提问于 2016-11-04 17:22:56
回答 2查看 236关注 0票数 1

所以,像许多人一样,我正在学习一篇关于在python中使用libtcod的流氓的教程。http://www.roguebasin.com/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod,_part_3

我终于让所有的东西都运行了,但是我在一个特定的命令上得到了一个错误,我不知道如何修复它,或者它到底出了什么问题。它似乎在教程中使用相同的命令工作,并且我的代码与我所能说的完全相同,并且我使用的是作者提供的下载链接。我的项目文件夹中有libtcodpy、dundalk12x12_gs_tc.png、libtcod.dll和SDL2.dll (复制并粘贴)。如果您需要了解.py的其余部分,那么只需查看教程第3部分“地下城生成”中的代码。它和我的是一样的,我唯一看不到的是他的libtcodpy文件夹,但这是他的下载链接。错误是:

代码语言:javascript
复制
C:\Python27\python.exe C:/Users/Chris/PycharmProjects/untitled/KingKong.py
Traceback (most recent call last):
  File "C:/Users/Chris/PycharmProjects/untitled/KingKong.py", line 233, in     <module>
render_all()
  File "C:/Users/Chris/PycharmProjects/untitled/KingKong.py", line 172, in render_all
libtcod.console_set_char_background(con, x, y, color_dark_wall, libtcod.BKGND_SET )
  File "C:\Users\Chris\PycharmProjects\untitled\libtcodpy\__init__.py", line 822, in console_set_char_background
_lib.TCOD_console_set_char_background(con, x, y, col, flag)
WindowsError: exception: access violation reading 0x0000000000640000
24 bits font.
key color : 0 0 0
24bits greyscale font. converting to 32bits

Process finished with exit code 1

该问题存在于调用libtcod.console_set_char_background(con,x,y,color_dark_wall,libtcod.BKGND_SET)时的renderall函数中

代码语言:javascript
复制
def render_all():
global color_dark_wall, color_light_wall
global color_dark_ground, color_light_ground

# Go through all tiles, and set their background color
for y in range(MAP_HEIGHT):
    for x in range(MAP_WIDTH):
        wall = map[x][y].block_sight
        if wall:
            libtcod.console_set_char_background(con, x, y, color_dark_wall, libtcod.BKGND_SET )
        else:
            libtcod.console_set_char_background(con, x, y, color_dark_ground, libtcod.BKGND_SET )

# Draw all objects in the list
for Object in objects:
    Object.draw()

# Blit the contents of "con" to the root console
libtcod.console_blit(con, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, 0)

这是库函数

代码语言:javascript
复制
def console_set_char_background(con, x, y, col, flag=BKGND_SET):
    _lib.TCOD_console_set_char_background(con, x, y, col, flag)

libtcodpy以及libtcod.dll和SDL2.dll都在我的项目文件夹中。都是64位的,包括python和我在64位Windows10上的PyCharm集成开发环境。之前尝试了32位,找不到SDL2.dll。虽然我自己已经解决了这个问题。现在我不知道是什么出了错,以及如何在教程XX中重写它。很抱歉第一次在这里发帖,没有在另一个线程中看到确切的解决方案,还有其他一些关于SDL问题和32位与64位的问题。

请给我找一个详细的、防延迟的youtube视频,告诉我如何在python中正确设置libtcodpy,或者让我知道我搞砸了什么。

EN

回答 2

Stack Overflow用户

发布于 2016-11-18 17:13:19

我在64位的Windows7上也遇到了同样的问题,Python 2.7的dll也是64位的。

它似乎只与颜色代码有关。删除任何颜色更改允许它运行。

给出的错误消息(例如0x0000000000640000)只是颜色的十六进制代码,因此错误消息代码根据使用的颜色而有所不同。

我深入研究了初始化.py脚本中libtcod的代码,它加载了dll,而颜色代码使用了dll,所以错误可能出现在libtcod.dll甚至sdl2.dll中,因为sdl2.dll执行所有的渲染。

遗憾的是,我对python的了解并不是很多,我刚刚开始学习,但如果有人能给我和Chris一个答案,那就太好了。

票数 1
EN

Stack Overflow用户

发布于 2017-02-25 21:09:31

我在我的模块化版本的代码中遇到了同样的问题,答案很简单:您没有创建一个窗口来将控制台blit到。确保首先调用用于创建窗口的代码。我将其封装在一个单独的函数中:

代码语言:javascript
复制
def create_window():
    # set custom font
    libtcod.console_set_custom_font("arial10x10.png", libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)
    #initialize the main window
    libtcod.console_init_root(SCREEN_W, 
                                SCREEN_H,
                                WINDOW_TITLE + " ver.: " + VERSION,
                                fullscreen = False)
    #limit fps
    libtcod.sys_set_fps(LIMIT_FPS)

我还强烈建议您检查缩进,因为在您粘贴到这里的代码中,所有内容都与render_all()处于同一级别(但您的堆栈跟踪不支持这一点)。

一点额外的建议:由于暗墙/亮墙变量(准确地说,应该是‘light wall',但w/e)是在任何函数之外声明的,它们已经是全局变量。在函数内部将它们设置为全局变量,而它们甚至没有在函数中声明(仅供函数使用)是完全多余的(滥用变量是libtcod python类流氓教程中的最大罪过)。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40419042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档