ssRender 引擎游戏项目(3)

概述:

基于上一篇文章的内容,对逻辑(表达式)进行优化,实现功能:人物按规则移动,道具拾取时对应左侧信息栏变化,加入关卡切换动画(自动),增加场景三;

效果:

在这里插入图片描述

更新内容:

表达式:

所有逻辑采用绑定表达式和自定义属性制作,主要更新内容是逻辑所以都在表达式中;

1.HeroMassage增加自定义属性ifx、ify用于控制所有的障碍物(Barrier节点),按钮节点获取当前的ifx和ify进行判断控制人物移动。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.左侧英雄信息栏的数字(Number)节点增加自定义属性用于获取每个关卡中对应的道具拾取(攻击力、防御力、生命值)

在这里插入图片描述
在这里插入图片描述

这里获取每个关卡中的生命值道具、和怪物(Monster)的自定义属性
当拾取到生命值道具增加生命值;当遇到怪物则扣除生命值

var L1H = {$../../Leverl01/Health/LP}
var L2H = {$../../Leverl02/Health/LP}
var L3H = {$../../Leverl03/Health04/LP}
var l1M = {$../../Leverl01/Monster/LP}
var l2M = {$../../Leverl02/Monster01/LP}
var l2M2 = {$../../Leverl02/Monster02/LP}
var l2M3 = {$../../Leverl02/Monster03/LP}
var l3M = {$../../Leverl03/Monster01/LP}
var l3M2 = {$../../Leverl03/Monster02/LP}
var l3M3 = {$../../Leverl03/Monster03/LP}
var l3M4 = {$../../Leverl03/Monster04/LP}
var l3M5 = {$../../Leverl03/Monster05/LP}

var Hmp = {$./HmP}
{$./HmP} = {$./HmP} + L2H + L1H + L3H - l2M - l1M - l2M2 - l2M3 - l3M - l3M2 - l3M3 - l3M4 - l3M5

下面表达式表示英雄的攻击力数值和上面生命值同理,只不过没有扣除攻击力的数值;

在这里插入图片描述

下面是防御力数值,同理上面攻击力;

在这里插入图片描述

3.关卡中的障碍物逻辑,Barrier节点增加自定义属性ifx、ify用于控制其子节点的判断,作为一个所有障碍物逻辑判断的汇总;

在这里插入图片描述
在这里插入图片描述

var l = {$../../HeroMassage/Leverl}
var b1 = {$./64_224/ifx}
var b2 = {$./96_224/ifx}
var b3 = {$./128_224/ifx}
var b4 = {$./160_224/ifx}
var b5 = {$./192_224/ifx}
var b6 = {$./224_224/ifx}
var b7 = {$./256_224/ifx}
var b8 = {$./128_64/ifx}
var b9 = {$./96_96/ifx}
var b10 = {$./160_96/ifx}
var b11 = {$./0_224/ifx}
(l == 1):b1+ b2 + b3 +b4 +b5 +b6 +b7 +b8 +b9+b10+b11 

在这里插入图片描述

var l = {$../../HeroMassage/Leverl}
var b1 = {$./64_224/ify}
var b2 = {$./96_224/ify}
var b3 = {$./128_224/ify}
var b4 = {$./160_224/ify}
var b5 = {$./192_224/ify}
var b6 = {$./224_224/ify}
var b7 = {$./256_224/ify}
var b8 = {$./128_64/ify}
var b9 = {$./96_96/ify}
var b10 = {$./160_96/ify}
var b11 = {$./0_224/ify}
var dor = {$../Door/ify}
(l == 1):b1+b2+b3+b4+b5+b6+b7+b8+b9+b10+b11+dor

其中Barrier中的每一个子节点也要添加ifx、ify自定义i属性,用于判断英雄和当前障碍物本身的X,Y的距离,根据不同的距离设置自身的值变化;

在这里插入图片描述

var hx = {$../../../Hero/ShowX}
var hy = {$../../../Hero/ShowY}
var x = {$./X}
var y = {$./Y}
var l = {$../../../HeroMassage/Leverl}

var sumx
sumx = x - hx 

(l == 1 && hy == y && sumx == 32):1
(l == 1 && hy == y && sumx == -32):10

在这里插入图片描述

var hx = {$../../../Hero/ShowX}
var hy = {$../../../Hero/ShowY}
var x = {$./X}
var y = {$./Y}
var l = {$../../../HeroMassage/Leverl}

var sumy
sumy = y - hy 

