当前位置:   article > 正文

pygame入门(2)_pygame.draw.circle

pygame.draw.circle

Surface对象

窗口屏幕是surface对象,图片也是surface对象,什么是surface呢,他又有哪些功能呢?

pygame.Surface下的功能函数其实都是Surface类的成员函数,Surface对象其实就是指pygame.Surface类的对象

Surface的定义

Surface是一块矩形显示区域,用来表示任意图像,它具有固定的宽度、高度、像素格式。也可以把Surface理解为一张画布,在上面可以做很多事情,如绘制图像、绘制线条和文字、填充颜色等;还可以把当前的Surface作为图像复制到另一个Surface上。

在pygame中,所有与显示相关的区域都被表示为Surface

创建Surface

  • 通过pygame.display.set_mode()返回的display surface创建Surface,它是一个特殊的Surface对象

  • 通过pygame.image.load()返回的image surface 创建Surface,它也是一个Surface对象

  • 通过Surface类的构造函数创建Surface对象,该方式会默认创建一个空的Surface对象,内部都被初始化为黑色,其构造函数包含多个参数,其中只有分辨率是必须指定的

    1. Surface((width,height),flags=0,depth=0,masks=None)
    2. Surface((width,height),flags=0,Surface)
  • 使用pygame.font.Font.render()创建Surface对象,该方式将在需要显示文字时用到,该函数可以创建一个包含指定文字的Surface对象。

绘制Surface

两个绘制函数

  1. fill(color,rect=None,special_flags=0)
  2. #可以向Surface填充指定颜色,第二个参数rect代表颜色填充目标区域,没指定填充整个Surface
  3. blit(source,dest,area=None,special_flags=0)
  4. #类似copy,把一个Surface绘制到另一个Surface,source为源Surface,第二个参数为待绘制区域的左上
  5. #角坐标,可以取值一个点或者Rect对象;第三个area代表源Surface中需要绘制的区域,即可以把源
  6. #Surface中的一部分区域绘制到目标Surface,没有指定参数则默认整个源Surface绘制到目标Surface
  7. #前面两个参数必须指定

转换Surface像素格式

使用blit()函数绘制到目标Surface时,如果两者像素格式不一致,则blit()函数内部会自动进行像素格式转换。一般情况下,blit()每帧都会被调用,如果调用一次就进行一次格式转换,则会花费大量时间。因此创建源Surface后,执行blit()函数前,需要把源Surface转换成和屏幕display surface一致的像素格式,这样可以大幅加快blit的过程,提升程序性能

  1. convert()
  2. #该函数把当前Surface转换成屏幕Surface(display surface)一致的像素格式,返回值为转换后的
  3. #Surface()
  4. convert_alpha()
  5. #功能相似但是它会保留像素的alpha值

如果使用的图片带有透明度,则必须用该函数进行转换,转换后仍然保留图片原来的透明效果,如果使用convert()则会丢失图片原本的透明信息

  1. Image1=pygame.image.load("xxx.png").convert()
  2. #不带透明效果
  3. Image2=pygame.image.load("xxx.png").convert_alpha()
  4. #保留透明效果

获取Surface属性

Surface就是一个用来显示的矩形区域,所以应该具备的信息是:高度、宽度、坐标等信息;pygame.Surface模块也提供了一些函数用来获取信息:

  1. get_width()
  2. #获取宽度,单位为像素
  3. get_height()
  4. #获取高度,单位为像素
  5. get_size()
  6. #获取尺寸,返回值为:(width,height)二元组,单位为像素
  7. get_rect(**kwargs)
  8. #获取所在矩形区域,返回值为一个Rect对象,默认返回(0,0)、宽度高度与Surface相同的矩形Rect对象

图片加载

pygame.image模块提供了一些与图片加载、保存、转换等相关功能,下面介绍常见图片加载功能

图片加载所使用函数为:

  1. pygame.image.load(filename)
  2. #可以绝对路径也可以相对路径,返回值是surface对象
  3. #支持的图片格式JPG\PNG\GIF(不包括动画)\PCX\TGA(未压缩)\TIF\LBM\PBM\PGM\PPM\XPM格式
  4. get_extended()
  5. #判断对扩展图片支持格式

图形绘制

屏幕绘制一般用pygame.Surface中的fill() and blit()函数,但是绘制线条和图形用的是pygame.draw模块的函数

绘制直线

  1. line(Surface,color,start_pos,end_pos,width=1)
  2. #画直线,起点坐标为start_pos,终点坐标为end_pos取值为二元组,width是粗细程度

