pygame鼠标移动蓝色圆形mask动态碰撞检测示例程序

"""
   鼠标移动蓝色圆形动态碰撞检测示例程序。
   本例是用基于mask的overlape命令,从而检测出两个圆形有没有碰撞的。
"""
import pygame
from pygame.locals import *

red = (255,0,0)
blue = (0,0,255)
w,h, = size = 480,360
pygame.init()
screen = pygame.display.set_mode(size)

# 创建大的圆环
radius1 = 50
width1,height1 = 2*radius1,2*radius1
hollow_circle = pygame.Surface((width1,height1),SRCALPHA)
pos = width1//2,height1//2                # 画圆中心坐标
rect1 = hollow_circle.get_rect(center=(w//2,h//2))
pygame.draw.circle(hollow_circle,red,pos,radius1,10)
mask1 = pygame.mask.from_surface(hollow_circle)

# 创建小的实心圆
radius2 = 10
width2,height2 = 2 * radius2,2 * radius2
solid_circle = pygame.Surface((width2,height2),SRCALPHA)
pos = width2//2,height2//2                # 画圆中心坐标
rect2 = solid_circle.get_rect(center=(w//2,h//2))
pygame.draw.circle(solid_circle,blue,pos,radius2)
mask2 = pygame.mask.from_surface(solid_circle)
[rml_read_more]
running = True
while running:
    for event in pygame.event.get():
        if event.type in [KEYDOWN,QUIT,]:running=False
        
    mpos = pygame.mouse.get_pos()
    rect2.center = mpos
    offset = rect2.x - rect1.x ,rect2.y - rect1.y
    p = mask1.overlap(mask2,offset)
    if p:
        pygame.display.set_caption(str(p))
    else:
        pygame.display.set_caption('没有碰撞')
    screen.fill((0,0,0))
    screen.blit(hollow_circle,rect1)
    screen.blit(solid_circle,rect2)    
    pygame.display.update()
pygame.quit()
 

鼠标移动蓝色圆形动态碰撞检测示例程序pygame mask collision lixingqiu
注意返回的坐标是相对于hollow_circle的。

本站所有作品,教程等皆为原创,版权所有。只供个人及单位内部研究使用,对外展示或传播必需经本站同意,且注明来自本站。培训机构等用本站资源培训学生,需经本站授权。一旦付款,表示同意本站知识付费原则:数字商品,不支持退款。亦可直接向微信号scratch8付款购买。入住QQ群:225792826 和爱好者共同交流,并且能下载免费提供的Python资源(需提供真实姓名才可入群)
李兴球的博客_Python创意编程技术前沿_pygame » pygame鼠标移动蓝色圆形mask动态碰撞检测示例程序
scratch

学本领,探索更大的世界!

李兴球博客 风火轮编程主页