Pygame基础10-物理模拟

PyMunk

PyMunk是一个模拟物理的库。

注意,PyMunk只是进行物理模拟,不包含可视化的功能。如果需要可视化,可使用pygame等库。

可用pip安装pymunk
pip install pymunk

在这里插入图片描述

pymunk中的概念

  • space: 物理空间。 包含gravity 模拟重力,update更新空间。

  • Body: 原子物体(一个点,没有形状),受到力的影响。

  • Shape:形状,包围在Body周围,用于检测碰撞。

pymunk中有3种类型的Body

  • static:静止的,不会移动,但是可以产生碰撞。
  • dynamic:动态的,受到力的影响。
  • kinematic:受玩家控制(或非物理控制)的影响。

在这里插入图片描述

模拟的过程

  1. 创建空间
space = pymunk.Space()
space.gravity = (0.0, 100.0)
  1. 创建Body和shape, 并加入到空间中
def create_apple(space, pos):body = pymunk.Body(mass=1, moment=10, body_type=pymunk.Body.DYNAMIC) # DYNAMIC 类型的物体会受到力的影响body.position = posshape = pymunk.Circle(body, radius=10)space.add(body, shape)return shape

(如果使用pygame可视化)绘制物体:

def draw_apple(apples):for apple in apples:pos_x = int(apple.body.position.x)pos_y = int(apple.body.position.y)pygame.draw.circle(screen, (255, 0, 0), (pos_x, pos_y), 10)
  1. 更新空间
...
# 在每一帧中更新空间
space.step(1/60.0)

案例

下面是一个完整示例,模拟苹果掉落的过程。
在这里插入图片描述

import sys
import pygame
import pymunkpygame.init()
screen_size = (800, 600)
screen = pygame.display.set_mode(screen_size)
clock = pygame.time.Clock()space = pymunk.Space()
space.gravity = (0.0, 100.0)def create_apple(space, pos):body = pymunk.Body(mass=1, moment=10, body_type=pymunk.Body.DYNAMIC) # DYNAMIC 类型的物体会受到力的影响body.position = posshape = pymunk.Circle(body, radius=10)space.add(body, shape)return shapedef draw_apple(apples):for apple in apples:pos_x = int(apple.body.position.x)pos_y = int(apple.body.position.y)pygame.draw.circle(screen, (255, 0, 0), (pos_x, pos_y), 10)def create_static_ball(space, pos):body = pymunk.Body(body_type=pymunk.Body.STATIC) # STATIC 类型的物体 不会移动body.position = posshape = pymunk.Circle(body, radius=10)space.add(body, shape)return shapedef draw_balls(balls):for ball in balls:pos_x = int(ball.body.position.x)pos_y = int(ball.body.position.y)pygame.draw.circle(screen, (0, 255, 0), (pos_x, pos_y), 10)apples =[]balls = []
balls.extend([create_static_ball(space, (400, 300)),create_static_ball(space, (500, 400))])while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if event.type == pygame.MOUSEBUTTONDOWN:pos = pygame.mouse.get_pos()apple = create_apple(space, pos)apples.append(apple)screen.fill((35, 35, 35))draw_apple(apples)draw_balls(balls)space.step(1/60.0)pygame.display.flip()clock.tick(60)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/297889.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式——建造者模式03

工厂模式注重直接生产一个对象,而建造者模式 注重一个复杂对象是如何组成的(过程),在生产每个组件时,满足单一原则,实现了业务拆分。 设计模式,一定要敲代码理解 组件抽象 public interface …

Educational Codeforces Round 162 (Rated for Div. 2) ----- E. Count Paths --- 题解

E. Count Paths: 题目大意: 思路解析: 根据题目中定义的美丽路径,我们可以发现路径只有两种情况: 当前结点作为起始结点,那我们只需要知道它的子树下有多少个相同颜色的结点,并且相同颜色的结…

易宝OA ExecuteQueryNoneResult SQL注入漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA ExecuteQueryNoneResult 接口处存在SQL注入漏洞,未经身份认证的攻击者可以通…

Going deeper with Image Transformers

1、引言 论文链接: https://openaccess.thecvf.com/content/ICCV2021/papers/Touvron_Going_Deeper_With_Image_Transformers_ICCV_2021_paper.pdf 由于目前对图像 Transformer[1] 的优化问题研究很少,Hugo Touvron 等[2] 构建和优化了更深的用于图像分…

