Pygame基础8-碰撞

Collisions

在Pygame中,我们使用矩形来移动物体,并且用矩形检测碰撞。

colliderect检测两个矩形是否碰撞,但是没法确定碰撞的方向。

Rect1.colliderect(Rect2)
# collision -> return Ture 
# else -> return False

collidepoint可以确定一个矩形是否和另一个矩形的某个碰撞(并确定碰撞方向),但是会很麻烦,并且很容易遗漏某些碰撞。

Rect1.collidepoint(x, y)
# x,y is the point on a Rect

在这里插入图片描述

综合考虑之后,
我们通常使用colliderect来检测碰撞,然后根据两个矩形的相对位置确定碰撞方向。

在这里插入图片描述

案例

一个矩形(和边框的碰撞)

# rect1
rect1 = pygame.Rect(100, 100, 50, 50)
color1 = (255, 255, 255)
speed_1_x = 5
speed_1_y = 5def update_rect():global speed_1_x, speed_1_yrect1.x += speed_1_xrect1.y += speed_1_y# rect 和边界的碰撞:if rect1.left <= 0 and speed_1_x <0:speed_1_x *= -1elif rect1.right >= witdth and speed_1_x > 0:speed_1_x *= -1if rect1.top <= 0 and speed_1_y < 0 :speed_1_y *= -1elif rect1.bottom >= height and speed_1_y > 0:speed_1_y *= -1pygame.draw.rect(screen, color1, rect1)# 在主循环中调用 update_rect()
while True:...screen.fill((30, 30, 30))update_rect()...

添加第二个矩形

注意:除了判断碰撞方向之外,还要判断矩形的速度方向,以防止矩形在碰撞后反复移动。

在这里插入图片描述

# rect2
rect2 = pygame.Rect(200, 200, 200, 50)
color2 = (0, 255, 0)
speed_2_x = 0
speed_2_y = 4 # 为了简化,rect2只在竖直方向上移动def update_rect():global speed_1_x, speed_1_y,  speed_2_y...rect2.y += speed_2_y# rect 和边界的碰撞:...if rect2.top <= 0 and speed_2_y < 0 :speed_2_y *= -1elif rect2.bottom >= height and speed_2_y > 0:speed_2_y *= -1# rect1 和 rect2的碰撞collide_threshold = 20if rect1.colliderect(rect2): if abs(rect1.top - rect2.bottom) < collide_threshold and speed_1_y < 0:speed_1_y *= -1elif abs(rect1.bottom - rect2.top) < collide_threshold and speed_1_y > 0:speed_1_y *= -1elif abs(rect1.left - rect2.right) < collide_threshold and speed_1_x < 0:speed_1_x *= -1elif abs(rect1.right - rect2.left) < collide_threshold and speed_1_x > 0:speed_1_x *= -1pygame.draw.rect(screen, color1, rect1)pygame.draw.rect(screen, color2, rect2)

完整案例

两个方块的碰撞。为了简化,rect2只在竖直方向上移动。
在这里插入图片描述

import sys
import time
import pygame# Initialize Pygame
pygame.init()# Set up the display
witdth = 800
height = 600
screen = pygame.display.set_mode((witdth, height))# Set up the clock
clock = pygame.time.Clock()# rect1
rect1 = pygame.Rect(100, 100, 50, 50)
color1 = (255, 255, 255)
speed_1_x = 5
speed_1_y = 5# rect2
rect2 = pygame.Rect(200, 200, 300, 50)
color2 = (0, 255, 0)
speed_2_x = 0 
speed_2_y = 4 # 为了简化,rect2只在竖直方向上移动def update_rect():global speed_1_x, speed_1_y, speed_2_x, speed_2_yrect1.x += speed_1_xrect1.y += speed_1_y#rect2.x += speed_2_xrect2.y += speed_2_y# rect 和边界的碰撞:if rect1.left <= 0 and speed_1_x <0:speed_1_x *= -1elif rect1.right >= witdth and speed_1_x > 0:speed_1_x *= -1if rect1.top <= 0 and speed_1_y < 0 :speed_1_y *= -1elif rect1.bottom >= height and speed_1_y > 0:speed_1_y *= -1if rect2.top <= 0 and speed_2_y < 0 :speed_2_y *= -1elif rect2.bottom >= height and speed_2_y > 0:speed_2_y *= -1#以 HH:MM:SS 的格式 输出当前时间 form_time1 = time.strftime("%H:%M:%S", time.localtime())print('rect2 to bottom', 'time= ', form_time1)# rect1 和 rect 2的碰撞collide_threshold = 20if rect1.colliderect(rect2): if abs(rect1.top - rect2.bottom) < collide_threshold and speed_1_y < 0:speed_1_y *= -1if abs(rect1.bottom - rect2.top) < collide_threshold and speed_1_y > 0:speed_1_y *= -1if abs(rect1.left - rect2.right) < collide_threshold and speed_1_x < 0:speed_1_x *= -1if abs(rect1.right - rect2.left) < collide_threshold and speed_1_x > 0:speed_1_x *= -1# Draw the rectpygame.draw.rect(screen, color1, rect1)pygame.draw.rect(screen, color2, rect2)while True:# Handle eventsfor event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()screen.fill((30, 30, 30))update_rect()# Update the displaypygame.display.flip()# Cap the frame rateclock.tick(60)

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

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

