我正在为一个项目编写一个游戏,我正在试图弄清楚如何绘制一个可以用作按钮的圆圈。我使用了pygame.draw.circle函数。这是我目前的代码:
import pygame
block_color = (0, 0, 255)
display_height = 600
display_width = 600
pygame.init()
gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.draw.circle(gameDisplay, block_color, (50, 50), 20, 0)
thing_width = 100
thing_height = 100
thing_startx = 10
thing_starty = 10
circle(thing_startx, thing_starty, thing_width, thing_height, block_color)
pygame.display.update()
根据pygame函数文档,这应该可行,但我得到的只是:
line 12, in <module>
circle(thing_startx, thing_starty, thing_width, thing_height, block_color)
NameError: name 'circle' is not defined
答案 0 :(得分:2)
您使用pygame.draw.rect
代替pygame.draw.circle
。请尝试以下方法:
pygame.draw.circle(gameDisplay, block_color, (50, 50), 20, 0)
circle(Surface, color, pos, radius, width=0) -> Rect
在Surface上绘制圆形。 pos参数是圆的中心,radius是大小。 width参数是绘制外边缘的粗细。如果宽度为零,则圆圈将被填充。
答案 1 :(得分:0)
您可以使用math.hypot
功能计算到圆心的距离。如果距离低于半径,则单击圆圈。
import math
import pygame as pg
def main():
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
circle_pos = (300, 200)
circle_radius = 40
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
elif event.type == pg.MOUSEBUTTONDOWN:
# x and y distance to the mouse position (event.pos).
x_offset = event.pos[0] - circle_pos[0]
y_offset = event.pos[1] - circle_pos[1]
distance = math.hypot(x_offset, y_offset)
if distance < circle_radius:
print('Circle clicked.', distance)
screen.fill((30, 30, 30))
pg.draw.circle(screen, (240, 120, 0), circle_pos, circle_radius)
pg.display.flip()
clock.tick(30)
if __name__ == '__main__':
pg.init()
main()
pg.quit()
您也可以使用pygame.mask.Mask
进行碰撞检测,但hypot
解决方案更简单。