|
发表于 2020-6-10 18:22:51
|
显示全部楼层
如果想在脚本中修改的话,则需要修改
LActor脚本
找到update函数 (在125行左右)在函数最后( 两个花括号中算是一个函数 约159行下面一行)
此处代码大致如下:
- if(_sf.invincibleTime > 0){
- _sf.invincibleTime -= 1;
- }
- if(_sf.stiffTime > 0){
- _sf.stiffTime -= 1;
- }
- if(_sf.combatTime > 0){
- _sf.combatTime -= 1;
- }
- if(atkWaitNow > 0){
- atkWaitNow -= 1;
- }
复制代码 我们等一下,就要在这段代码的后面,加上我们自己的逻辑。
逻辑实现讲解部分:(如果对具体逻辑不感兴趣,可以直接跳转至实现部分)
首先我们需要了解,如何获得角色脚下的基础块
对应的变量在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;) 下面一行添加
2、在刚才update函数,最后面约 159行(如果添加了上面一行 可能在 160行处 这一行 内容为 } ,上一行内容为 atkWaitNow -= 1;) 的下面一行添加如下逻辑
- if(_sf.camp == 0 && tempBlockBelow != character.BlockBelow){
- if(character.BlockBelow == 1){//滑行块减少攻击力
- RV.GameData.actor.addPow.watk -= 100; //减少一百点攻击力
- }else if(tempBlockBelow == 1 && character.BlockBelow != 1){ //如果上一块曾经是1,但是这一块不是1,则把丢掉的攻击力补回来
- RV.GameData.actor.addPow.watk += 100;
- }
- tempBlockBelow = character.BlockBelow;
- }
复制代码
至此,功能实现
|
|