マップチップの描画
今回は、マップチップを描けるようにしてみます。マウスの左クリックでマップチップを描画します。
の上に
を描画して陸地を作ってみます。
マップチップの描画
マウスでクリックした場所のマップチップを
に変更しているのはMapのupdate()です。
def update(self, offset): offsetx, offsety = offset mouse_pressed = pygame.mouse.get_pressed() if mouse_pressed[0]: # 左クリック(マップチップ描画) # マウスが返すのはローカル座標 px, py = pygame.mouse.get_pos() # 全体マップ上での座標はoffsetを足せばよい # GSで割るのはピクセルをマスに直すため selectx = (px + offsetx) / GS selecty = (py + offsety) / GS # マップ範囲外だったら無視 if selectx < 0 or selecty < 0 or selectx > self.col-1 \ or selecty > self.row-1: return # マップを更新 self.map[selecty][selectx] = 2 # 2は草原
pygame.mouse.get_pressed()を使って左クリックされたか調べています。左クリックされたらマウスの座標をpygame.mouse.get_pos()で取得します。ここらへんはマウスイベント(2008/5/6)で解説してあります。問題は、マウスでクリックした位置がマップ上のどの場所かを求める方法です。下図を見てください。
黒い四角形がマップ全体を表し、赤い四角形が画面に表示されている範囲を表しています。mouseと書いてある矢印がマウスカーソルです。マウスで画面上をクリックしたときget_pos()で得られる座標は (px, py) です。つまり、赤い四角形の左上の座標を (0,0) としたときの座標です。これをマップ全体での座標に変換するには (offsetx, offsety) を足してやる必要があります。つまり、(px+offsetx, py+offsety) とすると黒い四角形の左上の座標を (0,0) としたときのマウスでクリックした場所の座標が得られます。これはピクセル単位の座標なので1マスのサイズGS=32で割ってやるとマス単位になります。スクリプトではこのマスがマップ範囲外だったら無視し、マップ範囲内ならself.mapを
で更新しています。
マウスでマップチップを描けるようになりました。今回は草原しか描けませんでしたが、次回はさまざまなマップチップが使えるように拡張します。