Surface表示画布

  1. aaline(Surface,color,startpos,endpos,blend=1)
  2. #画的是抗锯齿后的折线,没有width无法设置粗细,blend表示是否打开直线段边缘的融合效果
  3. pygame.draw.line(screen,"red",(0,0),(50,50),2)
  4. pygame.draw.aaline(screen,"yellow",(0,0),(500,500))

绘制折线

  1. lines(Surface,color,closed,pointlist,width=1)
  2. #参数pointlist构成折线的点的坐标的列表,表中所有相邻的两个点都会连接起来;
  3. #参数Surface上绘制一条折线,参数closed表示折线是否封闭,如果为True。则第一个点和最后点会连接起来
  4. pygame.draw.lines(screen,"blue",True,[(0,0),(100,50),(79,50),(200,450)])
  5. #抗锯齿版本
  6. aalines(Surface,color,closed,pointlist,blend=1)

绘制矩形

  1. rect(Surface,color,Rect,width=0)
  2. #Rect可以是一个四元组(a,b,c,d)左上角横坐标,纵坐标,宽度,高度 width外边框粗细如果为0则填充矩形

绘制多边形

  1. polygon(Su日法测,color,point list,width=0)
  2. #pointlist表示顶点坐标列表,可以拿来画三角形

绘制圆形

  1. circle(Surface,color,pos,radius,width)
  2. #pos代表圆心坐标,radius代表圆的半径
  3. pygame.draw.circle(screen,"green",(250,250),50,0)

绘制椭圆形

  1. ellipse(Surface,color,Rect,width=0)
  2. Rect表示椭圆的外接矩形

绘制弧线

  1. arc(Surface,color,Rect,width=0)
  2. #弧线当作椭圆一部分绘制,需要外接矩形,start_angle表示初始弧度和终止弧度
  3. #(0,2Π)

实例:

  1. from math import pi
  2. import pygame
  3. import sys
  4. BLACK=(0,0,0)
  5. WHITE=(255,255,255)
  6. BLUE=(0,0,255)
  7. GREEN=(0,255,0)
  8. RED=(255,0,0)
  9. def main():
  10.    pygame.init()
  11.    #绘制一个600*600的屏幕
  12.    screen=pygame.display.set_mode((600,600))
  13.    #起名
  14.    pygame.display.set_caption("Draw Shapes")
  15.    #游戏循环
  16.    while True:
  17.        for event in pygame.event.get():
  18.            if event.type in (pygame.QUIT,pygame.KEYDOWN):
  19.                pygame.quit()
  20.                sys.exit()
  21.            #填充颜色
  22.            screen.fill(WHITE)
  23.            #画直线
  24.            pygame.draw.line(screen,RED,(20,80),(160,0))
  25.            #画抗锯齿直线
  26.            pygame.draw.aaline(screen,GREEN,(20,100),(160,20))
  27.            #画折线
  28.            pygame.draw.lines(screen,BLACK,False,((20,140),(50,180),(160,60),(220,80)))
  29.            #画抗锯齿折线
  30.            pygame.draw.aalines(screen,GREEN,True,((30,320),(110,200),(190,320)))
  31.            #画直线
  32.            pygame.draw.lines(screen,RED,True,((30,320),(110,200),(190,320)),2)
  33.            #画矩形
  34.            pygame.draw.rect(screen,BLACK,(30,380,160,40),1)
  35.            pygame.draw.rect(screen,BLACK,(30,440,160,40))
  36.            #画多边形
  37.            pygame.draw.polygon(screen,BLUE,((20,580),(60,500),(100,580)),2)
  38.            pygame.draw.polygon(screen,BLUE,((120,580),(160,500),(200,580)))
  39.            #画圆
  40.            pygame.draw.circle(screen,GREEN,(360,60),60,1)
  41.            pygame.draw.circle(screen,GREEN,(500,60),60)
  42.            #画椭圆
  43.            pygame.draw.ellipse(screen,RED,(330,160,60,180),2)
  44.            pygame.draw.ellipse(screen,RED,(470,160,60,180))
  45.            #画弧线
  46.            pygame.draw.arc(screen,BLACK,(310,400,120,100),pi,2*pi,2)
  47.            pygame.draw.arc(screen,BLUE,(430,400,120,100),0,pi,2)
  48.            #更新
  49.            pygame.display.update()
  50. #运行时启动main()方法
  51. if __name__=="__main__":
  52.    main()

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/154558
推荐阅读
相关标签
  

闽ICP备14008679号