[Semi-笔记]Switching Temporary Teachers for Semi-Supervised Semantic Segmentation

目录 概要创新一:Dual Temporary Teacher挑战:解决: 创新二:Implicit Consistency Learning(隐式一致性学习)挑战:解决: 实验结果小结论文地址代码地址 分享一篇2023年NeurIPS的文章…

Calico IPIP和BGP TOR的数据包走向

IPIP Mesh全网互联 文字描述 APOD eth0 10.7.75.132 -----> APOD 网关 -----> A宿主机 cali76174826315网卡 -----> Atunl0 10.7.75.128 封装 ----> Aeth0 10.120.181.20 -----> 通过网关 10.120.181.254 -----> 下一跳 BNODE eth0 10.120.179.8 解封装 --…

Linux课程____LVM(逻辑卷管理器)

LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。 这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。 动态调整磁盘容量&#xff…

AJAX —— 学习(一)

目录 一、原生 AJAX (一)AJAX 介绍 1.理解 2.作用 3.最大的优势 4.应用例子 (二)XML 介绍 1.理解 2.作用 (三)AJAX 的特点 1.优点 2.缺点 二、HTTP 协议 (一)HTTP 介…

深入浅出 -- 系统架构之分布式架构

​​​​​​分布式架构: 根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。 当垂直应用越来越多时,应用之间的交互不可避免,可将共用的基础服务或核心模块抽取出来作为独立服务&#xff0c…

鸿蒙OS开发实例:【应用状态变量共享】

平时在开发的过程中,我们会在应用中共享数据,在不同的页面间共享信息。虽然常用的共享信息,也可以通过不同页面中组件间信息共享的方式,但有时使用应用级别的状态管理会让开发工作变得简单。 根据不同的使用场景,ArkT…

函数最小值(堆)

P2085 最小函数值 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include<queue> #include<algorithm> #include<vector> #include<cstring> using namespace std; #define ll long long const int N1e4100; int n,m; stru…

文本直接生成2分钟视频,即将开源模型StreamingT2V

Picsart人工智能研究所、德克萨斯大学和SHI实验室的研究人员联合推出了StreamingT2V视频模型。通过文本就能直接生成2分钟、1分钟等不同时间&#xff0c;动作一致、连贯、没有卡顿的高质量视频。 虽然StreamingT2V在视频质量、多元化等还无法与Sora媲美&#xff0c;但在高速运…

2.Swift基础控件:图标文字按钮

Swift图标标题按钮 一、自定义IconTitleButton类 import Foundation/* 枚举 设置 图片的位置 */ enum ButtonImagePosition : Int {case imageTop 0case imageLeftcase imageBottomcase imageRight } extension UIButton {/**type &#xff1a;image 的位置Space &#xff1…

安装Docker(CentOS)

Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…

的C++奇迹之旅:值和引用的本质效率与性能比较

文章目录 请添加图片描述 [TOC](文章目录) &#x1f4dd;引用# &#x1f320;引用概念**引用**不是新定义一个变量&#xff0c;而是给**已存在变量取了一个别名**&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。>定义&#…

DevC++ 的对拍教程

目录 一&#xff1a;首先准备DevC 二&#xff1a;创建源代码 1. 然后分别写代码&#xff0c;认为自己能把握100%做对的暴力代码写进ba1.cpp 2. 然后写自己的解决问题的代码&#xff0c;不确定的&#xff0c;要认证准确性的代码写进wt1.cpp 3. 然后写数据代码&#xff0c;…

应急响应实战笔记05Linux实战篇(2)

第2篇&#xff1a;捕捉短连接 0x00 前言 ​ 短连接&#xff08;short connnection&#xff09;是相对于长连接而言的概念&#xff0c;指的是在数据传送过程中&#xff0c;只在需要发送数据时&#xff0c;才去建立一个连接&#xff0c;数据发送完成后&#xff0c;则断开此连接…

C++数据结构与算法——二叉树公共祖先问题

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

ruoyi-nbcio-plus基于vue3的flowable流程元素选择区面板的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

C++ 指针与数组

指针与数组名都是地址&#xff0c;可以混合使用访问数组元素。 用指针访问数组&#xff0c;计算数组元素之和。 总结 如图所示&#xff0c;获取数组起始地址的方法有两种&#xff0c; 其一为数组名&#xff0c; 其二为通过数组的首元素地址。指针变量p是通过数组名获得指向…