2016-11-04 14 views
1

多くの人と同様に、私はPythonでlibtcodを使ってroguelikesに関するチュートリアルを行っています。 http://www.roguebasin.com/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod,_part_3Pythonの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 

それはこれが libtcod.console_set_char_background(CON、X、Y、color_dark_wall、libtcod.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) 

を呼び出しているときに問題がrenderall関数でありますライブラリ関数

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ビットのWindowsのPyCharm IDEを含みます。32ビット前に試してみると、SDL2.dllは見つかりません。すでに自分のものを修正しました。今私はエラーの内容とチュートリアルXXの中でそれを書き直す方法を理解できません。申し訳ありませんが、ここに投稿して、別のスレッドで正確な解決策を見ていないと、SDLの問題と32対64ビットに関するいくつかの問題がありました。

pythonでlibtcodpyを正しく設定する方法については、完全に詳細な難解なyoutubeビデオを見つけてください。あるいは、私が何をしゃべっているのかを教えてください。

答えて

1

私は同じ問題をWindows 7の64ビット、Python 2.7で取得します.dllも64ビットです。

カラーコードが付いているようです。任意の色の変更を削除して実行できるようにします。

与えられたエラーメッセージ(たとえば0x0000000000640000)は色の16進コードにすぎないので、エラーメッセージコードは使用される色によって異なります。

私はそれがエラーがlibtcod.dllまたはSDL2としても、sdl2.dllになることができるようにDLLとカラーコードは、DLLを使用してロードのinitの.pyスクリプトでlibtcodためのコードを掘りに行きました.dllはすべてのレンダリングを行います。

悲しいことに、私の知り合いは、私がちょうど始めたばかりのpythonではそれほど素晴らしいことではありませんが、誰かが私とクリスの答えを持っているなら、それはすばらしいでしょう。

0

モジュール式のコードで同じ問題が発生しました。答えは簡単でした。コンソールを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()(と同じレベルにあるが、あなたのスタックトレースにはありませんそれをサポートする)。

補足アドバイス:暗い壁/明るい壁の変数(正確にはw/eでなければなりません)は、関数の外で宣言されているので、すでにグローバルになっています。それらが関数内でグローバルとして設定されている間に(関数によってのみ使用される)完全に冗長です(変数の濫用はlibtcod python roguelikeチュートリアルの最大の罪です)。

これが役に立ちます。