У меня есть следующий дублирующий код в mainloop для клавиш направления, WASD
в приложении pygame, которое я пытаюсь повторить. Мне сложно найти лучший способ. У меня есть экземпляры, созданные из класса PLAYER p
класса GAME g
и класса WORLD w
.Python pygame рефакторинг ... обертывание кода в метод
В идеале я хочу сделать способ в классе GAME
, который называется updatePositions
. Основная проблема, с которой я столкнулся, состоит в том, что я должен - = или + =, и мне трудно это сделать, не записывая целую инструкцию if для отдельного ключа WASD. Там должен быть лучший путь.
if event.key == pygame.K_w:
p.fov.y -= g.pixelUpdate
for ent in w.entityList:
ent.rect.y += g.pixelUpdate
ent.collisionRect.y += g.pixelUpdate
for ent in w.ents_in_fov:
if p.collision(ent):
p.collided = True
for ent in w.entityList:
ent.rect.y -= g.pixelUpdate
ent.collisionRect.y -= g.pixelUpdate
p.fov.y += g.pixelUpdate
elif event.key == pygame.K_d:
p.fov.x += g.pixelUpdate
for ent in w.entityList:
ent.rect.x -= g.pixelUpdate
ent.collisionRect.x -= g.pixelUpdate
for ent in w.ents_in_fov:
if p.collision(ent):
p.collided = True
for ent in w.entityList:
ent.rect.x += g.pixelUpdate
ent.collisionRect.x += g.pixelUpdate
p.fov.x -= g.pixelUpdate
elif event.key == pygame.K_s:
p.fov.y += g.pixelUpdate
for ent in w.entityList:
ent.rect.y -= g.pixelUpdate
ent.collisionRect.y -= g.pixelUpdate
for ent in w.ents_in_fov:
if p.collision(ent):
p.collided = True
for ent in w.entityList:
ent.rect.y += g.pixelUpdate
ent.collisionRect.y += g.pixelUpdate
p.fov.y -= g.pixelUpdate
elif event.key == pygame.K_a:
p.fov.x -= g.pixelUpdate
for ent in w.entityList:
ent.rect.x += g.pixelUpdate
ent.collisionRect.x += g.pixelUpdate
for ent in w.ents_in_fov:
if p.collision(ent):
p.collided = True
for ent in w.entityList:
ent.rect.x -= g.pixelUpdate
ent.collisionRect.x -= g.pixelUpdate
p.fov.x += g.pixelUpdate
C'mon помочь нуб, смотрите на все этот ужасный повторяющийся код – zzoop
hint: вместо 'a - = b' вы можете использовать' a + = -b', чтобы вы могли создать одну функцию с помощью 'a + = x' и выполнить ее с помощью' x = b' или с ' x = -b' – furas