Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的Libtcod访问冲突错误_Python_C++_Access Violation_Roguelike_Libtcod - Fatal编程技术网

Python中的Libtcod访问冲突错误

Python中的Libtcod访问冲突错误,python,c++,access-violation,roguelike,libtcod,Python,C++,Access Violation,Roguelike,Libtcod,所以,像许多人一样,我正在学习一个关于roguelikes在python中使用libtcod的教程。 我最终运行了所有程序,但是我在一个特定的命令上遇到了一个错误,我不知道如何修复它,也不知道它到底出了什么问题。它似乎在教程中使用相同的命令,我的代码就我所知是完全相同的,我使用的是作者提供的下载链接。我的项目文件夹中有libtcodpy、dundalk12x12_gs_tc.png、libtcod.dll和SDL2.dll(复制并粘贴)。如果您需要查看.py的其余部分,请查看教程第3部分“地下

所以,像许多人一样,我正在学习一个关于roguelikes在python中使用libtcod的教程。

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

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
这是图书馆的功能

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位的,包括64位Windows10上的python和my PyCharm IDE。已尝试提前32位,找不到SDL2.dll。我自己已经修好了。现在我不知道什么是错误以及如何在教程XX中重写它。很抱歉第一次在这里发帖,并没有在另一个线程中看到确切的解决方案,但有一些其他关于SDL问题和32对64位


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

我在Windows 7 64位、Python 2.7上也遇到了同样的问题,DLL也是64位的

它似乎只有颜色代码。去除任何颜色变化,使其运行

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

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


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

我在模块化版本的代码中遇到了同样的问题,答案很简单:您没有创建一个窗口来将控制台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()处于同一级别(但堆栈跟踪不支持这一点)

额外建议:由于暗墙/亮墙变量(准确地说,应该是'lit wall',但是w/e)是在任何函数之外声明的,所以它们已经是全局变量了。将它们设置为函数内部的全局变量,而它们甚至没有在函数中声明(仅由函数使用),这是完全多余的(在libtcodpython类似roguelike的教程中,错误处理变量是最大的罪过)

希望这有帮助

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)