Python中的Libtcod访问冲突错误
Libtcod access violation error in Python
所以,像许多人一样,我正在学习在python中使用libtcod的roguelike教程。http://www.roguebasin.com/index.php?title=Complete_Roguelike_Tutorial _using_python % 2 blibtcod, _part_3
我终于得到了一切运行,但我得到一个特定的命令错误,我不知道如何修复它或什么是错的,它到底。它似乎是在教程中使用相同的命令和我的代码是字面上相同的,据我所知,我正在使用作者提供的下载链接。我有libtcocopy, dundalk12x12_gs_tc.png, libtcod.dll和SDL2.dll都在我的项目文件夹中(复制并粘贴)。如果您需要查看.py的其余部分,那么只需查看教程第3部分生成地下城的代码。和我的一样,我唯一看不到的是他的libtcocopy文件夹,但这是他的下载链接。错误是:
C:Python27python.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:UsersChrisPycharmProjectsuntitledlibtcodpy__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
问题是在renderall函数调用libtcod。console_set_char_background(con, x, y, color_dark_wall, libtcode . bkgnd_set)
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)
这是标准库函数
def console_set_char_background(con, x, y, col, flag=BKGND_SET):
_lib.TCOD_console_set_char_background(con, x, y, col, flag)
libtcocopy在我的项目文件夹中,与libtcod.dll和SDL2.dll一起。它们都是64位的,包括python和我在64位windows 10上的PyCharm IDE。之前尝试过32位,找不到SDL2.dll。我已经自己搞定了。现在我只是不知道什么是错误的,以及如何重写它在教程XX。很抱歉第一次在这里发帖,没有在另一个帖子中看到确切的解决方案,但有一些关于SDL问题和32位与64位的问题。
请给我找一个关于如何在python中正确设置libtcocopy的详细的,无智的youtube视频,或者让我知道我搞砸了什么。
我在Windows 7 64位上遇到同样的问题,Python 2.7的dll也是64位的。
似乎只有颜色代码。删除任何颜色变化允许它运行。
给出的错误信息(例如0x0000000000640000)只是颜色的十六进制代码,因此错误信息代码根据所使用的颜色而变化。
我在init.py脚本中挖掘了libtcod的代码,它加载了dll,颜色代码使用了dll,所以错误可能在libtcode .dll甚至sdl2.dll中,因为sdl2.dll做了所有的渲染。
遗憾的是,我对python的了解不是很好,我才刚刚开始,但如果有人能给我和克里斯一个答案,那就太好了。
我在我的模块化版本的代码中遇到了同样的问题,答案很简单:您没有创建一个窗口来blit控制台。确保首先调用了创建窗口的代码。我把它包装在一个单独的函数中:
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()处于同一级别(但您的堆栈跟踪不支持这一点)。
一点额外的建议:由于dark wall/light wall变量(应该是'lit wall',准确地说,但是w/e)是在任何函数之外声明的,它们已经是全局的。将它们设置为函数内部的全局变量,而它们甚至没有在其中声明(仅由函数使用)是完全多余的(滥用变量是libtcod python roguelike教程中最大的罪恶)。
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 使用 EvtSetChannelConfigProperty() 函数时出现访问冲突错误
- 引发异常:读取访问冲突.**此**0x40错误
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- cv::resize() 失败并出现访问冲突错误(由 NULL> 处的 <struct 引起)
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 错误 : 异常 : 引发未处理的异常: 读取访问冲突.0xDDDDDDDD临时温度
- 读取访问冲突. _Mycont 在 C++ 中将 udp 数据放入向量时出现 nullptr 错误
- 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误
- 遵循官方 Direct2D 示例,但出现访问冲突错误
- Windows错误:异常:使用从C++到Python的ctypes创建DLL时出现访问冲突或Windows错误193
- C++访问冲突读取位置错误
- Eigen SparseLU解决错误读取访问冲突,这>m_sup_to_col被0x111011101110112
- C++ 抛出读取访问冲突错误,但我不确定为什么。平铺滑块益智游戏
- 为什么我的顶点缓冲区对象出现访问冲突错误?
- 尝试创建结构对象,在位置0x3FE00000中创建访问冲突写入错误
- 销毁 Box2D 主体 - 读取访问冲突错误
- C++数组错误:访问冲突读取位置0xC0000005
- C++LinkedList错误:访问冲突错误
- 错误访问冲突写入位置0x00229C20.尝试在控制台中输入字符串时