Skip to main content

pgzhero的一个助手工具

Project description

cpgzhelper

介绍

本作品是基于一个新加坡老师的pgzhelper的一个助手工具,增加了一些功能方便国内用户使用,可以参考下面的链接:

pgzhelper官网地址:https://www.aposteriori.com.sg/pygame-zero-helper/
黄复雄老师翻译文档地址:https://zhuanlan.zhihu.com/p/347855713

当前功能列表

  1. 创建延时任务和切换动画
  2. 输入框等杂项功能,增加游戏界面的交互功能、数据存储功能
  3. 整合绘图命令,接口更加统一
  4. 便捷的字体造型,写字不再繁琐

软件架构

基于pgzhelper和guizero。

安装教程

  1. 使用pip安装即可:pip3 install cpgzh

使用说明

使用方法和pgzero基本相同,多了几个方法而已,下面对我增加的功能进行介绍,其他的移步官网或者黄复雄老师的文档即可。

一、创建延迟任务和切换动画

这些功能都是封装在Actor类当中的。

一)、延时任务

  1. 使用from cpgzh import Actor代替from pgzero.actor impoty Actor来导入演员类;
  2. 创建演员jisi = Actor('大祭司_人偶-待机-000.png', center=(400, 400));
  3. jisi.create_delay_tasks(task, seconds=1, times=1)方法能够创建一个延迟执行的任务,task为要做的事。seconds为延迟的时间,默认为1s。times是这个任务要执行的次数,默认为1次;
  4. update函数中调用jisi.run_tasks()方法;

二)、切换造型

  1. 使用jisi.images = [f'大祭司_人偶-待机-{i:0>3}.png' for i in range(30)]jisi角色绑定要切换的造型;
  2. update函数中调用jisi.run_tasks()方法。默认会将jisi.animate()方法在jisi.run_tasks()方法中调用,也就是默认是角色切换造型的姿态。当然你也可以在update函数中手动调用jisi.animate()方法即可自动切换造型;
  3. 设置jisi.animate_fps可以获取或设置切换造型的速度,默认为每秒钟切换10次,如果要切换100次就设置100即可:jisi.animate_fps=100
  4. 如果要停止造型的切换有两种方法: a. 只需要将jisi.animate_fps设置为0即可:jisi.animate_fps=0; b. 使用jisi.is_animate设置为0即可:jisi.is_animate=0,这种方法不影响设置好的角色切换造型的fps。
  5. 还提供一个方法:jisi.toggle_animate(),如果角色在切换造型,这个方法就会停止切换,反之将会开始切换。

二、输入框等杂项功能

增加了一系列功能,包括输入、切换全屏、加载和保存数据等等,他们都封装在Master类当中,以键盘按下执行一些功能示例如下:

#实例化管家
from cpgzh import Master
master=Master()#实例化的时候可以直接传递存档位置作为参数
def on_key_down(key):
    '当键盘按下'
    # 设置全屏化
    if key == keys.A:
        master.set_fullscreen()
    # 设置窗口化
    elif key == keys.B:
        master.set_windowed()
    # 切换全屏和窗口化
    elif key == keys.C:
        master.toggle_fullscreen()
    # 隐藏鼠标
    elif key == keys.D:
        master.hide_mouse()
    # 显示鼠标
    elif key == keys.E:
        master.show_mouse()
    # 输入文本
    elif key == keys.F:
        text = master.input('请输入一个名字:')
        print(text)
    # 选择文件
    elif key == keys.G:
        text = master.select_file('请选择一个文件:')
        print(text)
    # 保存文件
    elif key == keys.H:
        text = master.select_file_save('请选择存档保存位置:')
        print(text)
    # 选择文件夹
    elif key == keys.I:
        text = master.select_dir('请选择一个文件夹:')
        print(text)
    # 是否选择框
    elif key == keys.J:
        text = master.yes_no('是否选择女装?')
        print(text)
    # 保存master的数据
    elif key == keys.K:
        master.save_data()
    # 手动加载存储的数据
    elif key == keys.L:
        #master.data.text = 'test'
        master.data_path = '测试.dat'
        master.load_data()
    # 删除保存的数据
    elif key == keys.M:
        master.del_data()
    # 设置动画的帧率
    elif key == keys.N:
        fps = master.input('请输入动画切换的速度(每s切换多少次):')
        jisi.animate_fps = int(fps)
    # 切换造型是否切换
    elif key == keys.O:
        jisi.toggle_animate()
    # 提示信息
    elif key == keys.P:
        master.msg('提示:\n你已经换好女装了')
    # 警告信息
    elif key == keys.Q:
        master.warning('警告:\n今天的女装不太完美')
    # 错误信息
    elif key == keys.R:
        master.error('错误:\n你还没换好女装')
    # 游戏开始
    elif key == keys.S:
        master.data.start()
    # 获取游戏运行时常
    elif key == keys.T:
        print(master.data.get_time())   

