用户:
Stephan轩查看:47 回复:40 评论:47 创建时间:2021-12-30T22:39:00
-----------------------------------------------------------------------------------------------------------------------------
没错,我是第一次发教程贴()不过这个教程十分实用,建议收藏(划掉
废话不多说,接下来进入主题
-----------------------------------------------------------------------------------------------------------------------------
本教程的代码效果就是我的《火力の决一喵战》中爆炸特效,先看效果图:



行了,我不炫了,这可是正经的教程贴()接下来进入最重要的代码部分:
async function destroy(shell/*这是武器实体作为参数*/, e/*这是玩家实体作为参数*/) { //首先定义一个函数,也就是承接爆炸特效
for (let i = 3; i > 0; i--) { //主冲击波生成3个
const texiao = world.createEntity({
mesh: 'mesh/炮弹.vb', //这里用的是“mesh/炮弹.vb”模型,在你的图中自行调整
position: shell.position,
fixed: true,
gravity: false,
collides: false,
meshScale: [0.2, 0.2, 0.2],
particleLifetime: 0.5,
particleLimit: 100,
particleRate: 100,
particleSize: [5, 4, 3, 2, 1],
particleColor: new Box3RGBColor(1, 0.2, 0),
meshColor: new Box3RGBColor(1, 0.2, 0),
meshEmissive: 0.1,
meshShininess: 1,
meshMetalness: 100,
})
texiao.addTag(e.player.name + '爆炸') //给主冲击波实体添加玩家标签
}
for (let i = 10; i > 0; i--) { //火花生成10个
const texiao2 = world.createEntity({
mesh: 'mesh/炮弹.vb', //这里用的是“mesh/炮弹.vb”模型,在你的图中自行调整
position: shell.position,
fixed: false,
gravity: true, //火花要允许下落,以便设置速度后自动向下滑行
collides: false,
meshScale: [0.001, 0.001, 0.001],
particleLifetime: 0.5,
particleLimit: 100,
particleRate: 100,
particleSize: [2, 1.8, 1.6, 1.4, 1.2],
particleColor: new Box3RGBColor(0.5, 0.2, 0),
meshColor: new Box3RGBColor(1, 0.2, 0),
meshEmissive: 1,
})
texiao2.addTag(e.player.name + '火花') //给火花实体添加玩家标签
texiao2.velocity.set(Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1) //给火花实体设置速度
}
const start_tick = world.currentTick //记录特效开始的时刻
while (world.currentTick - start_tick < 10) { //若当前时刻-开始时刻 小于10(也就是特效还没结束),则一直执行循环中的代码
world.querySelectorAll('.' + e.player.name + '爆炸').forEach(async (texiao) => { //获取此玩家造成的所有主冲击波实体
texiao.velocity.set(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5) //随机速度
texiao.meshScale.x -= 0.02 //减小x缩放
texiao.meshScale.z -= 0.02 //减小z缩放
texiao.meshScale.y -= 0.02 //减小y缩放
})
await sleep(100)
}
//若当前时刻-开始时刻 大于或等于10(也就是特效结束了),跳出上方循环,执行下方代码
world.querySelectorAll('.' + e.player.name + '爆炸').forEach((e) => { //获取此玩家造成的所有主冲击波实体
e.destroy() //删除实体
})
world.querySelectorAll('.' + e.player.name + '火花').forEach((e) => { //获取此玩家造成的所有火花实体
e.destroy() //删除实体
})
}
//函数定义完毕,然后在你的武器击中目标后调用此函数,就能成功添加爆炸特效!
教程结束,可以在你的图里也试试哦!
墨染云天imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"
点赞0
评论
2233我吐了aaaa这对代码萌新不太友好吧)
问一下函数里的炮弹是指你发射的东西吗()
还有就是是这么调用的吗()
arrow.onEntityContact(({ other }) => {
if(other.isPlayer && !arrow.hasTag(`${other.player.name}`)){
arrow.destroy(arrow,other)
let sh = 114514
other.hurt(sh)//喵10
other.player.directMessage(`你受到了${sh}点伤害,剩余${other.hp},攻击者:${entity.player.name}`)
}
})点赞0
评论