如何正确设置我的游戏坐标

时间:2016-11-22 15:33:48

标签: python python-2.7 pygame

如何使红色块出现在灰色和绿色块之间。

enter image description here

在上图中我将驴的矩形x位置改为160 然后只有我能够看到红色块,如果不是意味着我将隐藏在灰色块下。

这是我的代码

class Road(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((200, 500))
        self.image.fill(grey)
        self.rect = self.image.get_rect()
        self.rect.centerx = width/2
        #self.rect.left = width-200
        #print self.rect.left
        self.speedy = 5
    def update(self):
        self.rect.y += self.speedy
        if self.rect.y > 0:
            self.rect.y = 0

class Donkey(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((100, 100))
        self.image.fill(red)
        self.rect = self.image.get_rect()
        self.rect.x = 200
        print 'x:',self.rect.x
        self.rect.y = -54
        print 'y:',self.rect.y
        self.speedy = random.randint(8,10)
    def update(self):
        self.choice = (200, 300)
        self.rect.y += self.speedy
        if self.rect.top > height:
            self.rect.x = random.choice(self.choice)
            print 'x:', self.rect.x
            self.rect.y = random.randrange(-100, -40)
            print 'y', self.rect.y
            self.speedy = random.randint(8,10)

class Race_car(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((100, 100))
        self.image.fill(green)
        self.rect = self.image.get_rect()
        self.rect.x = 200
        self.rect.bottom = height
        self.speedy = -0.1
    def update(self):
        #self.speedx = 0
        self.rect.y += self.speedy
        keypressed = pygame.key.get_pressed()
        if keypressed[pygame.K_RIGHT]:
            self.rect.x = 300
        elif keypressed[pygame.K_LEFT]:
            self.rect.x = 200


#Group, object for game_hearth
game_hearth = pygame.sprite.Group()
road = Road()
game_hearth.add(road)

#Group, object for donkey
donkey = Donkey()
donkeys = pygame.sprite.Group()
game_hearth.add(donkey)
donkeys.add(donkey)

#Group, object for racecar
racecar = Race_car()
racecars = pygame.sprite.Group()
game_hearth.add(racecar)
racecars.add(racecar)

当我在评论Race_car类后运行我的代码时,红色块工作正常,请参阅

enter image description here

所以我想在灰色道路上方显示红色和绿色块。所以怎么做而不评论我的程序中的任何类。我知道它的一些协调错误,但我不知道在哪里改变它。

1 个答案:

答案 0 :(得分:1)

来自Pygame docs

  

本集团并未以任何顺序保留精灵,因此抽奖订单为   任意的。

您应该切换到pygame.sprite.OrderedUpdates

  

此类派生自pygame.sprite.RenderUpdates()。它坚持   Sprite被添加到Group进行渲染的顺序。   这使得从组中添加和删除Sprite的速度稍慢   比常规团体。

#Group, object for game_hearth
game_hearth = pygame.sprite.OrderedUpdates()

road = Road()
game_hearth.add(road)

#Group, object for donkey
donkey = Donkey()
donkeys = pygame.sprite.OrderedUpdates()
game_hearth.add(donkey)
donkeys.add(donkey)

#Group, object for racecar
racecar = Race_car()
racecars = pygame.sprite.OrderedUpdates()
game_hearth.add(racecar)
racecars.add(racecar)