在这里我会通过一个例子介绍pygame以及让大家学习python的类和面向对象的思想。对象的本质就是将很多共有的数据和方法归纳起来继承。抽象:提取现实世界中某事物的关键特性。编写一个具体的类再去理解是非常好的办法。
我们的目标是完成一个可以移动的图像,在这个过程里。我会把我建立类,事件,响应,消息的实现思路和大家共享。首先考虑建立基类。我们需要获得鼠标点击事件,可能 需要移动,所以获得图像位置,显示图像显然是必须的。
第一步,让图像显示出来。
类的定义
import pygame
#导入pygame库
from pygame.locals import *
#导入一些常用的函数和常量
from sys import exit
import pickle
from PIL import Image
class Jbutton():
def __init__(self,vertex,mouse_image_filename):
self.vertex=vertex #设置按钮顶点 set button vertex
img = Image.open(mouse_image_filename) #获得宽度,高度
self.width,self.height=img.size
self.mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()
def SetPo(self): #设置位置 set position #
screen.blit(self.mouse_cursor,self.vertex)
在这个类里我们定义了类的变量self.vertex,self.width,self.height, self.mouse_cursor 。和两个方法__init__ SetPo
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。
screen.blit(self.mouse_cursor,self.vertex)
Screen没有定义,引入外部的变量,实际上这种方法是不推荐的。后面会改掉。这里只是展示一下
完整代码
# coding: utf8
import pygame
#导入pygame库
from pygame.locals import *
#导入一些常用的函数和常量
from sys import exit
import pickle
from PIL import Image
class Jbutton():
def __init__(self,vertex,mouse_image_filename):
self.vertex=vertex #设置按钮顶点 set button vertex
img = Image.open(mouse_image_filename) #获得宽度,高度
self.width,self.height=img.size
self.mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()
def SetPo(self): #设置位置 set position #
screen.blit(self.mouse_cursor,self.vertex)
if __name__ == "__main__":
background_image_filename = 'sushiplate.jpg'
mouse_image_filename = 'feid1.png'
# 指定图像文件名称
pygame.init()
# 初始化pygame,为使用硬件做准备
screen = pygame.display.set_mode((640, 480), 0, 32)
# 创建了一个窗口
pygame.display.set_caption("Hello, World!")
# 设置窗口标题
background = pygame.image.load(background_image_filename).convert()
mouse_cursor = pygame.image.load(mouse_image_filename).convert_alpha()
butto1 = Jbutton((12,13),mouse_image_filename)#tleft,top
#mouse_cursor.get_height(),self.mouse_cursor.get_width()
butto2 = Jbutton((12+mouse_cursor.get_width(),13+mouse_cursor.get_height()), mouse_image_filename)#测试范围
print(butto1.__dict__)
# 加载并转换图像
while True:
# 游戏主循环
for event in pygame.event.get():
if event.type == QUIT:
# 接收到退出事件后退出程序
exit()
screen.blit(background, (0, 0))
# 将背景图画上去
x, y = pygame.mouse.get_pos()
# 获得鼠标位置
x -= mouse_cursor.get_width()+2
y -= mouse_cursor.get_height()+2
# 计算光标的左上角位置
#screen.blit(mouse_cursor, (x, y))
# 把光标画上去
butto1.SetPo()
butto2.SetPo()
#screen.blit(mouse_cursor, butto1.vertex)
pygame.display.update()
# 刷新一下画面