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()

素材:ok1.jpg

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画一个点_pygame学习笔记(2):画点的三种方法和动画实例相关推荐

  1. 计算机视觉与图像处理学习笔记之人脸识别的三种方法

    人脸检测是指在图像中完成人脸定位的过程,而人脸识别是在人脸检测的基础上进一步判断人的身份,OpenCV提供了三种人脸识别的方法:EigenFaces(特征脸).FisherFaces(人鱼脸).Loc ...

  2. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  3. 如何在一台计算机上使用两个网络,一个宽带如何装两个路由器?这三种方法都可以使用...

    原标题:一个宽带如何装两个路由器?这三种方法都可以使用 实现的方法有三种: 二级路由器.路由器改当交换机.无线桥接这三种,之前我也曾提到过,今天我们再来总结下两台路由器连接的三种方法. 一.无线路由器 ...

  4. python recv_python网络编程调用recv函数完整接收数据的三种方法

    最近在使用python进行网络编程开发一个通用的tcpclient测试小工具.在使用socket进行网络编程中,如何判定对端发送一条报文是否接收完成,是进行socket网络开发必须要考虑的一个问题.这 ...

  5. python 多因素方差分析_多因素方差分析估计平方和的三种方法

    在做多因素方差分析时,有三种方法计算平方和(以模型Y ~ A + B + A:B为例,即先输入A,再输入B,最后输入交互项A:B):Type Ⅰ Sums of Squares(Type1, sequ ...

  6. 284、一个宽带如何装两个路由器?这三种方法都可以使用

    很多朋友可能存这种情况,家里房间比较多,之前已经安装了一个无线路由器,但是在某些房间信号很差,想再增加一个无线路由器怎么办? 这个问题,也有不少朋友在问,其实实现的方法有好几种,实现的方法有三种: 二 ...

  7. mongo学习笔记四:Mongodb的三种集群(Replica Set)

    Replica Set    中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据 ...

  8. python的try和except_Python用try except处理程序异常的三种方法总结

    Python用try except处理程序异常方法分析 本文实例讲述了Python使用try except处理程序异常的三种常用方法.分享给大家供大家参考,具体如下: 如果你在写python程序时遇到 ...

  9. python写一个类_python3学习笔记--002--写一个类

    代码: [laolang@localhost classtest]$ cat test.py #!/usr/bin/env python class person: def __init__(self ...

最新文章

  1. intouch负值显示0_excel 应用中计算结果显示为负数,使负数显示为0应如何操作?...
  2. MySql数据备份与恢复
  3. 【VMCloud云平台】私有云门户第一朵Web云(三)
  4. android git提交整个项目_使用子模块和子树来管理 Git 项目 | Linux 中国
  5. java swing removeall_java中JFrame中函数removeAll的用法 | 学步园
  6. java 对象初始化过程_Java——对象初始化顺序使用详解
  7. 楼房顶顶面起渣是何原因?怎么修补?
  8. 3航空公司客户价值分析
  9. java hook api 实现封包截取_hook 封包 截取WSASend实例
  10. 浏览器是怎样工作的?
  11. 针对RK3328平台搭建支持KVM的Linux环境
  12. css中vh/vw与%的区别
  13. SpringBoot从入门到入土 (6)HelloWorldSpringBoot项目开发实战
  14. 如何在 Excel VBA 中插入行
  15. UNR #1 火车管理
  16. Ubuntu14.04停留在开机logo界面
  17. 把生活过成 你想要的样子
  18. Task3 | HLM | 高收入个体更吝啬吗
  19. 网易邮箱中非常实用的工具,手机、IP等归属地
  20. 2022-2028全球与中国连续血糖监测系统市场现状及未来发展趋势

热门文章

  1. 关于删除数据仓库的数据
  2. Linux开发常见问题:GCC:链接器输入文件未使用,因为链接尚未完成
  3. Ubuntu linux 关机、重启、注销 命令
  4. html 分级切换菜单_FL studio系列教程(十六):FL Studio查看菜单讲解
  5. NLP jieba分词源码解析
  6. mysql 存储过程 select 循环_简简单单储存过程——循环一个select结果集
  7. zblog php版调用代码,zblog PHP分类列表调用方法
  8. 多个mysql 环境_关于几个MySQL环境问题的对比
  9. connect: 网络不可达_Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制
  10. php制表网页打印到a4纸,A4纸网页打印 html网页页面的宽度设置成多少