站内搜索

搜索
热搜: 活动 交友 discuz

iFAction 世界需要你的想象力!

[请帮忙] 如何用变量判定人物在不同格子上应用不同状态

 

18

主题

35

帖子

434

积分

iF村庄

Rank: 5Rank: 5

积分
434
发表于 2020-6-10 15:17:54 | 显示全部楼层 |阅读模式
比如act模式下,人物在滑行块上防御降低,平台快上攻击降低,以人物脚踩方块作为判定方式能不能用变量修改做到?一个个铺触发器太邪道了。
如果要在脚本处修改,又应该在那个位置研究呢?

31

主题

304

帖子

1547

积分

管理员

iFAction缔造者

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
1547

iFAction学院校长

发表于 2020-6-10 18:22:51 | 显示全部楼层
如果想在脚本中修改的话,则需要修改
LActor脚本

找到update函数 (在125行左右)在函数最后( 两个花括号中算是一个函数  约159行下面一行)

此处代码大致如下:

  1. if(_sf.invincibleTime > 0){
  2.             _sf.invincibleTime -= 1;
  3.         }
  4.         if(_sf.stiffTime > 0){
  5.             _sf.stiffTime -= 1;
  6.         }
  7.         if(_sf.combatTime > 0){
  8.             _sf.combatTime -= 1;
  9.         }
  10.         if(atkWaitNow > 0){
  11.             atkWaitNow -= 1;
  12.         }
复制代码
我们等一下,就要在这段代码的后面,加上我们自己的逻辑。

逻辑实现讲解部分:(如果对具体逻辑不感兴趣,可以直接跳转至实现部分)

首先我们需要了解,如何获得角色脚下的基础块

对应的变量在LActor中的写法是

character.BlockBelow
其中当 character.BlockBelow等于 0时为基础块,1时为滑动块,2时为沙地块,3时为死亡块

如果想让1号变量 等于 当前角色脚下的基础块类型则可以使用触发器指令,其他——脚本 中输入如下内容:
RV.GameData.value[1] = RV.NowMap.getActor().getCharacter().BlockBelow;


然后需要了解第二个问题——状态机
状态机会每秒调用60次update函数,那如果我们想实现站在滑动块上减少攻击力,但是在状态机中不做任何处理,那么1秒内就会减少60次攻击力,可能2秒-3秒后攻击力就会成负数
所以我们还需要做逻辑处理:

1、站在块上减少攻击力(仅一次)
2、离开块攻击力恢复

要实现这个,就需要在LActor中定义临时变量来记录上一次碰触的基础块是什么

到这里,所有实现的逻辑拼图就全了


具体实现方法如下:

1、在LActor 118行(此行内容 是 this.isDie = false;) 下面一行添加

  1. var tempBlockBelow = 0;
复制代码


2、在刚才update函数,最后面约 159行(如果添加了上面一行 可能在 160行处  这一行 内容为 } ,上一行内容为 atkWaitNow -= 1;) 的下面一行添加如下逻辑
  1. if(_sf.camp == 0 && tempBlockBelow != character.BlockBelow){
  2.     if(character.BlockBelow == 1){//滑行块减少攻击力
  3.         RV.GameData.actor.addPow.watk -= 100; //减少一百点攻击力
  4.     }else if(tempBlockBelow == 1 && character.BlockBelow != 1){ //如果上一块曾经是1,但是这一块不是1,则把丢掉的攻击力补回来
  5.         RV.GameData.actor.addPow.watk += 100;
  6.     }
  7.     tempBlockBelow = character.BlockBelow;
  8. }
复制代码



至此,功能实现





18

主题

35

帖子

434

积分

iF村庄

Rank: 5Rank: 5

积分
434
 楼主| 发表于 2020-6-10 22:52:18 | 显示全部楼层
七夕小雨 发表于 2020-6-10 18:22
如果想在脚本中修改的话,则需要修改
LActor脚本

感谢小雨!

18

主题

35

帖子

434

积分

iF村庄

Rank: 5Rank: 5

积分
434
 楼主| 发表于 2020-6-10 23:40:18 | 显示全部楼层
七夕小雨 发表于 2020-6-10 18:22
如果想在脚本中修改的话,则需要修改
LActor脚本

如果有自定义新块,如何获取新物块的编号呢?还是说得自己定义一个?

31

主题

304

帖子

1547

积分

管理员

iFAction缔造者

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
1547

iFAction学院校长

发表于 2020-6-10 23:46:15 | 显示全部楼层
上边的脚本针对的问题是基础块

