【问题标题】:How to set up co-ordinates correctly for my game如何为我的游戏正确设置坐标
【发布时间】:2016-11-22 15:33:48
【问题描述】:

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

在上图中我把我的驴的矩形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 类后运行我的代码时,红色块工作正常,请参阅

所以问题是我想在灰色道路上方显示红色和绿色块。那么如何在我的程序中不评论任何课程的情况下做到这一点。我知道它的一些坐标错误,但我不知道在哪里改变它。

【问题讨论】:

标签: python python-2.7 pygame


【解决方案1】:

来自Pygame docs

组不按任何顺序保存精灵,所以绘制顺序是 随意。

你应该切换到pygame.sprite.OrderedUpdates

这个类派生自 pygame.sprite.RenderUpdates()。它保持 将 Sprite 添加到 Group 以进行渲染的顺序。 这使得从组中添加和删除 Sprites 有点慢 比常规组。

#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)

【讨论】:

    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2017-02-15
    相关资源
    最近更新 更多