美文网首页
通过游戏学Python系列之小兔要上天---手把手教你使用Pyg

通过游戏学Python系列之小兔要上天---手把手教你使用Pyg

作者: __豆约翰__ | 来源:发表于2020-12-23 20:34 被阅读0次

    本节最终效果


    image

    方块不断向上跳动的过程中,从视觉上看,整个背景屏幕应该不断向下滚动,而且上方要不断出现新档板(否则就没办法继续向上跳了)

    修改update方法(main.py)

        def update(self):
            # Game Loop - Update
            self.all_sprites.update()
            # check if player hits a platform - only if falling
            if self.player.vel.y > 0:
                hits = pg.sprite.spritecollide(self.player, self.platforms, False)
                if hits:
                    self.player.pos.y = hits[0].rect.top
                    self.player.vel.y = 0
            # 如果方块的高度<游戏屏幕高度的1/4,则所有档板下移(视觉上表现为整个屏幕向下滚动)
            if self.player.rect.top <= HEIGHT / 4:
                self.player.pos.y += abs(self.player.vel.y)
                for plat in self.platforms:
                    plat.rect.y += abs(self.player.vel.y)
                    if plat.rect.top >= HEIGHT:
                        # 同时为了提高性能,下移到屏幕之外的档板,清除掉(否则的话,仍然一直参与碰撞检测及渲染),游戏会越来越慢
                        plat.kill()
    
            # 由于下移到屏幕之外的档板被干掉,所以才继续源源不断的在上方随机补充新档板
            while len(self.platforms) < 6:
                width = random.randrange(50, 100)
                p = Platform(random.randrange(0, WIDTH - width),
                             random.randrange(-75, -30),
                             width, 20)
                self.platforms.add(p)
                self.all_sprites.add(p)
    

    要点:

    1. 如果方块跳到了屏幕的上半部分的一半(即:1/4处), 则所有的sprite实例(即:方块自身及所有档板)都向下移动,移动的位置跟方块的垂直速度相关(即:速度越大,屏幕向下滚得越快) - tips:因为方块向上跳时,速度vel.y是负值,所以代码中要用abs函数,转换成正值。

    2. 如果档板掉到屏幕下边缘之外(即看不见了),要及时清理,否则会影响游戏性能

    3. 检测self.platforms容器里的档板数,如果不足5块,及时在上方随机位置,补充一块。

    相关文章

      网友评论

          本文标题:通过游戏学Python系列之小兔要上天---手把手教你使用Pyg

          本文链接:https://www.haomeiwen.com/subject/wabiwktx.html