【游戏功能】
一、一次吓到自己的召唤
召唤兽系统的内测录像里有个名场面:道士按下召唤,屏幕上"啪"地多出一只金毛巨狼,没有地缝、没有光、没有出场——道士自己被吓得往旁边跑了两步。玩家的直觉很朴素:凭空出现的东西,要么是 bug,要么是鬼。召唤的表现必须回答"它从哪来",答案越有仪式感,这只召唤兽在玩家心里就越值钱。神兽下山的标准答案是一条竖直的金光地缝:光先裂开地,兽再从光里跳出来。
二、机制原理:金光、破土、跟随
神兽下山三步走。裂地:施法者掌心落地,目标点竖起一道金色光柱,地面同时裂开一条亮缝——光柱是"天上降下的旨意",地缝是"地下的回应",两件事同时发生才有"仪式"的分量。破土:光柱亮起约零点七秒后,神兽从地平线下方升起——绘制上把精灵压低六十六像素再用裁剪线只显示地面以上部分,升起过程自带破土感,边缘同步扬尘。跟随:出土完成后神兽站到主人侧后方九十二像素处待命,主人转向它跟着转向;接到出击指令后冲向目标撕咬,咬合帧命中才结算伤害。神兽六向、永远面对主人或敌人,出场那一刻的对视是"听令"的宣言。
fx-beast
三、正确写法:神兽下山(幂尔版)
local SummonBeast = {}
local CONST = { MSG_ID = 12070, KEY = "SummonBeast", RISE_TIME = 0.6 }
function SummonBeast.Cast(myID)
local myX = SL:GetValue("ACTOR_POSITION_X", myID)
local myY = SL:GetValue("ACTOR_POSITION_Y", myID)
local bx, by = myX + 130, myY -- 出土点: 主人前方
SummonBeast._pillar = CreateGoldenPillar(bx, by) -- 金光地缝
SL:SendLuaNetMsg(CONST.MSG_ID, 0, 0, 0,
SL:JsonEncode({ key = CONST.KEY, op = 1, actorID = myID, bx = bx, by = by }))
SL:ScheduleOnce(function()
SummonBeast.Rise(bx, by, myID)
end, 700)
end
function SummonBeast.Rise(bx, by, ownerID)
local beast = CreateMonster(9992, bx, by + 66) -- 先压在地平线下
beast:SetClipRect(0, by - 130, SCENE_W, 130) -- 只显示地面以上
beast:runAction(cc.Sequence:create(
cc.MoveBy:create(CONST.RISE_TIME, cc.p(0, -66)),
cc.CallFunc:create(function()
beast:ClearClipRect()
SpawnDust(bx, by)
beast:SetFollowOwner(ownerID) -- 框架自带的跟随
end)
))
end
return SummonBeast
四、四个必须钉死的细节
五、心法:召唤兽的价值一半在出场里
神兽下山的思路适用一切召唤类表现:骷髅从地里爬、火灵从法阵中升起、傀儡从空投箱里摔出——"来路"的仪式感直接决定召唤兽的身价。框架层这头,召唤兽的跟随、朝向、仇恨全部复用怪物系统的现成能力,表现层只需要做好那一次出场。出场值多少钱,召唤兽就值多少钱。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 一、先抛一个坑 同样是"放一片技能特效",为什么有的游戏炸二十个火球丝般顺滑,有的游戏炸五个就掉帧?直觉答案"…
【游戏功能】 一、一个职业选手的操作拆解 看高手第一视角录像,最费解的操作是:他打一下、退两步、再打一下,全程像在跳一支排练…
【游戏功能】 一、一个被浪费的冰冻 组里新人做了个冰法连招:冰冻命中后立刻接大火球,理论伤害翻倍。试玩却怪怪的——冰冻刚套上…
【游戏功能】 一、一次吓到自己的召唤 召唤兽系统的内测录像里有个名场面:道士按下召唤,屏幕上"啪"地多出一只金毛巨狼,没有地…
【游戏功能】 一、先抛一个坑 领域类技能最怕做成"一次性特效放完拉倒":冰环扩一圈、冻一下、结束——站在领域里的怪第二秒解冻…
【游戏功能】 一、一次只有挨打没有还手的守势 守势类技能首版的哀嚎最一致:"金环弹开了围攻,然后呢?"——然后没有然后。格挡…