pygame精灵碰撞检测绘制帧问题

这个游戏叫jumpy大致玩法就是模拟超级玛丽一样,可以不停在各个档板上跳动同时受到重力的作用,会向下掉如果落下时,没有站在档板上就挂了。

这节我们加入偅力因素,继续改造sprites.py

# 初始化时垂直方向加入重力加速度 # 碰撞后,方块底部要停在档板上所以要改成rect.midbottom

新建了一个Platform类,用来模拟档板其實就是一个绿色的长矩形条;其次Player在update中,acc加速度初始化时引入了垂直方向的加速度,其值仍然在settings.py中定义:

# 碰撞后将player 垂直方向的速度归0(否则物体还是会继续向下掉)

这里使用到了spritecollide这个超级好用的方法,可以很轻松的搞定碰撞检测

如果仔细观察的话,会发现一个小问题方塊掉到档板上后,一直在上下轻微晃动从Vel的调试输出值,也能看到y方向的速度一直在0.5和0之间切换。原因在于:Player的update()方法初始化时,给叻acc在y方向0.5的加速度(具体值在settings.py中通过PLAYER_GRAVITY定义),

# 初始化时垂直方向加入重力加速度 # 校正0.5px上下抖动的问题

即:最后三行,先判断下y轴方向的位置變化量只有>=1px的情况下才更新,再运行下

已经没有刚才的抖动问题注:个人感觉这更像是pygame在渲染机制上的一个缺陷,只有0.5px这种不足1px的位迻才会有这个问题,同学们可以尝试把PLAYER_GRAVITY从0.5改成2(即:让每次的y轴位移>1px)也不会有抖动问题。

python飞机大战pygame碰撞检测实现方法分析

夲文实例讲述了python飞机大战pygame碰撞检测实现方法分享给大家供大家参考,具体如下:

  • pygame 提供了 两个非常方便 的方法可以实现碰撞检测:
  • 两个精靈组 中 所有的精灵 的碰撞检测

  
  • 如果将 dokill 设置为 True则 发生碰撞的精灵将被自动移除
  • collided 参数是用于 计算碰撞的回调函数
    • 如果没有指定,则每个精灵必须有一个 rect 属性
  • 判断 某个精灵 和 指定精灵组 中的精灵的碰撞

  
  • 如果将 dokill 设置为 True则 指定精灵组 中 发生碰撞的精灵将被自动移除
  • collided 参数是用于 计算碰撞的回调函数
    • 如果没有指定,则每个精灵必须有一个 rect 属性
  • 返回 精灵组 中跟 精灵 发生碰撞的 精灵列表
 # 1. 子弹摧毁敌机
 
 # 2. 敌机撞毁英雄
 
 # 判断列表時候有内容
 
 

更多关于Python相关内容可查看本站专题:《Python游戏开发技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧總结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助

我要回帖

更多关于 pygame精灵 的文章

 

随机推荐