Skip to main content

pgzero的一个助手工具

Project description

cpgzh

介绍

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

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

当前功能列表

  1. 创建延时任务和切换动画
  2. 输入框等杂项功能,增加游戏界面的交互功能、数据存储功能
  3. 整合绘图命令,接口更加统一
  4. 便捷的字体造型,写字不再繁琐,使用微软雅黑字体默认支持中文
  5. 导入了pgzero常见的功能,编写游戏时候从cpgzh中导入相关东西即可

软件架构

基于pgzero、pgzhelper和guizero。

安装教程

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

使用说明

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

一、Actor类的增强

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

一)、延时任务

import pgzrun
from cpgzh import Actor
jisi = Actor('大祭司_人偶-待机-000.png', center=(400, 400))
jisi.images = [f'大祭司_人偶-待机-{i:0>3}.png' for i in range(30)]# 绑定造型列表,根据你的素材来吧
jisi.create_delay_tasks(jisi.next_image, seconds=1, times=10)# 延迟1秒下一个造型,重复10次
def update():
    jisi.run_tasks()# 运行计划任务
def draw():
    jisi.draw()
pgzrun.go()
  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()方法;

二)、自动切换造型

from cpgzh import Actor
jisi = Actor('大祭司_人偶-待机-000.png', center=(400, 400))
jisi.images = [f'大祭司_人偶-待机-{i:0>3}.png' for i in range(30)]# 绑定造型列表,根据你的素材来吧
def update():
    jisi.animate()# 根据设定的频率切换造型
def draw():
    jisi.draw()
  1. 使用jisi.images = [f'大祭司_人偶-待机-{i:0>3}.png' for i in range(30)]jisi角色绑定要切换的造型;
  2. update函数中调用jisi.animate()方法,执行造型的切换。
  3. 设置jisi.animate_fps可以获取或设置切换造型的速度,默认为每秒钟切换10次,如果要切换100次就设置100即可:jisi.animate_fps=100
  4. 如果要停止造型的切换只需要将jisi.animate_fps设置为0即可:jisi.animate_fps=0;
  5. 还提供一个方法:jisi.toggle_animate(),如果角色在切换造型,这个方法就会停止切换,反之将会开始切换(切换回来animate_fps=10)。

三)、隐藏和显示

Actor类封装了hideshow两个方法,我们可以很方便的使用他来显示和隐藏角色,示例代码:

from cpgzh import *
monv = Actor('魔女_人偶-待机-000.png', center=(400, 400))
monv.images = [f'魔女_人偶-待机-{i:0>3}.png' for i in range(30)]# 绑定造型列表,根据你的素材来吧
def update():
    monv.animate()# 根据设定的频率切换造型
def draw():
    monv.draw()
def on_key_down(key):
    '当键盘按下时'
    # 停止切换造型
    elif key == keys.U:
        monv.animate_fps = 0
    # 隐藏角色
    elif key == keys.V:
        monv.hide()
    # 显示角色
    elif key == keys.W:
        monv.show()
    # 切换5次造型后隐藏
    elif key == keys.X:
        monv.create_delay_tasks(monv.next_image, 1, 5, monv.hide)
    # 等待5s后显示
    elif key == keys.Y:
        monv.create_delay_tasks(monv.show, 5)
go()

二、输入框等杂项功能

增加了一系列功能,包括输入、切换全屏、加载和保存数据等等,他们都封装在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)

三、整合绘图命令

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

from cpgzh import Pen
pen = Pen()

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

def draw():
    # 绘制一个点
    pen.dot((300, 50), 50, '#ffff00')
    # 绘制一条线
    pen.line((250, 50), (350, 50), '#00ffff', 20)
    # 绘制圆或者圆环
    pen.circle((100, 200), 100, '#ff0000', 20)
    # 绘制椭圆或者椭圆环
    pen.ellipse((300, 200), 200, 100, '#00ff00', 20)
    # 绘制方块或者方块环
    pen.rect((500, 200), 200, 200, '#0000ff', 10, 30)
    # 清屏
    pen.clear()

