2014-02-21 44 views
0

我有一款遊戲,我正在用pygame庫製作Python。其中,我有兩個班級,導致屏幕出現的主類,圖像等等,以及創建和呈現我的怪物精靈的怪物類,它們是:如何在Pygame中連續移動圖像

主類:

import pygame, sys, random 
from monster import * 

pygame.init() 

class Main: 
    clock = pygame.time.Clock() 

    screenSize = (500,500) 
    background = pygame.image.load("C:/Users/Nathan/PycharmProjects/Monsters II A Dark Descent/images/background.jpg") 

    screen = pygame.display.set_mode(screenSize) 
    pygame.display.set_caption("MONSTERS!") 

    monsters = pygame.sprite.Group() 

    counter = 0 

    x = 450 
    while counter < 5: 
      y = random.randint(50,450) 
      monster = Monster(x,y) 
      monsters.add(monster) 
      counter = counter + 1 

    while True: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       sys.exit() 

     screen.blit(background,(0,0)) 

     for monster in monsters: 
      monster.render(screen) 

     x=x-1 #This doesn't move the sprites 

     clock.tick(60) 

     pygame.display.flip() 


Main() 

怪物等級:

import random, pygame 

class Monster(pygame.sprite.Sprite): 

    def __init__(self, x, y): 
     pygame.sprite.Sprite.__init__(self) 
     self.x = x 
     self.y = y 
     self.image = pygame.image.load("C:\Users\Nathan\PycharmProjects\Monsters II A Dark Descent\images\monster.png") 

    def render(self, screen): 
     screen.blit(self.image, (self.x, self.y)) 

我想要的怪物,直到他們打在屏幕的另一端通過一個隨機x值繼續向左移動。在那之後,我希望他們能夠傳送回到他們的出發點並重新執行。在主類中,我嘗試在主循環中添加「x = x + 1」,以至少讓它們移動一個,但它不起作用。我也試着用「x = x + 1」做出一個不起作用的循環。如果你需要更多細節,請告訴我。感謝您的時間。

回答

3

您正在修改x變量,該變量僅用於創建對象。要修改怪物對象的成員,要改變他們是這樣的:

monster.x += 1 

我建議創建一個新的功能,將移動精靈,並重置回位置。沿着這些線:

def move(self): 
    if(self.x > 500): 
     self.x = 0 
    self.x += 1 
+0

感謝您的答案!它確實有幫助。如果沒有太多的麻煩,你知道我怎麼能讓怪物一次產卵一次,在它們產卵之間有一段時間的延遲?謝謝。 – user163505

+1

@ user163505使用pygame.Clock。時鐘的滴答方法返回自上次調用以來的毫秒數。如果你在一個循環中調用它,並存儲ms的總和,你將能夠添加一個新的怪物到列表中,並重置時鐘。 –

+0

謝謝!我會檢查你的答案。 – user163505

0

在你的主循環中,你需要更新怪物中的x值。你可以做到這一點在越過你的怪物循環:

for monster in monsters: 
    monster.x = monster.x-1 
    monster.render(screen) 

通知,monster.x說,在這個特定的怪物改變x值。如果你只是做x,python不知道你在討論怪物內部的x值。