我在《皮格游戏》和《皮芒克》中做了一个简单的测试场景,它只是在一条线上掉了一个布球,每次发生碰撞时我都想把它长出来.

import pygame, sys, pymunk


pygame.init()
screen = pygame.display.set_mode((800, 800))
clock = pygame.time.Clock()
space = pymunk.Space()
space.gravity = (0, 500)


#Varibales
CircleRadius = 10



# create ball
BallBody = pymunk.Body(1, 100, body_type=pymunk.Body.DYNAMIC)
BallBody.position = 400, 400

BallShape = pymunk.Circle(BallBody, CircleRadius)
BallShape.elasticity = 0.9
BallShape.collision_type = 1
space.add(BallBody, BallShape)

# Create Container
SegmentBody = pymunk.Body(body_type=pymunk.Body.STATIC)

SegmentShape = pymunk.Segment(SegmentBody, (200, 600), (600, 600), 10)
SegmentShape.elasticity = 1
SegmentShape.collision_type = 2
space.add(SegmentBody, SegmentShape)

#handle collisions
def Collision(arbiter, space, data):
    print("Collision")
    global CircleRadius
    CircleRadius += 2


handler = space.add_collision_handler(1, 2)
handler.separate = Collision

#main game loop
while True:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    screen.fill((0, 0, 0))
    #draw bodys in pygame
    Bx, By = BallBody.position
    pygame.draw.circle(screen, (255, 0, 0), (int(Bx), int(By)), CircleRadius)

    Sx, Sy = SegmentBody.position
    pygame.draw.line(screen, (255, 0, 0), (200, 600), (600, 600), 10)
    space.step(1 / 50)

    pygame.display.update()
    clock.tick(120)

问题是,每次发生碰撞时,皮格勃的视觉都会增长,但实际的皮芒克身体却不会增长.

我试过使用ChatGPT,但没有任何效果,我在网上也找不到任何答案.

推荐答案

您必须创建一个新的pymunk.Segment,然后用新数据段替换旧数据段:

def Collision(arbiter, space, data):
    print("Collision")
    global CircleRadius, SegmentShape
    CircleRadius += 2
    space.remove(SegmentShape)
    SegmentShape = pymunk.Segment(SegmentBody, (200, 600), (600, 600), CircleRadius)
    SegmentShape.elasticity = 1
    SegmentShape.collision_type = 2
    space.add(SegmentShape)

Python相关问答推荐

使用Beautiful Soup获取第二个srcset属性

从管道将Python应用程序部署到Azure Web应用程序,不包括需求包

如何根据另一列值用字典中的值替换列值

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

如何记录脚本输出

django禁止直接分配到多对多集合的前端.使用user.set()

如何从pandas的rame类继承并使用filepath实例化

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

Python中的变量每次增加超过1

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

启动带有参数的Python NTFS会导致文件路径混乱

如何在达到end_time时自动将状态字段从1更改为0

Python—转换日期:价目表到新行

Numpyro AR(1)均值切换模型抽样不一致性

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

pandas fill和bfill基于另一列中的条件

获取PANDA GROUP BY转换中的组的名称

每次查询的流通股数量

Python如何导入类的实例

Polars表达式无法访问中间列创建表达式