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实现简单的socket server实例
Apr 29 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
python文本数据处理学习笔记详解
Jun 17 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
python 生成任意形状的凸包图代码
Apr 16 Python
django正续或者倒序查库实例
May 19 Python
Python 如何批量更新已安装的库
May 26 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
Jun 29 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP动态变静态原理
2006/11/25 PHP
PHP如何使用Memcached
2016/04/05 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
javascript引导程序
2008/10/26 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
跟老齐学Python之Import 模块
2014/10/13 Python
使用requests库制作Python爬虫
2018/03/25 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
Python运算符+与+=的方法实例
2021/02/18 Python
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
出纳岗位职责模板
2013/11/27 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
酒店总经理岗位职责
2014/03/17 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
2014会计年终工作总结
2014/12/20 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书