pygame中人物上下左右移动及翻转,背景透明化
所谓人物的移动,其实就是让我们原绘制的图片不再显示,再要移动的地方绘制一个新的图片。这里我们用这只小猫的图片来代替人物角色。再选取人物角色图片时,建议大家采取正方形大小的尺寸,方便后面的坐标计算,背景最好是纯黑或者纯白,方便背景透明化处理。
先把程序主干写出来
import time,sys
import pygame
from pygame.locals import *
import math
pygame.init()#游戏初始化
screen = pygame.display.set_mode(size=(1400,800))#设置屏幕大小
pygame.display.set_caption('小游戏')#标题名
cat = pygame.image.load('cat.png')#加载小猫图片
cat_ = pygame.transform.scale(cat,(100,100)).convert()#这步是把小猫图片大小转化了,并让它可以自适应这个大小。这里是弄成了100*100大小的正方形
cat_x = 550#小猫的横坐标
cat_y = 350#小猫的竖坐标
WHITE = [255, 255, 255]#表示白色后续使用
BLACK = [0,0,0]#表示黑色
while True :#主循环for event in pygame.event.get() :#键盘事件if event.type == QUIT :pygame.quit()sys.exit()
我们先创建一个白色的画布,把我们的小猫在上面绘制出来。需要在主循环中增加 :
while True :screen.fill(WHITE)#把我们创建的屏幕全涂成白色的screen.blit(cat_,(cat_x,cat_y))#在此坐标出绘制我们的小猫,加载的小猫是已经转化过格式的for event in pygame.event.get() :if event.type == QUIT :pygame.quit()sys.exit()pygame.display.update()#这里一定要更新屏幕,不更新肯定没显示
此时我们运行下程序,可以看到我们画出的小猫:
这里我们很快发现了问题,小猫周围背景是黑的,而画布背景是白的,这样看着很别扭,我们想要的知识图片中里面红色的小猫。此时我们可以用set_colorkey函数来把这个黑色背景透明化。
WHITE = [255, 255, 255]#表示白色后续使用
BLACK = [0,0,0]#表示黑色
cat_.set_colorkey((BLACK))#把小猫的黑色背景透明化
我们再看下效果:
效果很好,小猫周围的黑色背景都没了。
接下来我们编写让小猫移动的部分,在这之前,我们想先再之前建立的白色画布上加上横线竖线以方便我们对其坐标的观察
for event in pygame.event.get() :#键盘事件if event.type == QUIT :pygame.quit()sys.exit()for i in range(0,1401,100) :pygame.draw.line(screen,BLACK,(i,0),(i,800),3)#画线方法for i in range(0,801,100) :pygame.draw.line(screen,BLACK,(0,i),(1400,i),3)
pygame.draw.line(screen,BLACK,(i,0),(i,800),3)#画线方法,参数一表示花在画布上,第二个参数表示线条颜色,两个坐标分别为线段的起始以及终止坐标,最后的数字表示的线条粗细
补充说明:
pygame.draw.lines |
绘制多个连续的直线段 |
pygame.draw.aaline |
绘制一条消除锯齿的直线 |
pygame.draw.aalines |
绘制多个连续的直抗锯齿线段 |
接下来我们运行下程序,看看画完线条后的效果
可以看到线条都出来了,我们的猫也正好坐落在焦点上(如果不是,自己可以修改下前面的小猫坐标)
我们前面画的线条间隔是100,所以我们让我们的小猫每次也移动100的距离,这样小猫每次移动完正好坐落在焦点上。
if event.type == QUIT :pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:cat_x -= 100if event.key == pygame.K_RIGHT:cat_x += 100if event.key == pygame.K_UP:cat_y -= 100if event.key == pygame.K_DOWN:cat_y += 100
运行程序后我们发现,小猫可以通过按上下左右键移动了。
但是,如果我们一直按左或者按右什么的想没想过小猫会跑出画布去不再显示。所以我们要做一个越界处理,
if cat_x>1400 :cat_x = 1350if cat_x<0 :cat_x = -50if cat_y<0 :cat_y = -50if cat_y>800 :cat_y = 750
这样不管我们怎样移动,小猫都会在屏幕中,不会消失了。
不过我们又发现了问题,小猫在向右移动时,它的脸依然是朝左的,这不科学,我们要改成向右走脸是朝右的。这就需要翻转图片
cat_180 = pygame.transform.flip(cat_,True,False)#脸朝右
cat_90 = pygame.transform.rotate(cat_,-90)#脸朝上
cat_270 = pygame.transform.rotate(cat_,90)#脸朝下
pygame.transform.flip()中第一个参数为需要翻转的图像,第二个为是否左右镜像翻转,第三个为是否上下翻转。
他们的效果图为:
这下我们的效果图都准备好了
接下来我们把他们应用到我们的程序当中即可
整个程序代码如下:
import time,sys
import pygame
from pygame.locals import *
import math
pygame.init()#游戏初始化
screen = pygame.display.set_mode(size=(1400,800))#设置屏幕大小
pygame.display.set_caption('小游戏')#标题名
cat = pygame.image.load('cat.png')
cat_ = pygame.transform.scale(cat,(100,100)).convert()
WHITE = [255, 255, 255]#表示白色后续使用
BLACK = [0,0,0]#表示黑色
cat_.set_colorkey((BLACK))
cat_180 = pygame.transform.flip(cat_,True,False)
cat_90 = pygame.transform.rotate(cat_,-90)
cat_270 = pygame.transform.rotate(cat_,90)
cat_x = 550
cat_y = 350
flag = 0
while True :#主循环screen.fill(WHITE)#把我们创建的屏幕全涂成白色的if flag == 0:screen.blit(cat_, (cat_x, cat_y))if flag-1 == 0 :screen.blit(cat_, (cat_x, cat_y))if flag-2 == 0 :screen.blit(cat_180,(cat_x, cat_y))if flag-3 == 0 :screen.blit(cat_90,(cat_x, cat_y))if flag-4 == 0 :screen.blit(cat_270, (cat_x, cat_y))for event in pygame.event.get() :#键盘事件if event.type == QUIT :pygame.quit()sys.exit()if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:cat_x -= 100flag = 1if event.key == pygame.K_RIGHT:cat_x += 100flag = 2if event.key == pygame.K_UP:cat_y -= 100flag = 3if event.key == pygame.K_DOWN:cat_y += 100flag = 4for i in range(0,1401,100) :pygame.draw.line(screen,BLACK,(i,0),(i,800),3)for i in range(0,801,100) :pygame.draw.line(screen,BLACK,(0,i),(1400,i),3)if cat_x > 1400:cat_x = 1350if cat_x < 0:cat_x = -50if cat_y < 0:cat_y = -50if cat_y > 800:cat_y = 750pygame.display.update()
感谢各位小伙伴的支持与观看。
pygame中人物上下左右移动及翻转,背景透明化相关推荐
- [Python中矩阵上下左右翻转(np.flip)]
[Python中矩阵上下左右翻转(np.flip)] 现代编程语言和相关库的发展,使得数值计算和数据处理变得更加便捷和高效.在Python中,NumPy库是众多数据科学和工程应用领域的重要支撑之一.其 ...
- pygame中的特殊对象与模块
目录 pygame模块概览 一.Surface对象 二.Rect对象 三.Color对象 四.pygame模块 五.locals模块 六.display模块 七.event模块 八.sprite模块 ...
- pygame中blit()的参数的说明以及脏矩形动画形成的简要说明
pygame中surface的blit()想必是游戏入门经常用到的方法,但是看了网上的内容,都没什么具体描述的文章,所以斗胆来做个说明,有错的地方敬请指出,毕竟我也才用pygame库没几天. 假设B是 ...
- pygame中文文档 四
display | Pygame中文文档 pygame.display Pygame 中用于控制窗口和屏幕显示的模块. 注:为了适应语境,display 在该文档中有时翻译为"显示" ...
- 怎么把人物抠图到另一个背景上?这几种抠图方法很实用
怎么把人物抠图放到另一个背景上呢?抠出人物图像可以轻松地将人物放入不同的背景中,从而创造出更加丰富的视觉效果.通过更改背景,可以改变照片的整体氛围,带来不同的感受和体验.也能更好地突出人物本身,使其更 ...
- pygame控制飞船上下左右移动
小白@HUST pygame中控制飞船上下左右运动问题 创建飞船左右移动的能力之后,想继续创建飞船上下移动的能力,可是出现问题,先贴上代码片段 #飞船属性 import pygame class Sh ...
- Pygame中的Sprite类
Sprite源代码 pygame中sprite模块的Sprite类是一个简单的基类,它的源代码如下: class Sprite(object):def __init__(self, *groups): ...
- 在pygame中实现菜单,支持鼠标和键盘操作
python中的pygame库,并没有传统菜单功能,正好手边有一项目,需要在pygame中实现菜单功能.目前,项目已经完成,将其中实现菜单功能的约400行代码摘取出来,供大家参考. 该菜单完全依托py ...
- 一文读懂AI如何判断照片中人物的社交关系
本文经AI新媒体量子位(公众号ID:qbitai)授权转载,转载请联系出处 本文共2256字,建议阅读6分钟. 本文为你介绍AI判断人物社交关系的原理.方法和效果. 人类,天生就有八卦嗅觉. 比如匡扶 ...
最新文章
- pom配置之:distributionManagementsnapshot快照库和release发布库
- 间谍新高度:航空航天探测器被当作间谍武器
- 2.13 向量化 Logistic 回归-深度学习-Stanford吴恩达教授
- java枚举.toString_java – Make Enum.toString()本地化
- 强大的SqlCacheDependency
- 搭建基础架构-Order
- 【QGIS入门实战精品教程】4.1:QGIS栅格数据地理配准完整操作流程
- 在Eclipse中查看JDK类库的源代码
- MySQL 之 information_schema
- FCK编辑器去掉html标签
- 第一节:Scrapy开源框架初探
- Python 从入门到进阶
- java答题小程序代码_分享一个java技术开发的微信答题小程序仿头脑王者源码
- 广州地铁14号线新市墟站开建,白云区居民即将开启双线换乘模式!
- 通用办公报表打印软件
- xp服务器远程连接设置方法,Windows XP远程桌面连接设置图解教程
- MATLAB中有关矩阵特征值和特征向量的计算
- android app 用什么语言开发的
- label标签中for的使用
- games101 1-2