У меня возникли проблемы с обновлением положения мыши и проверкой сущностей (между мышью и объектом) из-за моей прокрутки уровня. Я использовал функцию камеры от этого вопроса: How to add scrolling to platformer in pygameПолучение мира Координаты с мышью в 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
Everytime Я нажимаю на экране, и передать его через тест столкновения, он всегда использует точку на экране, однако мне нужна точка на карте (если это имеет смысл). Например, размер экрана равен 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)
Я добавил код для фактического ответа и там, кажется, вопрос, где смещение начинает уменьшаться по мере того, как оно проходит мимо высоты экрана или ширины – ReallyGoodPie
Если вы вставляете полный код в pastebin (чтобы я мог его запустить), я могу посмотреть. – ninMonkey
http://pastebin.com/Sx1KKBU2 это мой полный код. – ReallyGoodPie