(l == 1 && hx == x && sumy == 32):1
(l == 1 && hx == x && sumy == -32):10

这里对上面的表达式进行解释:这里思路是判断自身的 (X,Y) 和英雄(X,Y)的距离,通过距离的差值为32/-32来控制上下左右按钮的功能;然后通过他们的父节点进行汇总一起判断控制;
当需要判断x的时候y一定是相同的;判断y也是同理
通过值:0、1、10、11来控制人物是否移动;(人物每次移动32-固定数值)
1在十位的时候,上和左按钮失效,人物不移动
1在个位的时候,下和右按钮失效,人物不移动
ifx控制左右按钮,ify控制上下按钮
父节点的ifx和ify把子节点所有的ifx、ify分别求和,再加上一个关卡的数值(关卡1,100;关卡2:200……),通过这个汇总后的数值来控制不同关卡的不同障碍物逻辑。
所有障碍物节点都是同理的这里只展示关卡1的1个障碍物节点逻辑

4.关卡中门的逻辑

在这里插入图片描述

门的逻辑相似于上面的障碍物逻辑,这里只需要在编辑器中增加一条钥匙道具的判断即可
即:拿到对应数量的钥匙才可以移动,门才会开
然后把这条自定义属性也加入到上面总的障碍物Barrier的自定义属性中(对应上面表达式:var dor)

var hx = {$../../Hero/ShowX}
var hy = {$../../Hero/ShowY}
var x = {$./X}
var y = {$./Y}
var l = {$../../HeroMassage/Leverl}
var key = {$../../HeroMassage/KeySum}
var sumy
sumy = y - hy 

(l == 1 && hx == x && key < 1 && sumy == -32):10

5.关卡切换,进入下一关

在这里插入图片描述

这里没有增加自定义属性,还是对原有自定义属性进行修改绑定表达式;
这里增加判断:当生命值大于0并且关卡切换动画的最后一个黑色长方形的x属性等于0时才进行切换
实现:当切换动画执行后,关卡也随之切换到下一关

var HO = {$../Hero/Opacity}
var L = {$./Leverl}
var Health = {$./Health_Number/number}
var Animation = {$../Animation/Item10/X}
var AnimationSum = {$../Animation/m1}
(Health < 1 || HO > 0.1 || Animation != 0):L
(Health > 0 && HO < 0.2 && Animation == 0 ):{$./Leverl} = {$./Leverl}  + 0.5

在这里插入图片描述

6.关卡切换动画和人物的透明度逻辑

通过自定义属性0~1的切换控制动画进入和退出,根据英雄的透明度来判断;
英雄的透明度又基于每个关卡的通关的门和生命值来控制;

在这里插入图片描述
在这里插入图片描述

var show = {$../HeroMassage/Leverl}
var key = {$../HeroMassage/KeySum}
var x = {$./ShowX}
var y = {$./ShowY}
var h = {$../HeroMassage/Health_Number/number}
(h>0):1
(show == 1 && key > 0 && x == 256 && y == 0):0
(show == 2 && key > 2 && x == 0 && y == 0):0
(show == 3 && x == 0 && y == 256):0

7.按钮的逻辑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

8.道具的拾取逻辑

这里用第三关的道具举一个例子,其余道具逻辑同理
所有的道具节点首先增加一个整形LP节点,用于判断人物和道具的距离;
当人物和道具(X,Y)相等时并且关卡也和现在人物所在的关卡相等并且道具存在(Visible=1)则LP=1
同时道具自身的Visible判断到LP=1,然后用自身Visible的值减LP
也就是LP变为1又变为了0
上面说过英雄信息栏的数值等于对应道具的自定义属性LP相加,这时候就加到了这个1,然后再去加就是0,也就是只加1次1,而不是一直循环着加1。
其余道具也是同理;
总结:这样写的好处就是复用性高,只需要修改表达式的小部分,就可以完成每关都不影响还方便使用;

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

var hx = {$../../Hero/ShowX}
var hy = {$../../Hero/ShowY}
var L = {$../../HeroMassage/Leverl}
(hx == {$./X} && hy == {$./Y} && L == 3 && {$./Visible} == 1):1

在这里插入图片描述

小结:

本次对逻辑进行较大修改都改为用绑定表达式来实现,比较痛苦的地方就是前期不知道如何实现功能;
收获较多的地方就是对于编辑器又有了全新的认知,这种方法的实现成功拓宽了一些思路
下次更新:人物、怪物数值计算逻辑,人物形象随数值更新,对战/对话弹出框,攻击特效和逻辑……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值