专栏首页Urlteampygame-游戏开发学习笔记(七)–pygame.draw,画图。

pygame-游戏开发学习笔记(七)–pygame.draw,画图。

使用pygame.draw×××画图.代码在github:7.draw

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

函数

作用

rect

绘制矩形

polygon

绘制多边形(三个及三个以上的边)

circle

绘制圆

ellipse

绘制椭圆

arc

绘制圆弧

line

绘制线

lines

绘制一系列的线

aaline

绘制一根平滑的线

aalines

绘制一系列平滑的线

pygame.draw.rect

用法:pygame.draw.rect(Surface, color, Rect, width=0)

pygame.draw.rect在surface上画一个矩形,除了surface和color,rect接受一个矩形的坐标和线宽参数,如果线宽是0或省略,则填充。我们有一个另外的方法来画矩形——fill方法,如果你还记得的话。事实上fill可能还会快一点点,因为fill由显卡来完成。

pygame.draw.polygon

用法:pygame.draw.polygon(Surface, color, pointlist, width=0)

polygon就是多边形,用法类似rect,第一、第二、第四的参数都是相同的,只不过polygon会接受一系列坐标的列表,代表了各个顶点。

pygame.draw.circle

用法:pygame.draw.circle(Surface, color, pos, radius, width=0)

很简单,画一个圆。与其他不同的是,它接收一个圆心坐标和半径参数。

pygame.draw.ellipse

用法:pygame.draw.ellipse(Surface, color, Rect, width=0)

你可以把一个ellipse想象成一个被压扁的圆,事实上,它是可以被一个矩形装起来的。pygame.draw.ellipse的第三个参数就是这个椭圆的外接矩形。

pygame.draw.arc

用法:pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width=1)

arc是椭圆的一部分,所以它的参数也就比椭圆多一点。但它是不封闭的,因此没有fill方法。start_angle和stop_angle为开始和结束的角度。

pygame.draw.line

用法:pygame.draw.line(Surface, color, start_pos, end_pos, width=1)

我相信所有的人都能看明白。

pygame.draw.lines

用法:pygame.draw.lines(Surface, color, closed, pointlist, width=1)

closed是一个布尔变量,指明是否需要多画一条线来使这些线条闭合(感觉就和polygone一样了),pointlist是一个点的数组。

上面的表中我们还有aaline和aalines,玩游戏的都知道开出“抗锯齿(antialiasing)”效果会让画面更好看一些,模型的边就不会是锯齿形的了,这两个方法就是在画线的时候做这事情的,参数和上面一样,省略。

#!/usr/bin/env python
#coding:utf-8
import pygame
from pygame.locals import *
from sys import exit 
from random import *
from math import pi

pygame.init()
screen = pygame.display.set_mode((1024,800),0,32)
points = []

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()
        if event.type == KEYDOWN:
            points =[]
            screen.fill((255,255,255))
        if event.type == MOUSEBUTTONDOWN:
            screen.fill((255,255,255))
            
            rc = (randint(0,255),randint(0,255),randint(0,255))
            rp = (randint(0,1023),randint(0,799))
            rs = (639-randint(rp[0],1023),799-randint(rp[1],799))
            pygame.draw.rect(screen,rc,Rect(rp,rs))

            rc = (randint(0,255),randint(0,255),randint(0,255))
            rp = (randint(0,1023),randint(0,799))
            rr = randint(1,200)
            pygame.draw.circle(screen,rc,rp,rr)


            x,y = pygame.mouse.get_pos()
            points.append((x,y))

            angle = (x/639.)*pi*2.
            pygame.draw.arc(screen,(0,0,0),(0,0,1024,799),0,angle,3)

            pygame.draw.ellipse(screen,(0,255,0),(0,0,x,y))

            pygame.draw.line(screen,(0,0,255),(0,0),(x,y))
            pygame.draw.line(screen,(255,0,0),(1024,800),(x,y))
            
            if len(points)>1:
                pygame.draw.lines(screen(155,155,0),False,points,2)

            for p in points:
                pygame.draw.circle(screen,(155,155,155),p,3)
    pygame.display.update()

运行这个程序,在上面点鼠标就会有图形出来了;按任意键可以重新开始。另外这个程序只是各个命令的堆砌,并不见得是一个好的程序代码。

到这次为止,文字、颜色、图像、图形都讲好了,静态显示的部分都差不多了。然而多彩的游戏中只有静态的东西实在太让人寒心了(GalGame大多如此),下次开始我们学习游戏中的动画制作。

原创文章,转载请注明: 转载自URl-team

本文链接地址: pygame-游戏开发学习笔记(七)–pygame.draw,画图。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • pygame-游戏开发学习笔记(二)–模块表与背景图样例。

    if pygame.font is None: print "The font module is not available!" exit()

    十四君
  • pygame-游戏开发学习笔记(五)–pygame.Font,字体与中文以及错误检测的问题

    本节内容基本属于干货,代码在github上:包括了字体和图片文件可以直接拉下来测试https://github.com/luyishisi/The_crawle...

    十四君
  • pygame-游戏开发学习笔记(三)–event事件捕捉

    事件是什么,其实从名称来看我们就能想到些什么,而且你所想到的基本就是事件的真正意思了。

    十四君
  • 从零开始学习PYTHON3讲义(十五)让画面动起来

    虽然看起来绘图和音乐并不相关,但是听过了上一讲的内容你一定知道,这是游戏编程中四个需要处理内容的两部分,这两部分必须同时、并行的处理,不能因为某一项计算的拖延,...

    俺踏月色而来
  • pygame系列_原创百度随心听音乐播放器_完整版

     1.当鼠标移动到黄色圆区域,会展示出我的相片和'Yes,You are Luck:)'字样

    Hongten
  • pygame系列_draw游戏画图

    =================================================

    Hongten
  • 你知道Linux系统中find命令的使用方法吗?

    今天小编带给大家的文章是关于Linux系统中find命令的使用方法。熟悉Linux的小伙伴可能会对这个命令有所了解,但小编相信很多小伙伴对它没有深入的了解,下面...

    小小科
  • Hive metastore整体代码分析及详解

      从上一篇对Hive metastore表结构的简要分析中,我再根据数据设计的实体对象,再进行整个代码结构的总结。那么我们先打开metadata的目录,其目录...

    用户3003813
  • 破解某滑动验证码

    首先申明:历时八天,本文作者(在多位好友的帮助下)已经成功破解该验证码成功率73%,但是出于网络安全与知识产权等因素(破解只是兴趣,不能咂人家饭碗),不会提供完...

    十四君
  • 【python-opencv】绘图(目标检测框及其置信度等)

    要绘制多边形,首先需要顶点的坐标。将这些点组成形状为ROWSx1x2的数组,其中ROWS是顶点数,并且其类型应为int32。在这里,我们绘制了一个带有四个顶点的...

    绝命生

扫码关注云+社区

领取腾讯云代金券