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

相关推荐
li.siyuan4 天前
python飞机大战游戏.py
python·游戏·pygame
小馒头学python4 天前
【童年经典小游戏】使用Python实现经典贪吃蛇游戏
python·游戏·pygame
从以前4 天前
Python 实现炸弹人游戏
开发语言·python·pygame
豆本-豆豆奶5 天前
用python实现滑雪小游戏,附源码
开发语言·python·pygame
西农小陈5 天前
Python-基于Pygame的小游戏(滑雪大冒险)(一)
python·游戏·pycharm·游戏程序·pygame
从以前5 天前
python练习之“用 Python 的 Pygame 库创建五子棋游戏”
开发语言·python·游戏·pygame
fegxg7 天前
AirSim 使用Pygame鼠标键盘控制无人机
python·无人机·pygame
郭老师的小迷弟雅思莫了15 天前
Python实现中国象棋
开发语言·python·pygame
Chinese Red Guest17 天前
python写猜数字
java·服务器·开发语言·前端·数据库·python·pygame