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行代码获取红色×图片中外部的白色。

相关推荐
带娃的IT创业者19 小时前
《Python实战进阶》No37: 强化学习入门:Q-Learning 与 DQN-加餐版1 Q-Learning算法可视化
python·算法·pygame
牛老师讲GIS6 天前
分享一个精灵图生成和拆分的实现
sprite·精灵图
棉猴7 天前
Pygame实现记忆拼图游戏14
python·游戏·pygame·游戏编程·python游戏编程
黄金旺铺7 天前
【Python-OpenCV】手势控制贪吃蛇
开发语言·python·opencv·pygame·mediapipe
Java版蜡笔小新12 天前
外星人入侵-Python-三
开发语言·python·pygame
Nelson_hehe12 天前
五子棋小游戏-简单开发版
python·小游戏·pygame·五子棋
Nelson_hehe13 天前
贪吃蛇小游戏-简单开发版
python·小游戏·pygame·贪吃蛇
莫非技术栈13 天前
用Python和Pygame实现打砖块游戏
python·游戏·pygame
棉猴15 天前
Pygame实现记忆拼图游戏1
python·pygame·游戏编程·python游戏编程·pygame游戏编程
九溪弥烟、16 天前
python编写的一个打砖块小游戏
开发语言·python·pygame