首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >碰撞检测

碰撞检测

原创
作者头像
用户8442333
修改于 2021-05-19 03:03:02
修改于 2021-05-19 03:03:02
1K00
代码可运行
举报
文章被收录于专栏:python知识python知识
运行总次数:0
代码可运行

通常一个游戏中会有很多对象出现,而这些对象之间的“碰撞”在所难免,比如炮弹击中了飞机、箱子撞到了地面等。碰撞检测在绝大多数的游戏中都是一个必须得处理的至关重要的问题,pygame的sprite(动画精灵)模块就提供了对碰撞检测的支持,这里我们暂时不介绍sprite模块提供的功能,因为要检测两个小球有没有碰撞其实非常简单,只需要检查球心的距离有没有小于两个球的半径之和。为了制造出更多的小球,我们可以通过对鼠标事件的处理,在点击鼠标的位置创建颜色、大小和移动速度都随机的小球,当然要做到这一点,我们可以把之前学习到的面向对象的知识应用起来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from enum import Enum, unique
from math import sqrt
from random import randint

import pygame


@unique
class Color(Enum):
    """颜色"""

    RED = (255, 0, 0)
    GREEN = (0, 255, 0)
    BLUE = (0, 0, 255)
    BLACK = (0, 0, 0)
    WHITE = (255, 255, 255)
    GRAY = (242, 242, 242)

    @staticmethod
    def random_color():
        """获得随机颜色"""
        r = randint(0, 255)
        g = randint(0, 255)
        b = randint(0, 255)
        return (r, g, b)


class Ball(object):
    """球"""

    def __init__(self, x, y, radius, sx, sy, color=Color.RED):
        """初始化方法"""
        self.x = x
        self.y = y
        self.radius = radius
        self.sx = sx
        self.sy = sy
        self.color = color
        self.alive = True

    def move(self, screen):
        """移动"""
        self.x += self.sx
        self.y += self.sy
        if self.x - self.radius <= 0 or \
                self.x + self.radius >= screen.get_width():
            self.sx = -self.sx
        if self.y - self.radius <= 0 or \
                self.y + self.radius >= screen.get_height():
            self.sy = -self.sy

    def eat(self, other):
        """吃其他球"""
        if self.alive and other.alive and self != other:
            dx, dy = self.x - other.x, self.y - other.y
            distance = sqrt(dx ** 2 + dy ** 2)
            if distance < self.radius + other.radius \
                    and self.radius > other.radius:
                other.alive = False
               a self.radius = self.radius + int(other.radius * 0.146)

    def draw(self, screen):
        """在窗口上绘制球"""
        pygame.draw.circle(screen, self.color,
                           (self.x, self.y), self.radius, 0)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Python100天学习笔记】Day10 图形用户界面和游戏开发
GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的,Tk是一个工具包,最初是为Tcl设计的,后来被移植到很多其他的脚本语言中,它提供了跨平台的GUI控件。当然Tk并不是最新和最好的选择,也没有功能特别强大的GUI控件,事实上,开发GUI应用并不是Python最擅长的工作,如果真的需要使用Python开发GUI应用,wxPython、PyQt、PyGTK等模块都是不错的选择。
天道Vax的时间宝藏
2021/12/02
2.8K0
使用Python制作动态迷你游戏:实现简单游戏动画
制作迷你游戏不仅可以提升编程技能,还能为你的项目增添趣味。在这篇博客中,我们将使用Python创建一个简单的动态迷你游戏。通过利用Pygame库,我们可以实现一个小球反弹的游戏动画。
屿小夏
2025/05/23
1160
Python绘制动态弹球:物理碰撞动画效果
物理碰撞动画效果在游戏和动画制作中有着广泛的应用。通过模拟物体的运动和碰撞,我们可以创建生动有趣的动画。在这篇博客中,我们将使用Python创建一个动态弹球的物理碰撞动画效果。通过利用Pygame库,我们可以实现一个具有真实物理效果的弹球动画。
屿小夏
2024/07/27
2890
用python图形库实现的一个白球,简单记录一下(实现了简单的碰撞检测)
命运之光
2024/03/20
1850
用python图形库实现的一个白球,简单记录一下(实现了简单的碰撞检测)
星辰秘典:揭示Python项目的宇宙奥秘——宇宙星空模拟器(改)
宇宙星空模拟器是一个用Python和Pygame库创建的小型项目,它可以模拟宇宙中的星星、星系和星云,并展现出美丽的星空效果。通过这个模拟器,你可以欣赏到宇宙中的无尽星辰,感受宇宙的浩瀚和神秘。
命运之光
2024/03/20
2630
星辰秘典:揭示Python项目的宇宙奥秘——宇宙星空模拟器(改)
用Python模拟气泡效果:创建漂浮气泡动画
气泡在水中缓缓上升、漂浮的效果总是能带给人一种宁静和美丽的感觉。在这篇博客中,我们将使用Python创建一个动态的气泡动画效果。通过利用Pygame库,我们可以实现一个逼真的漂浮气泡效果。
屿小夏
2024/09/20
3610
Python 烟花展示:使用 Pygame 创建绚丽的夜空
小白的大数据之旅
2024/11/20
2590
Python 烟花展示:使用 Pygame 创建绚丽的夜空
使用Python绘制动态细胞分裂:生物分裂动画
细胞分裂是生物学中的基本过程之一,在显微镜下观察细胞分裂的过程是极为有趣的。今天,我们将使用Python来模拟和绘制细胞分裂的动态动画效果。通过利用Pygame库,我们可以直观地展示细胞从单一分裂为多个的过程。
屿小夏
2024/07/27
2370
python慢画炫彩圆圈_pygame绘画与动画
python慢画炫彩圆圈_pygame绘画与动画 import pygamefrom pygame.locals import *import mathimport colorsyspygame.init()screenWidth,screenHeight=480,360screenCenterx,screenCentery = screenWidth//2 -1 ,screenHeight//2 - 1screen = pygame.display.set_mode((screenWidth,screen
公众号---人生代码
2019/08/30
1K0
用 Python 和 Pygame 开发 2D 平台跳跃游戏
通过本文,我们使用 Python 和 pygame 从零开发了一个简单的 2D 平台跳跃游戏,涵盖了角色移动、平台生成、碰撞检测和动态得分等核心功能。这个项目是学习游戏开发的一个很好起点,能够帮助你掌握 pygame 的基本用法,并为构建更复杂的游戏奠定基础。
用户10020543
2025/01/07
3960
Python制作动态烟花效果:庆祝节日的动画
烟花总是能为各种节日和庆典增添绚丽的色彩。今天,我们将使用Python来制作一个动态的烟花效果,让你的屏幕上展现出缤纷的烟花动画。本文将带你一步步实现这一效果,并展示如何使用Pygame库进行动画制作。
屿小夏
2024/09/25
1.4K0
python实现贪吃蛇小游戏
先前,有了解到用人工智能训练贪吃蛇,没错就是snake,可以达到很高的分数,并且损失函数随训练次数的增加,逐渐降低,贪吃蛇能够更准确的吃到食物,简直太神奇了。
AngelNH
2020/04/16
8430
用Python制作一个简单的球球大作战
大家好,我是查理。今天教大家制作一个简化版球球大作战\ 话不不多说,上代码 # -*- coding: utf-8 -*- # @Time : 2018/7/30 16:19 # @Author : G.Hope # @Email : 1638327522@qq.com # @File : 吃球.py # @Software: PyCharm import pygame import random import math # 生成随机颜色 def random_color():
程序员迪迪
2021/12/25
6740
Python制作动态齿轮:模拟机械齿轮旋转
机械齿轮的旋转不仅在工程和机械设计中至关重要,而且在动画和游戏开发中也经常被使用。在这篇博客中,我们将使用Python创建一个动态齿轮旋转的动画效果。通过利用Pygame库,我们可以实现一个逼真的机械齿轮旋转动画。
屿小夏
2024/08/27
2640
事件处理
可以在事件循环中对鼠标事件进行处理,通过事件对象的type属性可以判定事件类型,再通过pos属性就可以获得鼠标点击的位置。如果要处理键盘事件也是在这个地方,做法与处理鼠标事件类似。
用户8442333
2021/05/19
8340
“AS3.0高级动画编程”学习:第一章高级碰撞检测
AdvancED ActionScript 3.0 Animation 是Keith Peters大师继"Make Things Move"之后的又一力作,网上已经有中文翻译版本了,打算下一阶段开始啃这本书。 今天开始学习高级碰撞检测,所用到的预备知识: 1、BitmapData的透明与不透明区别 位图数据(BitmapData)有二种模式,一种支持透明(即每个像素的值采用AARRGGBB这种32位颜色表示);另一种不支持透明度(即传统的RRGGBB这种24位颜色表示,简单点讲就是alpha分量默认为FF,
菩提树下的杨过
2018/01/19
1.5K0
星辰秘典:探索Python项目的神秘力量——贪吃蛇
前言:你好,欢迎来到我的博客。我是一个热爱编程的人,特别喜欢用Python这门语言来创造一些有趣的图形项目。在这篇博客中,我将和你分享一些我用Python写的小的图形项目,包括它们的原理,代码和效果。我希望你能从中学到一些有用的知识,也能感受到编程的乐趣。如果你对我的项目有任何问题或建议,欢迎在评论区留言,我会尽快回复你。让我们开始吧!
命运之光
2024/03/20
1640
星辰秘典:探索Python项目的神秘力量——贪吃蛇
【pygame系列 第六课 弹球游戏重构 面向对象-下 】
绘制挡板和绘制小球是一个思路,挡板具有颜色,大小,绘制的位置。在前面设置了挡板的属性。
叶子陪你玩
2020/03/12
1.1K0
HTML5 Canvas开发详解(6) -- 边界/碰撞检测
边界检测,指的是检测一个物体所处“运动环境的范围”,简单来说,就是给运动物体限定一个范围,从而实现某些动画效果。
爱学习的程序媛
2022/04/07
1.4K0
pygame 笔记-6 碰撞检测
 2个矩形如果发生碰撞(即:图形有重叠区域),按上图的判断条件就能检测出来,如果是圆形,则稍微变通一下,用半径检测。如果是其它不规则图形,大多数游戏中,并不要求精确检测,可以在外层套一个矩形,大致用上图的原理检测。
菩提树下的杨过
2018/12/28
1.2K0
推荐阅读
相关推荐
【Python100天学习笔记】Day10 图形用户界面和游戏开发
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验