我不能給你一個完整的答案,用你的遊戲特定的代碼,但是我可以給你一些提示,讓整個事情變得更簡單,這會讓你更好地控制遊戲中的所有元素。
首先,你應該有一個「容器」爲你的精靈。你可以爲每件事物配備一個,或者更好的是,以合理的方式分組。例如,你可能有環境精靈,敵人,盟友,平視顯示器等。什麼決定你如何將你的精靈分組,基本上是他們所做的:類似行爲的精靈應該組合在一起。
你可以使用一個數組,但由於你使用的是pygame
,所以我建議使用pygame.sprite.Goup
- 這樣可以實現像.update
和.draw
這樣的方法,這將大大提高你的代碼的可理解性,從而控制遊戲。
你應該在每一幀都有一個「遊戲循環」(儘管我猜你已經這麼做了),這是所有事情發生的地方。喜歡的東西:
# This code is only intended as a generic example. It wouldn't work on it's
# own and has many placehoders, of course. But you can adapt your
# game to have this kind of structure.
# Game clock keeps frame rate steady
theClock = pygame.time.Clock()
# Sprite groups!
allsprites = pygame.sprite.Group()
environmentSprites = pygame.sprite.Group()
enemySprites = pygame.game.Group()
# Initially populate sprite groups here, e.g.
environmentSprites.add(rockSprite)
allsprites.add(rockSprite)
# ...
# Game loop
while True:
theClock.tick(max_fps)
# Add new enemies:
spawn_enemies(enemySprites, allSprites, player_score)
# Update all sprites
environmentSprites.update()
enemySprites.update()
playerSprite.update()
# ...and draw them
allSprites.draw(background)
window.blit(background)
pygame.display.flip()
這種方式可以讓你的遊戲循環短(如在沒有太多的線條,最外部化的實際工作中,以函數和方法),因此有超過發生什麼更多的控制。
實現你想要的東西現在多了,簡單得多。你有一個單獨的功能可以做到這一點,只有這一點,這意味着你可以專注於你想要敵人如何產生與player_score
相關的東西。把我的頭頂部只是一個例子:
def spawn_enemies(enemyGroup, all, player_score):
# Calculate the number of enemies you want
num_enemies = player_score/100
for i in range(num_enemies):
# Create a new enemy sprite instance and
# set it's initial x and y positions
enemy = EnemyClass()
enemy.xpos = random.randint(displayWidth, displayWidth + 100)
enemy.ypos = random.randint(0, displayHeight)
enemy.velocity = (player_score/100) * base_velocity
# Add the sprite to the groups, so it'll automatically
# be updated and blitted in the main loop!
enemyGroup.add(enemy)
all.add(enemy)
,我建議你在pygame docs and tutorials的東西像pygame.sprite.Sprite
,pygame.sprite.Group
和pygame.time.Clock
閱讀,如果你還沒有準備好。我發現他們在開發我的遊戲時非常有用。教程也給了遊戲最佳結構的一個很好的概念。
希望這會有所幫助。
如果你讓你精神振奮,就可以說列表中包含每個(x,y)的座標,你可以先移動每個靈魂然後將它們移動,讓你對自己有更多的控制權遊戲。 – Simon