• 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块,及时在上方随机位置,补充一块。

  • 相关阅读:
    iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期
    iOS开发UI篇—UIWindow简单介绍
    第三方框架-纯代码布局:Masonry的简单使用
    (转)Foundation-性能优化之NSDateFormatter
    Foundation框架—时间输出格式NSDateFormatter
    物联网MQTT协议分析和开源Mosquitto部署验证
    玩转物联网之MQTT
    Android实现推送方式解决方案
    互联网推送服务原理:长连接+心跳机制(MQTT协议)
    将MySQL数据库转移到SqlServer2008数据库
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/ygame-kidscancode-part5-screen-scroll.html
Copyright © 2020-2023  润新知