工具的基础块只有 5种
普通块,滑行块、沙地块、死亡块、平台块

无论新增多少图块,总是在这五种类型种的,2楼给你的脚本,也是针对图块的类型,而不是针对图片的编号

如果要用编号来做判定的

就需要转换思路到交互块,但是交互块有很明显的问题,如果交互块当做地面绘制,会非常非常非常非常的卡

18

主题

35

帖子

434

积分

iF村庄

Rank: 5Rank: 5

积分
434
 楼主| 发表于 2020-6-11 00:07:40 | 显示全部楼层
七夕小雨 发表于 2020-6-10 23:46
上边的脚本针对的问题是基础块

工具的基础块只有 5种

也就是只能新增基础块吗?但是if支持自己新增基础块吗?想弄减速块,恢复块啥的。
如果要自定义新的基础快,能在 脚本的那个地方修改呢?还是说只能用dll整个mod?

31

主题

304

帖子

1547

积分

管理员

iFAction缔造者

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
1547

iFAction学院校长

发表于 2020-6-11 00:57:52 | 显示全部楼层
像你说的这些块,其实都是“交互块”而不是基础块

比如尚城的mod——【官方MOD-ACT特殊交互块合集包1】,就有传送带,就可以做你说的减速块。

恢复块也可以用交互块设置触发器来实现。


但是我们要明白为什么基础块有这么大的限制——

效率,为了优化游戏的效率,稍大的一点的地图,基础块动辄就是几千块,如果上面再绑定各式各样的逻辑,游戏效率会变成什么样可想而知。

所以iFAction设计了用户绘制地形的基础块(高效率,但是限制很多功能简陋),还有用于实现逻辑的交互块两种类型(低效率,但是功能扩展性强大)

18

主题

35

帖子

434

积分

iF村庄

Rank: 5Rank: 5

积分
434
 楼主| 发表于 2020-6-11 11:23:15 | 显示全部楼层
七夕小雨 发表于 2020-6-11 00:57
像你说的这些块,其实都是“交互块”而不是基础块

比如尚城的mod——【官方MOD-ACT特殊交互块合集包1】, ...

那是否可以利用主角的位置坐标判定获得状态?
原来想的是读取主角脚下物块赋予主角能力,现在是设计地图中不同区域让主角应用不同效果,如此设计会不会导致效率极度低下?因为这样感觉好像是每个格子都加了逻辑···

点评

我在二楼的帖子已经完全回答了你的问题啊? 是具体哪里没有看懂么?我可以更详细的解答给你  详情 回复 发表于 2020-6-11 15:58

31

主题

304

帖子

1547

积分

管理员

iFAction缔造者

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
1547

iFAction学院校长

发表于 2020-6-11 15:58:28 | 显示全部楼层
濯庸 发表于 2020-6-11 03:23
那是否可以利用主角的位置坐标判定获得状态?
原来想的是读取主角脚下物块赋予主角能力,现在是设计地图 ...

我在二楼的帖子已经完全回答了你的问题啊?
实现效果:
当站在滑行块上,主角的攻击力减少100点

中间逻辑讲解部分,也说明了如果把脚下块带入至变量,如何通过脚本修改通过逻辑块改变对应属性
我在脚本实现中的效率是非常可观的,因为只判定了主角脚下的块,而且只有当脚下块发生改变时才做逻辑更替处理

是具体哪里没有看懂么?我可以更详细的解答给你


18

主题

35

帖子

434

积分

iF村庄

Rank: 5Rank: 5

积分
434
 楼主| 发表于 2020-6-11 18:03:02 | 显示全部楼层
七夕小雨 发表于 2020-6-11 15:58
我在二楼的帖子已经完全回答了你的问题啊?
实现效果:
当站在滑行块上,主角的攻击力减少100点

感谢回复!
理解上述判断物块的方式,现在是发现仅用基础快可能达不到要求,所以尝试更换思路。
我的设计需求是人物在不同区域应用不同能力甚至是技能,仅用5个基础块以及功能块可能难以完成,于是我转变一下思路,判断角色所处坐标,在某个坐标范围内比如(1,1)到(5,5)应用逻辑a,其他区域逻辑b,总之通过判断角色当前位置赋予角色能力。
只是担心这第二种思路会不会造成每秒反复判断角色位置然后反复做逻辑操作,达到一个非常卡顿的效果。
简单来说开始是想读取脚下方块走逻辑,现在想问改成角色坐标走逻辑是否可行?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们
QQ群:977585123
iFAction下载
Windows客户端
反馈
意见建议
iFAction

iFAction

京ICP备15053274号-1

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.