2017-09-05 14 views
0

私はアクションアドベンチャーサンドボックスビデオゲームを作っています。それはゲーム "Terraria"に非常に似ています。したがって、ブロックの配置と破棄が必要です。今、ブロックを破壊するために、基本的にはクリックした場所と同じ色の四角形を追加します。しかし、私はそれを望んでいません。私はそれを望んでいないので、あなたは自由にブロックを破壊して地面に画像を描くことができます。私はゲームの世界をPhotoImagesであるタイルのグリッドに変更することに決めました。私はそれに多くの問題を抱えています。5000x5000 Python Tkinterキャンバスの画像グリッド

DirtImage = PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(61).png') 
GrassImage = PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(62).png') 
TilePlacement = (10, 5000) 
for row in range(5000): 
    c.create_image(TilePlacement, image=DirtImage, tags='Tile') 
    TilePlacement += (20, 0) 

をそして、私も知らないところグリッド内の列のさえスタートへ:ここ コード私は、に焦点を当てています!助けてください?

+0

tkinterはGUIの技術であり、グラフィックスの重いゲームを作るのに苦労します。パイゲームや(ゲーム)スタジオのようなゲーム特有のものを使うのはいかがですか? – Kos

+0

私はtkinterがゲームにとって意味があると思ったときにこのゲームが開発を開始したので、私はそれをしたくありません。不幸なことではありません。しかし、私はそれらを変更して使用することを決めれば、すべてをやり直さなければならないでしょう。 – TyTy

+1

もう一度やり直すのが良いことは、あなたがそれらを作ったときにいつもものが良いことだということです。 – Kos

答えて

1

あなたの世界は、参照しやすい構造で保存する必要があります。数が少ない配列が便利かもしれません。これは座標系としても便利です。プレイヤーの座標の浮動小数点数を整数にマッピングして、どのタイルが配置されているかを判断できるからです。

numpy配列に整数値を設定して、その整数をタイルにマップできます。このようにして、タイルと対話するときの動作は、配列に格納された値に基づいて行われます。

tile_names = {0: 'empty', 1: 'dirt', 2: 'grass'} 
tile_sprites = {0: PhotoImage(file = '/path/to/sky'), 
       1: PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(61).png'), 
       2: PhotoImage(file = '/home/tyty0427/Downloads/New Piskel(62).png')} 
world = np.zeros((5000,5000)) 

ような何か(あなたのウィンドウが500x100のタイルである場合など)あなたは世界の小さなセクションにビューポートを制限するためにnumpyの配列のスライスを使用することができます。

x_offset = 4000 
y_offset = 50 
for x in range(100): 
    for y in range(500): 
     sprite = tile_sprites[world[y_offset:y_offset+y, x_offset:x_offset+x]] 
     c.create_image((20*y, 20*x), image=tile_sprites[val], tags='Tile') 

あなたがつかむしたい場合

world[y_0:y_0+h, x_0:x_0+w] 
+0

さて、私が "world = np.zeros((5000,5000))"を実行すると、 "numpy"というモジュールには属性がありません "0"もう一度お願いしますか? XD – TyTy

+0

あなたはどんなコードを使用していますか? numpyをインポートしましたか? githubやpastebinなどでリンクすることはできますか? – RagingRoosevelt

+0

私はnumpyをインポートしました。私はあなたがそれがどのように動作しているのかを知るために言ったコードを試しています。 – TyTy

関連する問題