3. 内部数据结构
这一部分可以参考 include\Game\Data 和 src\Data 文件夹内容。
所有数据的存储是在 label_gamedata 处,可以直接点击跳转。
3.1. Object
用来描述游戏事件的类,和SFML自带的Event类区分。
3.1.1. 成员
ID |
事件编号 |
name |
事件名称 |
file |
事件行走图文件名 |
pos |
在行走图上对应位置 |
x, y |
xy坐标 |
triggerCondition |
出现触发判定 |
move |
是否有动效 |
through |
是否可穿透 |
exist |
事件还存在的标志 |
3.1.2. 函数
3.1.2.1. 构造函数
Object(name,x=0,y=0)
可以初始化对象的事件名和初始xy坐标。
3.2. Map
用来描述游戏地图数据的类。
3.2.1. 成员
mapID |
地图所在的ID |
mapName |
地图名 |
bgmFile |
地图BGM的文件名 |
mapEvents |
地图上事件的集合 |
3.2.2. 函数
3.2.2.1. haveAnEvent(x,y)
判断地图上(x,y)处是否有事件。
3.2.2.2. checkEvent(x,y)
返回(x,y)处事件的ID。
3.2.2.3. EcheckEvent(x,y)
直接返回(x,y)处事件的对象。
3.2.2.4. passible(x,y)
判断(x,y)处是否可通行,判断标准是此处是否有事件,有的话是否可穿透。
3.2.2.5. getLineEvents(pair, pair)
获取在两个同x或同y坐标之间的事件列表。
3.3. Actor
描述游戏角色数据的类。
3.3.1. 成员
name |
角色名 |
file |
角色行走图文件名 |
status |
角色当前状态 |
level |
角色等级 |
hp |
角色生命值 |
atk |
角色攻击力 |
def |
角色防御力 |
mdef |
角色魔防 |
exp |
角色经验 |
gold |
角色金币 |
mapID |
角色所在地图编号 |
x |
角色x坐标 |
y |
角色y坐标 |
item |
角色所持有物品数量 |
3.3.2. 函数
3.3.2.1. getAtk()
获取角色攻击的实际值,会减去其衰弱效果值。
3.3.2.2. getDef()
获取角色防御的实际值,会减去其衰弱效果值。
3.4. Enemy
描述敌人数据的类。
3.4.1. 成员
name |
敌人名字 |
file |
敌人所在行走图 |
element |
敌人属性 |
pos |
敌人所在行走图行数 |
hp |
敌人生命值 |
atk |
敌人攻击 |
def |
敌人防御 |
conatk |
敌人连击数 |
exp |
敌人经验值 |
gold |
敌人金币 |
animationID |
敌人动画编号 |
3.4.2. 函数
3.4.2.1. getDamage(*actor,*elements)
根据当前角色能力数据,获取敌人对自己造成的伤害, -1 为不可战胜,也可以在参数里面按顺序输入拟定的角色攻击力、防御力和魔防来计算虚拟伤害。
3.4.2.2. getDef(*actor)
获取怪物真实防御,一般用于坚固怪。
3.4.2.3. getP(p)
判断怪物是否拥有某属性。
3.4.2.4. getCrisis(*actor)
获取怪物临界。
3.4.2.5. getElement(pid)
获取怪物属性及其描述,如果是会变动的属性(如不同的衰弱效果),就将数值写入第二个参数。
3.5. Element
描述怪物属性数据的类。
成员仅有 name 和 description ,描述属性名字和效果。
3.6. Item
描述物品数据的类。
name |
物品名字 |
description |
物品描述 |
file |
物品所在行走图 |
pos |
物品所在行走图位置 |
price |
物品价格 |
usable |
是否可在物品栏使用 |
cost |
是否可消耗 |
3.7. Animation
描述动画数据的类。
pattern |
动画所有图形的队列 |
SEFile |
动画播放SE的文件名 |
SETime |
播放SE所在的帧数 |
3.8. NPC
描述NPC数据的类。
npcInfo |
对话信息,包含事件ID、对话人名、对话内容 |
fade |
对话完后是否消失 |
transName |
对话完后转换成的事件名 |
directlyFunction |
转换完成是否立刻执行 |
3.9. Data -> motaData ★★★
一切数据的存储器,所有的数据都存储在这里。
3.9.1. 成员
actors |
角色的初始数据存放 |
animations |
动画数据存放 |
elements |
属性数据存放 |
enemies |
敌人数据存放 |
items |
物品道具数据存放 |
maps |
地图数据存放 |
npc |
NPC数据存放 |
motaName |
用于储存魔塔编号对应的名字 |
提示
其中 actors 和 maps 仅仅存放初始数据, 请勿修改 ,关于游戏中相关的在后面。
3.9.2. 函数
3.9.2.1. init()
初始化函数,会读取数据库重置上述信息,仅在打开游戏时调用,请勿随意使用。
3.9.2.2. searchMap(mapnane)
按照地图名搜索地图的函数,返回相应地图编号,同名地图返回序号靠前的。
3.10. Temp -> motaTemp
用来存储临时变量的类,后续自行DIY也可以在此处修改。
battleEnemyID |
当前与之战斗的敌人ID |
shopType |
当前触发的商店类型 |
functionEventID |
正在交互的事件编号 |
closeMS |
关闭状态栏,也可以使用7号变量控制关闭 |
transEventName |
事件结束后,更改成的名字,可不填写 |
directlyFunction |
事件更改名字后,是否直接触发 |
toDisposeEvent |
是否结束事件 |
gameOver |
游戏结束的标志 |
ending |
结局的标志 |
nextMove |
事件进一步指令的标志,维持事件执行先后顺序 |
addPower |
记录商店增加能力的数值 |
initPrice |
记录商店价格 |
messageInfo |
对话信息 |
floorEnemies |
记录当前楼层怪物信息 |
3.11. Variables -> motaVariables
游戏变量相关的集合。
3.11.1. 成员
variables |
游戏内部变量,可参考RMXP的开关和变量,具体代表含义在variables.txt处标注 |
itemRecord |
记录获得过的物品 |
floorRecord |
记录去过的楼层 |
eventRecord |
记录消失过的事件 |
transRecord |
记录变更过名字的事件 |
3.11.2. 函数
3.11.2.1. init()
初始化函数,会读取数据库重置上述信息,仅在打开游戏和读档时调用,请勿随意使用。
3.12. Interpreter
游戏事件解释器,用来解释游戏事件名并执行对应操作的类。
3.12.1. 成员
3.12.1.1. 构造函数
Interpreter(eventName)
将事件名告知类对象。
3.12.1.2. execute(*obj=nullptr)
执行事件的函数,参数为事件对象,如果不填写则视为临时事件,部分指令不会造成影响。
3.12.1.3. replaceToVar(source)
可以将形如 [x] 的字符串替换为对应序号变量的值,为静态函数,可以使用 Interpreter::replaceToVar(source) 调用。
3.12.1.4. initDialogue(source)
初始化对话的函数,参数为对话内容,会将对话内容中的 [x] 替换为对应序号变量的值,以及将 [hp] 等替换为主角当前能力值。
3.13. Player
描述屏幕上玩家数据的类。
3.13.1. 成员
- widths
50, 100
“direction”, “方向” “step”, “角色步数” “visible”, “是否可见”
3.13.2. 函数
3.13.2.1. update()
玩家数据的更新,上下左右行走的判断就在于此。
3.13.2.2. changeSteps()
步数改变时会发生的情况,一般用于阻击、激光、夹击、领域等情况。
3.13.2.3. triggerEvent(*obj)
触发事件的函数,参数为事件对象,如果不填写则视为临时事件,部分指令不会造成影响。
3.14. ScreenData -> screenData ★★★★★
存储游戏屏幕上所显示数据的类。
3.14.1. 成员
actors |
角色数据 |
player |
玩家数据 |
visualMap |
当前地图数据 |
其中, screenData.actors 和 screenData.visualMap 为本类核心。
3.14.2. 函数
3.14.2.1. init()
初始化函数,会将角色数据从 motaData.actors 中读取。
3.14.2.2. loadMap(mapID,*gmap)
读取地图的函数, gmap 一般来说是 screenData.visualMap ,不过你也可以从 motaData.maps 中读取其他地图文件数据并用这个函数读取。
3.14.2.3. mapStatus()
显示游戏状态栏的函数,状态栏的DIY在此处修改。
3.14.2.4. showMap(gmap,x,y,rate=1.f,visible=true,clear_device=true)
在画面的(x,y)处显示地图 gmap 的函数,作用和 motaGraphics.update() 相当,游戏中的动画也在此处显示,在遍历事件处有地图显示伤害的配置,可在此处自行修改。
rate 代表地图的放缩率。
visible 代表在地图上主角的行走图是否可见。
clear_device 代表是否清空画面,如果是新开一个窗口预览地图,需要设置为 false 。
3.14.2.5. waitCount(times)
等待的函数,等待的帧数期间不可操作。
3.14.2.6. addAnimation(id,x,y) & addEVAnimation(id,x,y)
在地图上显示动画的函数,前者的xy为屏幕坐标,后者的xy为地图坐标(0~10)
3.14.2.7. loadData(fileid) & saveData(fileid)
顾名思义,读档和存档的函数,具体的DIY在此处修改。
11.29的更新将json引入了本框架,以后将可以使用json对数据序列化。
3.14.2.8. doOrder(lists,*obj)
执行一个事件串,一般用于对话中。
3.14.2.9. transition1(time=10)
淡入的函数,参数为淡入的帧数。
3.14.2.10. transition2(time=10)
淡出的函数,参数为淡出的帧数。
3.14.2.11. dispose()
清空屏幕的函数,一般用于切换场景。