相关文章

el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片

问题 我用el-upload上传图片&#xff0c;再上一篇文章已经解决了&#xff0c;el-upload上传图片给SpringBoot后端,但是又发现了新的问题&#xff0c;果然bug是一个个的冒出来的。新的问题是el-upload编辑时回显图片的保存。 问题描述&#xff1a;回显图片需要将默认的 file-lis…

目标检测——车牌数据集

一、重要性及意义 交通安全与管理&#xff1a;车牌检测和识别技术有助于交通管理部门快速、准确地获取车辆信息&#xff0c;从而更有效地进行交通监控和执法。例如&#xff0c;在违规停车、超速行驶等交通违法行为中&#xff0c;该技术可以帮助交警迅速锁定违规车辆&#xff0…

ABAP SHIFT-字符串移位 和 CONDENSE去除空格

文章目录 SHIFT-字符串移位 和 CONDENSE去除空格SHIFT BY n PLACES RIGHT/LEFT运行结果 SHIFT ... UP TO ...运行结果 其他的-变量后面加括号和数字SHIFT c LEFT/RIGHT DELETING运行结果 SHIFT 去除0示例程序1运行结果示例程序2运行结果 CONDENSE示例程序运行结果 SHIFT-字符串…

DHCP实验

要求&#xff1a;全网IP范围为192.168.1.0/24&#xff0c;实现全网可达&#xff0c;HTTP服务器的域名为www.baidu.com&#xff0c;实现可以通过域名访问http 第一步、规划IP地址 按如图分别给路由器、http服务器、dns服务器、客户端配置IP地址&#xff0c;并且给pc设置为DHCP。…

BCLinux-for-Euler配置本地yum源

稍微吐槽一句…… 在这片土地上&#xff0c;国产化软件的大潮正在滚滚而来&#xff0c;虽然都不是真正意义上的国产化&#xff0c;但是至少壳是国产的~~~ 之前使用的Centos7的系统&#xff0c;现在都要求统一换成BCLinux-for-Euler。说实话换了之后不太适应&#xff0c;好多用习…

【测试篇】测试用例

文章目录 前言具体设计测试用例等价类边界值场景设计法判定表&#xff08;因果图&#xff09;正交排列&#xff08;用的非常少&#xff09;错误猜测法 前言 什么是测试用例&#xff1f;&#xff1f; 测试用例是针对软件系统或应用程序的特定功能或场景编写的一组步骤&#xf…

动态规划基础

动态规划 1、动态规划的概念 简称DP,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。常常适用于有重叠子问题和最优子结构性质的问题。 简单来说,就是给定一个问题,把它拆成一个个子问题,查到子问题可以直接解决。然后把子问题答案保存起来,以减少重复计算…

spring boot后端controller中接收表单参数校验

校验分为两部分&#xff0c;一部分是前端的输入时就校验&#xff0c;一部分时后端接收参数时的校验。本文提到的是后端接收参数时的校验。这个后端校验的存在有什么意义呢&#xff1f; 比如我们设置前端在输入参数时限制输入不能为空&#xff0c;应该为3-20位非空字符&#xf…