四、便捷的写字和设置字体样式

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

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

使用方法如下:

1、导入和实例化样式

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

2、写字

下面的写字代码一定要放在draw函数中。

# 默认样式写字
pen.text('haha', topleft=(200, 400))
# font1样式写字
pen.text('haha', font=font1, center=(200, 450))
# font2样式写字
pen.text('haha', font=font2, center=(200, 500))

pentext方法和textbox方法功能与pgzero的类似,唯一多了的是多了字体功能,大家如果哪里不明白可以参考pgzero的相关文档。

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 = '宋体'# 字体名字

五、pgzero常用功能从cpgzh中导入即可

如果有些东西从pgzero中导入,有些东西又从cpgzh导入太割裂了,所以进行了修改,下面是一个空白的游戏框架,大家可以参考(会自动加载pgzrun)。

1、最简框架

from cpgzh import *


go()

这样就能绘制出一个黑屏。

2、增加绘制角色和更新数据

from cpgzh import *

xiaoming=Actor('小明.png')  

def update():
    '更新角色数据'
    xiaoming.x+=1
def draw():
    '把小明绘制在屏幕上'
    xiaoming.draw()
go()  

这样我们就能将一个小明绘制在屏幕上。

功能截图:

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

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

更新日志

2021-12-28

  1. 新增填充功能
from cpgzh import *
pen=Pen()
def draw():
    pen.fill("yellow")

go()

2021-12-22

  1. 增加输入框区分数据类型的功能
     def input(self, msg="请输入数据:", dtype=0) -> str:
         """
         简单输入框\n
         dtype控制输入的数据类型\n
         dtype=0或其他输入字符串\n
         dtype=1输入整数\n
         dtype=2输入浮点数\n
         """
    
  2. 修复使用文件夹作为角色造型时,造型顺序不正常的bug

2021-12-14

  1. 增加gif动画支持功能,现在你可以直接用gif动画作为角色造型了,代码十分简单:
     from cpgzh import *
    
     #创建角色 
     rc=Actor('r-c.gif',center=(700,700))
     # r-c.gif是放在images中的图片,也可以使用绝对地址,即使不在游戏目录下也可以的:
     # rc=Actor('/home/fslong/文档/cpgzh/images/r-c.gif',center=(700,700))    
     pen=Pen()
    
     def update():
         '更新数据'
         rc.animate()#按帧率切换造型
     
     def draw():
         '绘制角色'
         pen.clear()#清理屏幕绘图
         rc.draw()# 绘制角色
     go()#启动游戏引擎
    
  2. 增加加载一个文件夹中图片功能,直接将上一条代码中'r-c.gif'改成'r-c'即可,同样支持绝对目录也支持相对目录。
  3. 已知问题: 加载整个文件夹所有图片的时候,文件名排序有点问题,11.png会排在1.png2.png中间,如果图片较多还是建议手动设置actor.images属性,后续我会修复这个bug。
  4. 增加自由缩放功能:actor.scale=0.5是原比例缩放到0.5倍, actor.scale=(0.5,0.6)是x方向缩放到0.5倍,y方向缩放到0.6倍。

2021-12-13

  1. 修复写字颜色不正常的bug
  2. 修复textbox的bug
  3. 更新注释

2021-11-20

  1. 修复角色切换造型fps失效的bug

2021-11-14

  1. 自动切换造型与延时任务分离
  2. 隐藏和显示功能
  3. 优化延时任务,增加任务执行完毕之后做的事
  4. 优化画笔功能,将屏幕清理功能绑定在画笔上
  5. 优化Actor类各个方法的介绍
  6. 优化README.md文档内容

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

cpgzh-0.1.28-py3-none-any.whl (2.1 MB view hashes)

Uploaded Python 3

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