pygame怎么不用rect方法检测碰撞?

2026-07-01 11:11:51

1、#初始化

from pygame import*


from pygame.locals import*
import sys
init()
screen = display.set_mode((500,500))
#两个形状的x和y坐标
x1 = 0
y1 = 0

x2 = 50


y2 = 50
#两个形状的宽和高
w1 = 20
h1 = 20
w2 = 20
h2 = 20

2、#代码事件部分

while True:#程序主循环


    screen.fill((255,255,255))
    for e in event.get():
        if e.type == QUIT:
            quit()
            sys.exit()
        if e.type == KEYDOWN:
            if e.key == K_8:
                y1 -= 10
            if e.key == K_2:
                y1 += 10
            if e.key == K_4:
                x1 -= 10
            if e.key == K_6:
                x1 += 10
            if e.key == K_UP:
                y2 -= 10
            if e.key == K_DOWN:
                y2 += 10
            if e.key == K_LEFT:
                x2 -= 10
            if e.key == K_RIGHT:
                x2 += 10

3、    #算法核心

    x12 = x1 + w1


    y12 = y1 + h1
    x22 = x2 + w2
    y22 = y2 + h2
    if x2 > x1 and x2 <= x12:#2号矩形碰到1号矩形的右侧
        print("2号矩形碰到1号矩形的右侧")
    if x22 > x1 and x22 <= x12:#2号矩形碰到1号矩形的左侧
        print("2号矩形碰到1号矩形的左侧")
    if y2 > y1 and y2 <= y12:#2号矩形碰到1号矩形的下侧
        print("2号矩形碰到1号矩形的下侧")
    if y22 > y1 and y22 <= y12:#2号矩形碰到1号矩形的上侧
        print("2号矩形碰到1号矩形的上侧")

4、    #显示部分

    xy1 = [x1,y1,w1,h1]


    xy2 = [x2,y2,w2,h2]
    draw.rect(screen,(0,0,0),xy1)
    draw.rect(screen,(0,0,0),xy2)
    display.update()

1、代码说明

代码的1~22行是基本程序,

23~40行是移动程序(为了演示),

41~53行是算法关键,

55~59行是显示程序。

2、算法说明

利用x、y坐标和宽高之间的关系求出四个角的坐标,再相互比较,得出结果。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