pygame学习笔记(2):画点的三种方法和动画实例


Posted in Python onApril 15, 2015

1、单个像素(画点)

利用pygame画点主要有三种方法:
方法一:画长宽为1个像素的正方形

import pygame,sys

pygame.init()

screen=pygame.display.set_caption('hello world!')

screen=pygame.display.set_mode([640,480])

screen.fill([255,255,255])

pygame.draw.rect(screen,[0,0,0],[150,50,1,1],1) #画1*1的矩形,线宽为1,这里不能是0,因为1*1无空白区域。

pygame.display.flip()

while True:

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

方法二:画个直径为1的圆

import pygame,sys

pygame.init()

screen=pygame.display.set_caption('hello world!')

screen=pygame.display.set_mode([640,480])

screen.fill([255,255,255])

pygame.draw.circle(screen,[0,0,0],[150,200],1,1)

pygame.display.flip()

while True:

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

方法三:这种方法并不是画上去的,而是改变了surface上某个点的颜色,这样看上去像是画了一个点screen.set_at()。另外,如果要得到某个像素的颜色,可以使用screen.get_at()。
import pygame,sys

pygame.init()

screen=pygame.display.set_caption('hello world!')

screen=pygame.display.set_mode([640,480])

screen.fill([255,255,255])

screen.set_at([150,150],[255,0,0])#将150,150改为红色。

pygame.display.flip()

while True:

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

2、连接多个点形成线

pygame.draw.lines()方法可以将多个点连接成为线。该方法有5个参数:surface表面、颜色、闭合线或者非闭合线(如果闭合为True,否则为False),点的列表,线宽。pygame.draw.lines(surface,[color],False/True,plotpoints,1)。下面的例子画出了一条马路,具体如下:

import pygame,sys

def lineleft(): #画马路左边界

plotpoints=[]

for x in range(0,640):

y=-5*x+1000

plotpoints.append([x,y])

pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

pygame.display.flip()

def lineright():#画马路右边界

plotpoints=[]

for x in range(0,640):

y=5*x-2000

plotpoints.append([x,y])

pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

pygame.display.flip() 

def linemiddle():#画马路中间虚线

plotpoints=[]

x=300

for y in range(0,480,20):

plotpoints.append([x,y])

if len(plotpoints)==2:

pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

plotpoints=[]

pygame.display.flip()
pygame.init()

screen=pygame.display.set_caption('hello world!')

screen=pygame.display.set_mode([640,480])

screen.fill([255,255,255])

lineleft()

lineright()

linemiddle()

while True:

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

3、引用图像
在pygame中引用图像最简单的以夷伐夷是image函数。下面在马路的实例中,加入一辆汽车。首先pygame.image.load()函数从硬盘加载一个图像,并创建一个名为my_car的对象。这里,my_car是一个surface,不过是存在内存中,并未显示出来,然后用blit(块移)方法将my_car复制到screen表面上,从而显示出来。具体代码如下:

import pygame,sys

def lineleft():

plotpoints=[]

for x in range(0,640):

y=-5*x+1000

plotpoints.append([x,y])

pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

pygame.display.flip()

def lineright():

plotpoints=[]

for x in range(0,640):

y=5*x-2000

plotpoints.append([x,y])

pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

pygame.display.flip() 

def linemiddle():

plotpoints=[]

x=300

for y in range(0,480,20):

plotpoints.append([x,y])

if len(plotpoints)==2:

pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

plotpoints=[]

pygame.display.flip() 

def loadcar(): #载入car图像

my_car=pygame.image.load('ok1.jpg') #当前文件夹下的ok1.jpg文件

screen.blit(my_car,[320,320])

pygame.display.flip()
pygame.init()

screen=pygame.display.set_caption('hello world!')

screen=pygame.display.set_mode([640,480])

screen.fill([255,255,255])

lineleft()

lineright()

linemiddle()

loadcar()

while True:

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

pygame学习笔记(2):画点的三种方法和动画实例

素材:ok1.jpg

pygame学习笔记(2):画点的三种方法和动画实例

4、动画

计算机动画实际上就是把图像从一个地方移动到另一个地方,同时几个连接动作交待显示就会产生逼真的效果。因此,在做动画中,最基本要考虑的因素主要是三个,一是时间,什么时间移动,多长时间变下一个动作,二是位置,从什么位置到什么位置,三是动作,前后两个动作的连续性。在这个例子中,因为车是俯视的,所以车轮转动实际是看不到的,所以不用考虑连续动作的变化,而是只考虑车的位置和多长时间移动即可。第一步pygame.time.delay()来实现时间延迟;第二步利用pygame.draw.rect()把原来位置的图像覆盖掉;第三步screen.blit()在新位置引入图像。下面的例子实现了汽车从驶入到驶出的过程。

import pygame,sys

def lineleft():

    plotpoints=[]

    for x in range(0,640):

        y=-5*x+1000

        plotpoints.append([x,y])

    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

    pygame.display.flip()

def lineright():

    plotpoints=[]

    for x in range(0,640):

        y=5*x-2000

        plotpoints.append([x,y])

    pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

    pygame.display.flip()    

def linemiddle():

    plotpoints=[]

    x=300

    for y in range(0,480,20):

        plotpoints.append([x,y])

        if len(plotpoints)==2:

            pygame.draw.lines(screen,[0,0,0],False,plotpoints,5)

            plotpoints=[]

    pygame.display.flip() 

def loadcar(yloc):

    my_car=pygame.image.load('ok1.jpg')

    locationxy=[310,yloc]

    screen.blit(my_car,locationxy)

    pygame.display.flip()
    

if __name__=='__main__':

    pygame.init()

    screen=pygame.display.set_caption('hello world!')

    screen=pygame.display.set_mode([640,480])

    screen.fill([255,255,255])

    lineleft()

    lineright()

    linemiddle()
    while True:

        for event in pygame.event.get():

            if event.type==pygame.QUIT:

                sys.exit()

        for looper in range(480,-140,-50):

            pygame.time.delay(200)

            pygame.draw.rect(screen,[255,255,255],[310,(looper+132),83,132],0)

            loadcar(looper)
Python 相关文章推荐
python基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
总结用Pdb库调试Python的方式及常用的命令
Aug 18 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
Django中自定义查询对象的具体使用
Oct 13 Python
python实现超市商品销售管理系统
Oct 25 Python
Python numpy数组转置与轴变换
Nov 15 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
Pycharm常用快捷键总结及配置方法
Nov 14 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
python使用torch随机初始化参数
Mar 22 Python
python实现telnet客户端的方法
Apr 15 #Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 #Python
Python远程桌面协议RDPY安装使用介绍
Apr 15 #Python
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 #Python
使用Python构建Hopfield网络的教程
Apr 14 #Python
使用C语言扩展Python程序的简单入门指引
Apr 14 #Python
在Python中封装GObject模块进行图形化程序编程的教程
Apr 14 #Python
You might like
定义php常量的详解
2013/06/09 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python切换hosts文件代码示例
2013/12/31 Python
Python全局变量用法实例分析
2016/07/19 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
python实现抖音视频批量下载
2018/06/20 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
2018/06/26 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python turtle库的画笔控制说明
2020/06/28 Python
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
小学家长会邀请函
2014/01/23 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
python爬虫--selenium模块
2021/03/31 Python
nginx实现发布静态资源的方法
2021/03/31 Servers