Pygame第三课:移动加载的图片

目录

一、加载图片

1.1 pygame.image.load()

1.2 Surface.blit()

1.3 示例程序

二、移动图片

2.1 如何移动

2.2 消去痕迹

2.3 控制帧速率

三、解决异常

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环境变量问题

3.2 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

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!

Guess you like

Origin blog.csdn.net/Python_program/article/details/133235283