我画了一个带有pygame的圆圈,但它说我有太多的争论

时间:2017-12-06 03:14:09

标签: python pygame

我正在为一个项目编写一个游戏,我正在试图弄清楚如何绘制一个可以用作按钮的圆圈。我使用了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 

2 个答案:

答案 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解决方案更简单。