レベルのスクロールが原因で、マウスの位置を更新したり、(マウスとエンティティ間の) エンティティの衝突をチェックしたりするのに問題があります。この質問のカメラ機能を使用しました: How to add scrolling to platformer in pygame
次のように、マウスでカメラ機能を使用しようとしました。
def update(self, target, target_type, mouse):
if target_type != "mouse":
self.state = self.camera_func(self.state, target.rect)
else:
new_pos = self.camera_func(mouse.rect, target.rect)
mouse.update((new_pos[0], new_pos[1]))
print mouse.rect
しかし、mouse.rect は一貫して に設定されてい608, 0
ます。誰かがこれで私を助けることができますか? マウスクラスは次のようになります。
class Mouse(Entity):
def __init__(self, pos):
Entity.__init__(self)
self.x = pos[0]
self.y = pos[1]
self.rect = Rect(pos[0], pos[1], 32, 32)
def update(self, pos, check=False):
self.x = pos[0]
self.y = pos[1]
self.rect.top = pos[1]
self.rect.left = pos[0]
if check:
print "Mouse Pos: %s" %(self.rect)
print self.x, self.y
画面をクリックして衝突テストを通過するたびに、常に画面上のポイントが使用されますが、マップ上のポイントが必要です (それが理にかなっている場合)。たとえば、画面サイズは640x640
. 左上隅をクリックすると、マウスの位置は常になります0,0
が、実際のマップ座標は320,180
画面の上隅にある場合があります。カメラとマウスですべてを更新しようとしましたが、実際の結果はcamera.update
マウスに関数を適用したときだけですが、これによりプレーヤーがスクロールの原因になるのを止めるので、mouse.rect
この関数で更新しようとしました.
試みたコード:
mouse_pos = pygame.mouse.get_pos()
mouse_offset = camera.apply(mouse)
pos = mouse_pos[0] + mouse_offset.left, mouse_pos[1] + mouse_offset.top
mouse.update(mouse_pos)
if hit_block:
print "Mouse Screen Pos: ", mouse_pos
print "Mouse Pos With Offset: ", pos
print "Mouse Offset: ", mouse_offset
replace_block(pos)