2016-08-31 3 views
1

私は、pygameを使って少しプラットフォームゲームを作っていて、各レベルのレベルエディタを作るのは各ブロックの座標とサイズを入力するよりも簡単だと決めました。pygame - グリッドをグリッドに合わせる


私はプロットポイントを簡単にするためのグリッドを作るために、水平方向と垂直方向のラインを使用しています。私は、ユーザーのマウスが交差点の唯一のポイントに移動するには、10pxの間隔で移動したい

def makeGrid(surface, width, height, spacing): 
    for x in range(0, width, spacing): 
     pygame.draw.line(surface, BLACK, (x,0), (x, height)) 
    for y in range(0, height, spacing): 
     pygame.draw.line(surface, BLACK, (0,y), (width, y)) 

は、ここに私のグリッド用のコードです。マウスをグリッドに押し付けるように強制してみました。

def snapToGrid(mousePos): 
    if 0 < mousePos[0] < DISPLAYWIDTH and 0 < mousePos[1] < 700: 
     pygame.mouse.set_pos(roundCoords(mousePos[0],mousePos[1])) 

(BTW、roundCoords()に最も近い10個の単位に丸められた座標を返す。)

(行われていないがまたところで、snapToGridは())(メインゲームループ内と呼ばれる)

...しかしthisが発生した場合、マウスは他の場所に移動したくありません。


これを修正する方法についてのご意見はありますか?必要があれば、グリッドコードも変更できます。 ありがとう。

P.S.これは64ビットPython 2.7のPyGameの最新バージョンを使用しています

答えて

1

まず第一に私はあなたが遠く離れていないと思います。

私の問題は、コードが各ゲームループで非常に速く実行されるため、あなたのマウスがあなたの関数によって返される位置に設定されるまでには移動する時間がないということです。

pygame.mouse.set_pos()は、スナップされた座標を変数に戻して、これを使用して、関心のある交差点を強調表示する画面にマーカーをblitするために使用します(ここでは円を使用しますが、マウスの画像をblit;))。そしてpygame.mouse.set_visible(False)を使用して、実際にマウスを隠す:

def snapToGrid(mousePos): 
    if 0 < mousePos[0] < DISPLAYWIDTH and 0 < mousePos[1] < 700: 
     return roundCoords(mousePos[0],mousePos[1]) 

snap_coord = snapToGrid(mousePos)# save snapped coordinates to variable 

pygame.draw.circle(Surface, color, snap_coord, radius, 0)# define the remaining arguments, Surface, color, radius as you need 

pygame.mouse.set_visible(False)# hide the actual mouse pointer 

私はそれがあなたのために働く願っています!

+0

私はこれが大好きです、ありがとう。問題は、前のサークルが消えないことだけです。 –

+0

私はあなたにとってどれほど実現可能かはわかりませんが、私は通常、各フレームで背景を再調整し、その上にあるすべてを再びブリットします。あなたの場合、私は1)白い背景をblit、2)グリッドをblit、3)blit、すべての単一のフレームでblitを行います。 – Sorade

+0

私がやったのは、背景と同じ色の別のサークルの上に重ねてしまったので、ドットはドットの代わりにグリッドの中にあるように見えます。 –

関連する問題