Project1

标题: GamJack 基础游戏对象 [更新Beta 1版本] [打印本页]

作者: 沉滞的剑    时间: 2020-12-14 04:43
标题: GamJack 基础游戏对象 [更新Beta 1版本]
本帖最后由 沉滞的剑 于 2020-12-18 14:00 编辑

GamJack
GamJack 是一个万能的对象-属性系统
通过拦截属性的和读取/写入, 创建支持任意数量, 任意关联的属性的对象.

目标
1. 响应式属性
   如果一个属性依赖于另一个属性的值
   当你更新被依赖的属性时, 依赖于这个属性的值会自动发生变化

2. 元编程
  通过数据重新定义对象和属性行为, 突破RM数据库的限制
  可以规格化从外部文件中导入游戏定义

3. 可序列化
  存档/读档以后的对象都可以复原, 包括Formula函数
  适合作为游戏对象使用

4. 计算缓存
  当计算时, 如果环境没有发生变化, 则返回上一次保存的值
  提高复杂计算时的效率

5. 属性代理
  可以拦截对原生对象的属性访问,
  可以部分选择性地替换原对象的功能, 无缝对接, 兼容万物

版本更新
Alpha1 (12/14/2020):Alpha2 (12/16/2020):
Beta1 (12/18/2020):

gamjack_beta_1.zip (8.34 KB, 下载次数: 98)






作者: q3226257    时间: 2020-12-14 09:59
膜拜!!!!!!!!!
作者: 574656549    时间: 2020-12-14 16:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: walf_man    时间: 2020-12-14 18:31
沉滞的剑大佬这也太牛了吧,这很低层呀,给拓展开了
作者: 沉滞的剑    时间: 2020-12-14 20:26
本帖最后由 沉滞的剑 于 2020-12-18 14:04 编辑

Beta 1 版本更新说明

重新调整API, 增加了可以调用的Action属性, 并且加入属性代理功能

也就是说可以自定一个对象代理一个原本存在的游戏对象的部分属性

下面是简单的使用例子, 我通过代理添加了一个影响攻击力的属性力量, 每有1点力量, 攻击力增加1点.
主要是劫持了原有Game_Actor的param方法


  1. {
  2.   const { Formula, Action, GameObjectTemplate } = GamJack.classes;

  3.   {
  4.     // 创建对象属性和方法
  5.     new Formula('计算-攻击力', '力量 + self.atk');
  6.     new Formula('设置-攻击力', 'Math.round(value)');
  7.     new Action('动作-物理伤害', 'return atk - 目标.def', ['目标']);
  8.     new Action(
  9.       '代理-param',
  10.       `
  11.       if (paramId === 2) return atk
  12.       return self.param(paramId)
  13.     `,
  14.       ['paramId']
  15.     );
  16.     new GameObjectTemplate(
  17.       '角色',
  18.       {
  19.         力量: { defaultValue: 1 },
  20.         atk: { getter: '计算-攻击力' },
  21.       },
  22.       {
  23.         物理伤害: '动作-物理伤害',
  24.         param: '代理-param',
  25.       }
  26.     );

  27.     // 代理原对象
  28.     const actor = GameObjectTemplate.create('角色');
  29.     GamJack.addObject('actor', actor);
  30.     actor.proxyPath = '$gameActors._data.1';
  31.     actor.proxyObject();
  32.   }

  33.   console.log($gameActors.actor(1).atk);
  34.   console.log($gameActors.actor(1).物理伤害({ def: 23 }));
  35. }
复制代码

作者: bln    时间: 2020-12-15 20:17
好东西!
作者: 苏小明    时间: 2022-2-27 21:32
看起来很有用的样子 下来看看~
作者: 你最珍贵    时间: 2024-6-4 01:16
能说说怎么用吗





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1