由于我的关卡滚动,我无法更新鼠标位置和检查实体冲突(鼠标和实体之间)。我已经使用了这个问题的相机功能: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)