(пытается сыграть в игру «Ударь крота») Всякий раз, когда я двигаю мышью, положение изображения крота, кажется, перемещается в 3-5 раз медленнее, чем когда я не двигаю мышь, и я не уверен, что происходит. вызывая это, поскольку позиция должна обновляться в зависимости от того, сколько времени прошло.
Экран для игры 500x500 пикселей, изображения 50x50 пикселей, и есть массив 10x10, который действует как карта, чтобы решить, где разрешено появляться кротам.
Код:
получить случайную позицию с карты 10x10
обновлять положение изображения крота на один пиксель каждые 30 тиков
получить положение мыши (один экран 500x500 пикселей)
получить положение блока, который должен пройти крот (на карте 10x10)
порядок, в котором изображения отображаются на экране:
карта
молоток во время движения
блок над кротом
родинка (увеличивается на 1 пиксель)
блок в исходном положении крота
молоток не двигается
проблема в том, что родинка поднимается намного медленнее, когда я двигаю мышью, и я не уверен, в чем проблема. Я также использовал операторы печати для проверки.
def moleGoUp(self):
nbPixel = 0
#returns a random position
initialPos = self.returnRandPosition()
while nbPixel < 50:
tickCounter = pygame.time.get_ticks() % 30
if tickCounter == 0:
nbPixel += 1
#gets position of mouse
mousePos = pygame.mouse.get_pos()
#blits the background block that the mole is supposed to go to
blockAbovePos = [initialPos[1] * 50, initialPos[0] * 50 - 50]
#blits the mole at position (goes up by one pixel every 20 ticks)
newPos = [initialPos[1] * 50, (initialPos[0]*50 - nbPixel)]
initPosToBlit = [initialPos[1] * 50, initialPos[0] * 50]
for event in pygame.event.get():
mousePos = pygame.mouse.get_pos()
if event.type == pygame.QUIT:
sys.exit()
#draws the map
self.drawMap()
# blits the hammer
display_surf.blit(imagePlayer, tuple(mousePos))
# counts how many ticks has passed
tickCounter = pygame.time.get_ticks() % 30
print("in event loop")
display_surf.blit(imageWall, tuple(blockAbovePos))
display_surf.blit(imageTarget, tuple(newPos))
#blits the background at the original position of the mole
display_surf.blit(imageWall,tuple(initPosToBlit))
#blits the hammer
display_surf.blit(imagePlayer, tuple(mousePos))
print("out of event loop")
#blits the background over the mole
if nbPixel == 50:
display_surf.blit(imageWall, (initialPos[1]*50, initialPos[0]*50 - nbPixel))
pygame.display.update()
вывод из печати:
in event loop
out of event loop
in event loop
out of event loop
in event loop
out of event loop
in event loop
out of event loop
in event loop
out of event loop
drawMap()
? Почему это нужно делать для каждого события?imagePlayer
также рисуется для каждого события, а затем снова вне этого цикла. Вероятно, нужно только обновитьmousePos
внутри цикла (вообще не рисуя). - person Kingsley   schedule 09.09.2019drawMap()
и нарисовать игрока только тогда, когда положение игрока действительно изменится. Событие мыши не может привести к изменению позиции. - person Kingsley   schedule 10.09.2019