python游戏之愤怒的小鸟(一)

python 专栏收录该内容
1 篇文章 0 订阅

题记:上一次用python写游戏还是一年前初学pyhon(虽然到现在也没完全精通),对pygame有简单的应用和了解(当时写的是经典的飞机大战,如果有需要的童鞋可以评论),这一次也是第一次用到物理引擎pymunk,在完善代码的同时记录下各种问题的学习过程。

 

第一步:先pip一个pymunk

由于自己有pygame1.9.4,于是先装了一个pymunk:

 pip install pymunk

第二步:pymunk是什么?

pymunk是一个物理引擎包,2D游戏都会涉及,因为要用到速度,旋转,碰撞等等。而作为一名物理并不好的程序员来说,有这么一个包帮我搞定了这些事情还是很幸运的,当我们需要的时候就把这些模块拿来用。

(具体的内容目前还没整清楚,这里标记一下,未来有机会再深入,这里只对所用到的功能进行了解)

在使用之前我们明确几个概念:

刚体:就是一个没有形状的物体,但是所有的物理性质:什么速度啊,碰撞什么的他都可以。

碰撞形状:通过将形状附加到实体,你可以定义一个实体的形状。你可以将多个形状附加到单个实体上来定义一个复杂的形状,也可以不附加任何形状。

约束 && 关节:你可以在两个实体之间附加关节以约束它们的行为。比如在两个实体间保持一个固定的距离。


空间 : 空间是pymunk中基本的模拟单元。你可以添加实体,形状和关节到空间,然后整体更新空间。pymunk会控制空间中所有的实体,形状和关节如何相互作用。
 

 

第三:说再多都没用,我们简单用一下这个包:

https://blog.csdn.net/qq_37963615/article/details/99327611这个博主写的很棒。大家可以看一下

小编现在还没达到这个高度,贴一个学到的pygame+pymunk的简单模拟:

import sys
import pygame
from pygame.locals import *
import pymunk

def  main():
    pygame.init()                                                          #pygame初始化
    screen = pygame.display.set_mode((600,600))                            #新建屏幕对象,是最先被渲染的面
    pygame.display.set_caption("这是我第一个python游戏开发")                 #显示标题
    clock=pygame.time.Clock()                                              #新建时钟对象

    space = pymunk.Space()
    #空间是模拟的基本单位。把刚体、形状和关节加进去,然后随着时间的推移把它们一起向前推进
    space.gravity = (0.0,-900.0)                                           #设定重力参数

    while True:
        for event in pygame.event.get():                                   #遍历事件
            if event.type== QUIT:
                sys.exit(0)
            elif event.type== KEWDOWN and event.key==K_ESCAPE:             #按键测试
                sys.exit(0)

        screen.fill((255,255,255))                                         #填充为白色

        space.step(1/50,0)
#使用固定时间步长,通常一个数量级更少的迭代来解决冲突。
#调用步骤10次,dt是0。1,调用100次,dt是0。01,这是不一样的
# 即使最终结果是模拟向前移动了100个单位。使用更小的dt执行多个调用可以创建更稳定和准确的模拟
# 因此,有时在step调用周围添加一个for循环是有意义的
        pygame.display.flip()            #刷新整个屏幕
        clock.tick(50)                   #设定fps

    if __name__=='__main__':
        sys.exit(main())

未完待续。。。

  • 8
    点赞
  • 0
    评论
  • 25
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值