马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 blackpineapple 于 2022-8-7 04:36 编辑
08-07-2022 更新
如果存档遇到问题,请参考下面帖子修改代码。
https://www.renpy.cn/forum.php?mod=viewthread&tid=1221
代码下载:
https://github.com/red-moon-tea-party/renpy
使用规则教程中的代码可以用于非商用/商用的游戏,不需要和本人联系,但是需要在发布的时候署名。 署名信息:
Black Pineapple
禁止事项
前言本系列教程是 Ren'Py的进阶教程,适合于有一定基础的同学。推荐至少读完了官方文档里 起步,官方自带的教程(Ren’Py Launcher里那个),或者各大新手教程中的一个。
本教程是关于如何实现一个商店/物品系统。 物品类(ItemClass.rpy)物品类在这个教程里有两个一个是基类Item,一个是派生类BoosterItem。简单的来说,Item就是所有的东西,BoosterItem是一个具体的东西,BoosterItem这里是使用来可以增加人物属性的东西。同学们后面可以自己定义别的类型的物品,比如可以无限次使用的耐用品。
关于继承方面的知识请查阅python Inheritance(继承), 关于类的知识请直接搜python class(类)。 Item__init__函数 这是所有类都有的初始化函数,这里定义了两个变量,一个是name是物品的名字,一个是img是物品的图片。如果需要添加什么自己需要的变量,可以仿照name增加。
名字 | 类型 | 描述 | 例子 | name | string | 物品名字 | “fox” | img | string | 物品图片 | “images/items/fox.png” |
__eq__函数和__hash__函数 因为后面用了item这个类来做字典的键值,所以需要这两个函数,用来比较两个物品对象是不是一个物品。
请自行查阅python dict(字典),来了解字典相关知识。
get_icon函数 返回一个物品图片位置的字符串。e.g. “images/items/fox.png” BoosterItem__init__函数
名字 | 类型 | 描述 | 例子 | name | string | 物品名字 | fox | price | int | 物品价格 | 20 | booster | dict | 物品可以提升的属性,这个属性,需要和player class里的成员变量相对应。 | dict( charisma = 5 )
| description | string | 物品描述 | “可以增加{color=#F37459}10点智力{/color}” |
因为是派生类,所以会有下面的语句 super(BoosterItem, self).__init__(name, 'images/items/' + name + '.png') |
所有图片的路径都被直接设定为:'images/items/' + name + '.png
use函数 这个函数会根据这个物品的booster属性,增加使用者对应的属性。
例子:
[RenPy] 纯文本查看 复制代码 label use_item(item):
python:
item.use(player)
player_inventory.remove(item)
call screen information(msg=item.description)
return
[RenPy] 纯文本查看 复制代码 textbutton _("use"):
if isinstance(item, BoosterItem):
action [Function(player_inventory.remove, item=item),
Function(item.use, player=player)]
elif isinstance(item, Toy):
action Call(item.script) |
关于物品的例子,可以参考0shop_items.rpy Inventory(InventoryClass.rpy)字典可以理解为一个储物柜,需要号码,才能找到具体是哪个格子,然后拿到里面的东西。关于字典的知识请直接搜python dict(字典)。这个类可以理解为一个储物柜,每种物品放一格,可以用于商店的库存,玩家的物品格等。
__init__函数
名字 | 类型 | 描述 | 例子 | stock | dict(字典) | 所有物品 | {FOX: 10} |
__str__函数
剩下的函数解释请看代码中的注释。
商店Shop (ShopClass.rpy)
名字 | 类型 | 描述 | 例子 | inventory | Inventory | 所有物品 | 参考上面Inventory的讲解 |
剩下的函数解释请看代码中的注释。 玩家Player(PlayerClass.rpy)
名字 | 类型 | 描述 | 例子 | name | string | 玩家的名字 | “black pineapple” | intelligence | int | 智力 | 5 | fitness | int | 身材 | 5 | charisma | int | 魅力 | 5 | money | int | 金钱 | 1000 |
函数定义请参考代码内注释
GridHelper(GridHelper.rpy)这个函数是用来计算,格子的数量,配合grid关键字使用。
MINIMUM_NUM_ROWS 是格子至少有多少行,比如物品比较少的时候可能只有1行,但是制作者可以指定至少显示2行。
NUM_COLUMN 是有多少列。
|