# pygame.draw &pygame.surface

rect绘制矩形
polygon绘制多边形（三个及三个以上的边）
circle绘制圆
ellipse绘制椭圆
arc绘制圆弧
line绘制线
lines绘制一系列的线
aaline绘制一根平滑的线
aalines绘制一系列平滑的线

1.画矩形

pygame.draw.rect(surface, (0,0,255), (100, 200, 100, 100))

pygame.draw.rect函数返回一个矩形，表示屏幕上被修改的像素的区域范围。其它绘图函数也都有这样的返回值。

2.画多边形

pygame.draw.polygon(surface, (255,0,0), [(100, 100),(200, 100),(250,186.6),(200,273.2),(100, 273.2),(50,186.6)])

pygame.draw.polygon(surface, (0,255,0), [(100, 100),(200, 100),(250,186.6),(200,273.2),(100, 273.2),(50,186.6)],1)

3.画圆
pygame.draw.circle在Surface上画一个圆形。
pygame.draw.circle(surface, (255,255,0), (100, 100), 50)

4.画椭圆
pygame.draw.ellipse在矩形区域中画一个椭圆的形状。比如
pygame.draw.ellipse(surface, (0,255,255), (200, 200, 200, 100))

5.画弧线
pygame.draw.arc画椭圆的一段。比如
pygame.draw.arc(surface, (0,255,0), (200, 200, 200, 100), 3.14159/3, 3.14159*2/3)

6.画线段  pygame.draw.line函数可以画一条直线段。比如

pygame.draw.line(surface, (255,0,255), (100, 100), (200, 200))

7.画连续的线段
pygame.draw.lines画多条连续的线段。比如
pygame.draw.lines(surface, (255,255,255), False, [(100, 100), (200, 200), (300, 200), (200, 100)])

8.抗锯齿的线段
pygame.draw.aaline画抗锯齿的线段。
pygame.draw.aaline(surface, (255,255,0), (200, 100), (300, 200))

pygame.draw.aalines可以画多条连续的抗锯齿线段。
pygame.draw.aalines(surface, (0,0, 255), False, [(100, 100), (200, 200), (300, 100), (200, 0)])

9.点操作

surface.set_at((100, 100), (255,255,255))

color = surface.get_at((100, 100))

10.填充区域
Surface.fill方法可以用一种颜色填充一个矩形区域。比如
surface.fill((255,0,0), (100, 200, 100, 100))

import pygame
from pygame.locals import *
from sys import exit

pygame.init()
screen = pygame.display.set_mode((640, 480), 0, 32)

color1 = (221, 99, 20)
color2 = (96, 130, 51)
factor = 0.

def blend_color(color1, color2, blend_factor):
r1, g1, b1 = color1
r2, g2, b2 = color2
r = r1 + (r2 - r1) * blend_factor
g = g1 + (g2 - g1) * blend_factor
b = b1 + (b2 - b1) * blend_factor
return int(r), int(g), int(b)

while True:

for event in pygame.event.get():
if event.type == QUIT:
exit()

screen.fill((255,255,255))

tri = [ (0, 120), (639, 100), (639, 140) ]
pygame.draw.polygon(screen, (0, 255, 0), tri)   #画多边形  第二个参数为多边形颜色，第三个参数为多边形的顶点位置

pygame.draw.circle(screen, (0, 0, 0), (int(factor * 639.0), 120), 10)

#画圆：第二个参数为圆的颜色，第三个参数为圆心，第四个参数为半径

x, y = pygame.mouse.get_pos()
if pygame.mouse.get_pressed()[0]:
factor = x / 639.0
pygame.display.set_caption("Pygame Color Blend Test - %.3f" % factor)

color = blend_color(color1, color2 , factor)
pygame.draw.rect(screen, color, (0, 240, 640, 240))

pygame.display.update()

1.剪裁：clipping

surface有一种叫裁剪区域（clipping area)的东西，也是一个矩形，定义了哪部分会被绘制，也就是说一旦定义了这个区域，那么只有这个区域内的像素会被修改，其他的位置保持不变，默认情况下，这个区域是所有地方。我们可以使用set_clip来设定，使用get_clip来获得这个区域。

screen.set_clip(100,100,200,200)

2.设置Surface的像素

set_at的兄弟get_at可以帮我们做这件事，它接受一个坐标返回指定坐标点上的颜色。不过记住get_at在对hardware surface操作的时候很慢，而全屏的时候总是hardware的，所以慎用这个方法！

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120