Pygame中将鼠标形状设置为图片2-1

在Pygame中利用Sprite类的派生类将鼠标形状设置为图片,其原理就是将Sprite类的派生类对应图片的位置设置为鼠标的当前位置即可。其效果如图1所示。

图1 将鼠标设置为图片

从图1可以看出,鼠标的形状变为红色的×,该红色的×随着鼠标的移动而移动,相当于将鼠标的形状改为红色的×。

1 定义导入图片的方法

要将鼠标的形状改为图片,需要要导入该图片。因此,首先定义导入图片的方法,代码如图2所示。

图2 导入图片的代码

从图中代码可以看出,导入图片的方法的名字叫做load_image(),该方法的参数name表示要导入图片的路径。第4行待用通过pygame.image模块的load()方法导入图片,该方法的返回值image是一个Surface类型的变量,表示导入的图片。此时已经成功地导入了图片,为什么还有有接下来的5-7行代码呢?如果没有这几行代码,表示鼠标的图片显示的效果如图3所示。

图3 没有5-7行代码的显示效果

第5行代码,通过Surface类的实例image调用该类的convert()方法,将导入图片的像素格式转换为与image相同的像素格式,这样,在多次将image显示(blit)在Surface上时,会提升显示的速度,转换后的图片保存在image中;第6-7行代码设置Surface的colorkey。

相关链接1 colorkey,当将图片blit到Surface时,图片中与colorkey相同颜色的像素,将会设置为透明。

如果不显示图3中红色×外部的白色,只需将白色设置为colorkey即可。第6行代码,调用get_at()方法获取指定位置(0,0)处像素的颜色,而在图片被blit到Surface时,图片的默认位置在(0,0)处,所以(0,0)处像素的颜色即为红色×外部的白色;第7行通过set_colorkey()方法设置图片的colorkey,第一个参数表示指定的颜色,第二个参数表示标志,pygame.RLEACCEL能够加速图片的显示。 load_image()返回导入的图片以及图片的范围。

2 定义Sprite类的派生类

接下来定义Sprite类的派生类,用于显示图片,代码如图4所示。

图4 定义Sprite类的派生类

从图4中可以看出,该类的名字叫做Mouse。Mouse类的__init__()方法中首先调用了父类Sprite的__init__()方法,之后调用"1 定义导入图片的方法"中提到的load_image()方法,导入图片,并将图片和位置保存到属性image和rect中,导入的图片名字叫做"qiu.png"。

注意1 图片必须和程序源文件在同一个目录下,否则load_image()方法的参数必须时图片文件的绝对路径。

Mouse类的update()方法中,首先通过15行代码中的pygame.mouse模块的get_pos()方法获取鼠标的当前位置,并将其保存在类属性rect.topleft中,topleft表示图片所处的左上角位置。即将图片的位置设置为鼠标的位置。第16行代码调用pygame.Rect类的move_ip()方法将图片移动到(0,0)位置处,用于图2第6行代码获取红色×图片中外部的白色。

相关推荐
qq_380651338 小时前
xu0713#True贪吃蛇经典的游戏
python·游戏·pygame
白帽小阳9 小时前
Typora插件开发指南:打造专属IDE式写作环境
c语言·网络·python·网络安全·github·pygame·护网行动
龙腾AI白云4 天前
标注数据短缺对通用AI产业化的影响与对策
人工智能·pygame·dash
ednO8nqdR6 天前
Python小游戏制作:如何实现可配置的跨分辨率界面布局
python·plotly·django·virtualenv·scikit-learn·fastapi·pygame
ai生成式引擎优化技术8 天前
从知识连接到智能组织:WSaiOS认知网络的理论框架与系统设计摘要
网络·python·plotly·django·pygame
ai生成式引擎优化技术9 天前
从参数驱动到认知行为驱动:SAI范式的理论转向与WSaiOS认知内核架构
python·架构·django·virtualenv·pygame
ai生成式引擎优化技术9 天前
WSaiOS:面向认知资产与工程化认知流程的智能操作系统架构
python·架构·django·virtualenv·pygame
大学生就业之家【央国企就业指导】10 天前
央国企求职避免无效海投
scrapy·scikit-learn·pygame
2601_961875241 个月前
花生十三资源盘|电子版|全科
python·django·flask·virtualenv·scikit-learn·pygame·tornado
码来的小朋友1 个月前
[python] 我开发了一个有20个关卡随机地图的迷宫游戏
python·游戏·pygame