需要特殊说明的是,master会自带一个数据保存的功能,绑定在masterdata对象上,这个对象可以把绑定在他身上的数据保存到当前的目录,如果不指定master.dataPath属性会自动保存在data.dat文件中。
默认情况下,master.data会有几个默认属性,包括游戏状态、时间、得分,你也可以自行绑定其他属性:

class Data:
    '数据存储类'
    def __init__(self, data_path) -> None:
        '数据类'
        self.status = 0  # 游戏状态\
        self.time = 0  # 游戏持续时间
        self.score = 0  # 得分

注意: 在master类实例化的时候就会自动加载一次存档,所以这里要小心一些,容易出现奇怪的事情。
为了数据的传递方便,master.data对象有个temp属性,这个属性会自动存放一些数据,比如选择的文件夹,或者输入的数据,也就是说获取输入的内容还可以这样写:

master.input('请输入一个名字:')
print(master.data.temp)

三、整合绘图命令

这些功能都是封装在Master类当中的。
对绘图命令进行了整合,可以更方便快速绘制各种图形。
使用方法如下:
1、导入并实例化Master

from cpgzh import Master
master = Master()

2、在draw函数中绘制想要的图形

def draw():
    # 绘制一个点
    master.draw_dot((300,50),50,'#ffff00')
    # 绘制一条线
    master.draw_line((250,50),(350,50),'#00ffff',20)
    # 绘制圆或者圆环
    master.draw_circle((100, 200), 100, '#ff0000', 20)
    # 绘制椭圆或者椭圆环
    master.draw_ellipse((300, 200), 200, 100, '#00ff00', 20)
    # 绘制方块或者方块环
    master.draw_rect((500, 200), 200, 200, '#0000ff', 10, 30)

四、便捷的字体造型

这些功能都是封装在FontStyle类当中的。
pgzero字体设置比较繁琐,很多时候小伙伴们也不太知道那些个参数都是干啥的,每次写字都要写很多行,太难受了。
所以对字体样式进行了封装,帮大家方便快速写字。

建议做游戏时候将不同的字体先实例化成不同的对象,到时候用就可以了。

使用方法如下:

1、导入和实例化样式

from cpgzh import FontStyle # 导入字体样式类
font = FontStyle()# 实例化字体样式font
font1 = FontStyle()# 实例化字体样式font1
font1.color='red'# 修改颜色
font2 = FontStyle()# 实例化字体样式font2
font2.color='blue'# 修改颜色
font2.bold=True# 加粗
font2.angle=180# 旋转180度

2、写字

screen.draw.text('你好呀',center=(200,200),**font.styles)# 用字体样式font写字
screen.draw.text('你好呀',center=(200,200),**font1.styles)# 用字体样式font1写字
screen.draw.text('你好呀',center=(200,200),**font2.styles)# 用字体样式font2写字

3、修改样式

我们可以修改font对象的参数,从而改变字体的样子,可以改的字体样式如下(可根据默认值修改):

font.bold = None#加粗
font.italic = None# 斜体
font.underline=None# 下划线
font.color = 'black'# 字体颜色
font.gcolor = None# 渐变色
font.ocolor = None# 边框颜色        
font.scolor = None# 阴影颜色
font.align = 'left'# 左对齐
font.alpha = 1.0# 不透明度
font.angle = 0# 旋转角度
font.owidth = None# 边框宽度
font.shadow = (0.0,0.0)# 阴影,x方向和y方向
font.fontsize = 30# 字体大小
font.fontname = '宋体'# 字体名字

功能截图:

(详见软件仓库,pypi不会显示)

用法详情可以参考example.py文件

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cpgzh-0.1.8.tar.gz (19.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page