zoukankan      html  css  js  c++  java
  • pygame-KidsCanCode系列jumpy-part5-屏幕滚动

    上回继续,方块不断向上跳动的过程中,从视觉上看,整个背景屏幕应该不断向下滚动,而且上方要不断出现新档板(否则就没办法继续向上跳了),这节我们将来实现这种效果,感觉好象很复杂,但实现起来其实很简单,只要对main.py略做调整:

    Game类的update方法改成下面这样

        def update(self):
            self.all_sprites.update()
            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.top += abs(self.player.vel.y)
                    if plat.rect.top > HEIGHT:
                        # 同时为了提高性能,下移到屏幕之外的档板,清除掉(否则的话,仍然一直参与碰撞检测及渲染),游戏会越来越慢
                        plat.kill()
    
            # 由于下移到屏幕之外的档板被干掉,所以才继续源源不断的在上方随机补充新档板
            while len(self.platforms) <= 5:
                width = random.randint(50, 100)
                p = Platform(random.randint(0, WIDTH - width),
                             random.randint(-70, -30),
                             width, 10)
                self.platforms.add(p)
                self.all_sprites.add(p)
    

    要点:

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

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

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

  • 相关阅读:
    免费的视频、音频转文本
    Errors are values
    Codebase Refactoring (with help from Go)
    Golang中的坑二
    Cleaner, more elegant, and wrong(msdn blog)
    Cleaner, more elegant, and wrong(翻译)
    Cleaner, more elegant, and harder to recognize(翻译)
    vue控制父子组件渲染顺序
    computed 和 watch 组合使用,监听数据全局数据状态
    webstorm破解方法
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/ygame-kidscancode-part5-screen-scroll.html
Copyright © 2011-2022 走看看