目录
3.3 NameError: name 'pygame' is not defined
人生苦短,我用Python!
一、加载图片
1.1 pygame.image.load()
pygame.image.load()函数可以加载一个图片,往往保存在一个变量中,参数为图片的路径(如果图片和程序在同一文件夹中时,可以只写图片名)。
1.2 Surface.blit()
blit()是对一个surface对象的方法,参数为图片对象(一般是提前加载好的)和图片左上角坐标。
1.3 示例程序
这个程序是在上篇博客中的程序增加来的。
"""
此程序摘自我的作品
"""
import pygame
pygame.init()
screen=pygame.display.set_mode([1500,1000])
pygame.display.set_caption("绝处逢生")
#设置颜色
DODGERBLUE=(30,144,255)
DODGERBLUE2=(0,114,225)
SPRINGGREEN2=(0,255,140)
BLACK=(10,10,10)
RED=(255,0,0)
WHITE=(255,255,255)
pygame.draw.line(screen, BLACK, (0, 700), (1500, 700), 20) #画线
pygame.draw.rect(screen, SPRINGGREEN2, (0, 700, 1500, 300), 0) #画长方形
pygame.draw.rect(screen, RED, (700, 0, 100, 50)) #画长方形
pygame.draw.rect(screen, DODGERBLUE2, (690, -10, 120, 70), 10) #画长方形
#加载图片
me=pygame.image.load("Run 2.png")
#显示图片
screen.blit(me,(750,500))
pygame.display.update()
二、移动图片
2.1 如何移动
我们往往会设一个表示X坐标的变量和一个表示Y坐标的变量,然后设置一个循环,不断的变化这两个变量(或变其中一个),将blit()方法第二个参数改为(表示X坐标的变量,表示Y坐标的变量)。示例如下(上面添加来的):
import pygame
pygame.init()
screen=pygame.display.set_mode([1500,1000])
pygame.display.set_caption("绝处逢生")
#设置颜色
DODGERBLUE=(30,144,255)
DODGERBLUE2=(0,114,225)
SPRINGGREEN2=(0,255,140)
BLACK=(10,10,10)
RED=(255,0,0)
WHITE=(255,255,255)
#加载图片
me=pygame.image.load("Run 2.png")
#设置坐标
picX = picY = 0
#循环
while True:
picX+=1
pygame.draw.line(screen, BLACK, (0, 700), (1500, 700), 20) #画线
pygame.draw.rect(screen, SPRINGGREEN2, (0, 700, 1500, 300), 0) #画长方形
pygame.draw.rect(screen, RED, (700, 0, 100, 50)) #画长方形
pygame.draw.rect(screen, DODGERBLUE2, (690, -10, 120, 70), 10) #画长方形
#显示图片
screen.blit(me,(picX,picY))
pygame.display.update()
2.2 消去痕迹
运行这段代码,我们会发现会出现一个问题:就是动画进行时会出现痕迹。那么,该如何消去它呢?
答案是用fill()方法。fill()是surface对象的方法,能填充surface对象,参数是RGB色值。
示例如下:
import pygame
pygame.init()
screen=pygame.display.set_mode([1500,1000])
pygame.display.set_caption("绝处逢生")
#设置颜色
DODGERBLUE=(30,144,255)
DODGERBLUE2=(0,114,225)
SPRINGGREEN2=(0,255,140)
BLACK=(10,10,10)
RED=(255,0,0)
WHITE=(255,255,255)
#加载图片
me=pygame.image.load("Run 2.png")
#设置坐标
picX = picY = 0
#循环
while True:
picX+=1
screen.fill(BLACK) #将screen填充黑色
pygame.draw.line(screen, BLACK, (0, 700), (1500, 700), 20) #画线
pygame.draw.rect(screen, SPRINGGREEN2, (0, 700, 1500, 300), 0) #画长方形
pygame.draw.rect(screen, RED, (700, 0, 100, 50)) #画长方形
pygame.draw.rect(screen, DODGERBLUE2, (690, -10, 120, 70), 10) #画长方形
#显示图片
screen.blit(me,(picX,picY))
pygame.display.update()
2.3 控制帧速率
我们发现,有的时候,程序会运行的很快,动画效果不明显,这个时候,就需要控制帧速率了。
帧速率是什么?帧速率,即一秒播放几帧图像,用于衡量动画的速度。
控制帧速率,首先要在开头添加上xx=pygame.time.Clock(),再循环中添加上xx.tick(帧速率)。
示例:
import pygame
pygame.init()
screen=pygame.display.set_mode([1500,1000])
pygame.display.set_caption("绝处逢生")
#设置颜色
DODGERBLUE=(30,144,255)
DODGERBLUE2=(0,114,225)
SPRINGGREEN2=(0,255,140)
BLACK=(10,10,10)
RED=(255,0,0)
WHITE=(255,255,255)
#加载图片
me=pygame.image.load("Run 2.png")
#设置时钟
timer=pygame.time.Clock()
#设置坐标
picX = picY = 0
#循环
while True:
picX+=1
screen.fill(BLACK) #将screen填充黑色
pygame.draw.line(screen, BLACK, (0, 700), (1500, 700), 20) #画线
pygame.draw.rect(screen, SPRINGGREEN2, (0, 700, 1500, 300), 0) #画长方形
pygame.draw.rect(screen, RED, (700, 0, 100, 50)) #画长方形
pygame.draw.rect(screen, DODGERBLUE2, (690, -10, 120, 70), 10) #画长方形
#显示图片
screen.blit(me,(picX,picY))
pygame.display.update()
timer.tick(60) #将帧速率控制在60帧每秒
三、解决异常
3.1 FileNotFoundError: No file 'xxx' found in working directory 'C:\Users\lion\AppData\Local\Programs\Python\Python38'.
这个问题有两个可能原因,我会分开慢慢谈。
3.1.1 路径问题
该问题很有可能是因为图片并没与程序在一起,将路径补全即可,或者移动图片到程序同一文件夹。
3.1.2 PATH环境变量问题
还有一种可能,就是你在下载时,没有勾选“Add Python x.x to PATH”,这样的话,你只能将路径全写了。
3.2 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
这个问题呢,是因为出现了“\”转义符,只需在路径前加上“r”就行了。
3.3 NameError: name 'pygame' is not defined
这个问题,就是你忘导入pygame了,在第一行加上import pygame即可。
人生苦短,我用Python!