私は、リファクタリングしようとしているpygameアプリケーションのWASD
の方向キーのメインループに次の重複コードを持っています。最善の方法を見つけようと努力しています。私は、PLAYERクラスp
GAMEクラスg
とWORLDクラスw
のインスタンスを作成しました。Python pygameリファクタリング...メソッドにコードをラップする
と呼ばれるGAME
クラスのメソッドを理想的に作りたいと思います。私が反対している主な問題は、 - =または+ =でなければならないためです。別のWASDキーのif文全体を記述することなく、それを実行するのは難しいです。より良い方法が必要です。
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
おいおいへのアクセスを取得する
updatePositions(x, y, p, w)
が必要な場合がありますその恐ろしい繰り返しコード – zzoopヒント: 'a - = b'の代わりに' a + = -b'を使うことができるので、 'a + = x'で一つの関数を作成し、' x = x = -b' – furas