Pygame模块之pygame.draw

本文详细介绍了Pygame的draw模块,包括rect、polygon、circle、ellipse、arc、line、lines、aaline和aalines等函数的使用,用于在Surface上绘制矩形、多边形、圆、椭圆、圆弧、直线等图形,并提供了相关参数说明和应用示例。

  本文将主要介绍Pygame的draw模块,主要内容翻译自pygame的官方文档 http://www.pygame.org/docs/ref/draw.html

  pygame.draw 模块用于在Surface上绘制一些简单的图形,比如点、直线、矩形、圆、弧等。

  下面这段话引自龙昌博客·Pygame学习笔记3:绘图:pygame.draw中函数的第一个参数总是一个surface,然后是颜色,再后会是一系列的坐标等。稍有些计算机绘图经验的人就会知道,计算机里的坐标,(0,0)代表左上角。而返回值是一个Rect对象,包含了绘制的领域,这样你就可以很方便的更新那个部分了。

  先从整体来看pygame.draw有哪些函数:

  • pygame.draw.rect:    绘制矩形
  • pygame.draw.polygon:  绘制任意边数的多边形
  • pygame.draw.circle:  绘制圆
  • pygame.draw.ellipse:  在矩形内绘制椭圆
  • pygame.draw.arc:     绘制圆弧(或者椭圆的一部分)
  • pygame.draw.line:    绘制直线(线段)
  • pygame.draw.lines:  从一个点列表中连续绘制直线段
  • pygame.draw.aaline:  绘制一根平滑的线(反锯齿)
  • pygame.draw.aalines:  绘制一系列平滑的线

  大多数函数接受一个width参数表示线条(画笔)的宽度,如果该值设置为0,则表示填充整个图形。

  所有的绘制函数都会尊重指定的Surface编辑区,而且会限制在这个区域内。函数的返回值是一个Rect,表示的是受影响的Surface区域。(原文:All the drawing functions respect the clip area for the Surface, and will be constrained to that area. The functions return a rectangle representing the bounding area of changed pixels.)

  颜色参数通常是一个RGB三元组(R, G, B)。也可以接受RGBA形式的颜色值。

  这些绘制函数会临时锁定所操作的Surface对象。

 

pygame.draw.rect

  原型:pygame.draw.rect(Surface, color, Rect, width=0): return Rect

  用途:在Surface上绘制矩形,第二个参数是线条(或填充)的颜色,第三个参数Rect的形式是((x, y), (width, height)),表示的是所绘制矩形的区域,其中第一个元组(x, y)表示的是该矩形左上角的坐标,第二个元组 (width, height)表示的是矩形的宽度和高度。width表示线条的粗细,单位为像素;默认值为0,表示填充矩形内部。

  此外,Surface.fill 同样可以用来绘制填充矩形。

pygame.draw.polygon

  原型:pygame.draw.polygon(Surface, color, pointlist, width=0): return Rect

  用途:polygon是多边形,这个函数和rect类似,除了第三个参数。顾名思义,pointlist是一个坐标点的列表,表示多边形的各个顶点。

pygame.draw.circle

   原型:pygame.draw.circle(Surface, color, pos, radius, width=0): return Rect

  用途:用于绘制圆形。第三个参数pos是圆心的位置坐标,radius指定了圆的半径。

pygame.draw.ellipse

import pygame from random import* d=0 t=25 s=0 v=0 h=1 b=0 x=35 j=0 a=0 r=1 q=1 w=1 pygame.init() s=pygame.display.set_mode((800,400)) l=pygame.Rect(600,270,70,70) n=pygame.Rect(720,270,70,70) p=pygame.Rect(50,290,50,50) c=pygame.Rect(0,340,800,70) z=pygame.Rect(0,0,70,70) a=1 while True: z.x+=10*a if z.x<=0: z.x=0 a=1 if z.x+70>=800: z.x=730 a=-1 if randint(1,9)==4: m=pygame.Rect(z.x+29,z.y,12,12) for i in range(300): m.y+=1 pygame.draw.rect(s,(255,255,255),m) if m.colliderect(p): v=2 pygame.draw.rect(s,(255,0,0),c) t-=1 x-=1 if t==0: m=pygame.Rect(l.x,l.y+29,12,12) for i in range(480): t=25 m.x-=1 pygame.draw.rect(s,(255,255,255),m) if m.colliderect(p): v=2 if x==0: x=35 m=pygame.Rect(n.x,n.y+29,12,12) for i in range(480): m.x-=1 pygame.draw.rect(s,(255,255,255),m) if m.colliderect(p): v=2 k=pygame.key.get_pressed() if k[pygame.K_s]: p=pygame.Rect(p.x,315,50,25) o=pygame.Rect(p.x,p.y+7,12,12) elif k[pygame.K_a]and p.x!=0: p.x-=5 p=pygame.Rect(p.x,290,50,50) o=pygame.Rect(p.x,p.y+15,12,12) elif k[pygame.K_d]and p.x!=750: p.x+=5 p=pygame.Rect(p.x,290,50,50) o=pygame.Rect(p.x,p.y+15,12,12) else: p=pygame.Rect(p.x,290,50,50) o=pygame.Rect(p.x,p.y+15,12,12) if k[pygame.K_w]: o=pygame.Rect(p.x+19,p.y,12,12) h=0 if k[pygame.K_k]: if h==0: h=1 for i in range(290): o.y-=1 pygame.draw.rect(s,(255,255,255),o) if o.colliderect(z): if j==10: z=pygame.Rect(400,-68785756870,70,70) r=0 else: j+=1 break else: for i in range(380): o.x+=1 pygame.draw.rect(s,(255,255,255),o) if o.colliderect(l): if d==15: d=0 q=0 l=pygame.Rect(400,-230,70,70) else: d+=1 break if o.colliderect(n): if d==15: w=0 n=pygame.Rect(400,-230,70,70) else: d+=1 break pygame.draw.rect(s,(0,255,0),l) pygame.draw.rect(s,(0,255,0),n) pygame.draw.rect(s,(0,0,255),p) pygame.draw.rect(s,(255,255,255),z) pygame.display.flip() pygame.time.Clock().tick(30) if r==0 and q==0 and w==0: print('Game Win') pygame.quit() if v==2: print('Game Over') pygame.quit() s.fill((0,0,0)) 如何给这段代码加上玩家玩游戏时一直播放背景音乐,并且与游戏不冲突的功能
最新发布
07-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值