【发布时间】:2019-10-09 13:49:44
【问题描述】:
我正在尝试在 python 中创建一个游戏,其中可以在屏幕上拖动一个文本框,但是每当它触及围绕它的圆圈的边界时,我希望循环重新开始,但使用不同的文本(通过将所有文本字符串存储在列表中,但我还没有那么远)。这是我已经走了多远:
import pygame
import ptext
pygame.init()
gameDisplay = pygame.display.set_mode((500, 500))
gameDisplay.fill((255,255,255))
x = 190
y = 230
a = 250
b = 250
text = "ExampleText 1."
def textbox(x,y):
ptext.draw(text, (x,y), color = (0,0,0))
def circle(a,b):
pygame.draw.circle(gameDisplay, (0,0,0), (250, 250), 210, 5)
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.MOUSEMOTION:
if event.buttons[0]:
x += event.rel[0]
y += event.rel[1]
textbox(x,y)
circle(a,b)
pygame.display.flip()
pygame.quit()
quit()
现在我知道我需要检测对象边界的碰撞,但在这里我很迷茫。我试图将我的对象的变量存储在矩形中,然后生成另一个 if 语句来识别我的对象是否发生碰撞(我使用了打印命令,因为我还没有得到我想要的实际命令),但这赢了'不要打印任何东西,我确定我走错了路,但这是我的最大努力......
为此我已经定义:
text_rect = pygame.Rect(x, y, 10, 30)
circle_rect = pygame.Rect(a,b, 300, 300)
然后在我的循环中:
if circle_rect.colliderect(text_rect):
print("COLLIDE")
有人对定义对象和创建我想要的功能的更好方法有任何建议吗?
(编辑:顺便说一句:我不太担心当我拖动我的文本框时,它会留下文本的打印,因为这在我的原始脚本中不会发生,但如果有人会感激不尽知道为什么在我当前的示例中会这样做。)
【问题讨论】:
标签: python pygame collision-detection