Selenium的简单防反爬和浏览器配置

# Selenium的简单使用&#xff1a;https://zhuanlan.zhihu.com/p/557463669 # 防反爬参考&#xff1a;https://blog.csdn.net/weixin_51368459/article/details/125462178 from selenium import webdriver from selenium.webdriver.edge.options import Options# 设置浏览器驱动…

2024.04.04 健身打卡第 45 天

别让别人告诉你&#xff0c;你成不了才&#xff0c;如果你有梦想的话就要去捍卫它&#xff0c;那些一事无成的人&#xff0c;想告诉你你也成不了大器&#xff0c;如果你有理想的话&#xff0c;就要去努力实现。 2024.04.04 健身打卡第 45 天

ubuntu更换国内镜像源,下载增速

方法一&#xff1a;通过脚本更换源 1.备份原来的源 sudo cp /etc/apt/sources.list /etc/apt/sources_init.list 将原来的源保留一下&#xff0c;以后想用还可以继续用 2.更换源 sudo gedit /etc/apt/sources.list 使用gedit打开文档&#xff0c;将下面的阿里源复制进去&am…

Prometheus+grafana环境搭建rabbitmq(docker+二进制两种方式安装)(二)

搭建完Prometheusgrafana基础环境后参见&#xff1a;Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客&#xff0c;对我本地的一些常用法人服务进行一个监控。基本都可以根据官方文档完成搭建&#xff0c;因为docker和二进制方式安装各有优缺点。 d…

item_search-按关键字搜索淘宝商品:如何通过获取以下关键字、搜索类型、排序方式参数提升用户体验、优化营销策略、提高转化率

在淘宝购物的过程中&#xff0c;搜索功能无疑是用户与商品之间的重要桥梁。通过输入关键字&#xff0c;用户可以迅速找到所需的商品&#xff0c;而搜索结果的准确性和相关性则直接关系到用户的购物体验和满意度。因此&#xff0c;如何通过优化关键字、搜索类型和排序方式参数&a…

mbti,ESTP型人格的心理问题分析

什么是ESTP型人格 ESTP分别代表外向&#xff0c;实感&#xff0c;理智&#xff0c;依赖&#xff0c;而ESTP型人格则是一种性格上十分激进&#xff0c;喜欢冒险&#xff0c;并且总是因为情绪起伏过大&#xff0c;而一下子做出应激行为的相对冒险的人格。具有ESTP型人格的人一般…

『python爬虫』巨量http代理使用 每天白嫖1000ip(保姆级图文)

目录 注册 实名得到API链接和账密 Python3requests调用Scpay总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 注册 实名 注册巨量http 用户概览中领取1000ip,在动态代理中使用.用来测试一下还是不错的 得到AP…

MySQL - 基础二

6、表的增删改查 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 6.1、Create 语法&#xff1a; INSERT [INTO] table_name[(column [, column] ...)]VALUES (value_list) [, (value_list)] ...value_list: v…

PAC性能开销权衡及优化措施

PAC性能开销&#xff1f;如何进行优化&#xff1f;本博客探讨这些问题。

「精细化管理」某物业集团精细化管理咨询项目纪实

实现工作例行化、定时化、程序化与可视化企业重视绩效考核&#xff0c;却总感觉考核不到点上&#xff1b;企业重视规划职责&#xff0c;却总感觉部门间职责不清&#xff1b;企业重视激励&#xff0c;却总感觉难以真正激励员工。到底是哪里出了问题&#xff1f;华恒智信指出&…

KIl5:Stm32L071下载出现flash download faild “cortex-m0+“的解决方法

首先看看有没有芯片&#xff0c;没有芯片下载一下 下载并在device选择对应的芯片 选择调试器 选择flash

vulnhub----natraj靶机

文章目录 一.信息收集1.网段探测2.端口扫描3.版本服务探测4.漏扫5.目录扫描 二.漏洞利用1.分析信息2..fuzz工具 三.getshell四.提权六.nmap提权 一.信息收集 1.网段探测 因为使用的是VMware&#xff0c;靶机的IP地址是192.168.9.84 ┌──(root㉿kali)-[~/kali/vulnhub] └─…