猫史档案馆


【代码岛教程教程】TNT攻击特效来啦!

用户:追梦喵aowC追梦喵aowC查看:24 回复:24 评论:24 创建时间:2021-09-04T21:57:25


哦吼吼吼吼吼)这里是sha雕追梦的小课堂(滑稽)

由于开学了作业多所以气得我天天吃作业)

由于追梦光顾着吃作业所以更新难免会不及时)可能下次更新就是十月了))))

话不多说进入正题)

首先老规矩我们先把框架抬上来

world.onPress(async({ button, entity, raycast }) => { //事件(玩家按下按钮)
    if(button ==='action0'){//如果这个按钮是左键
    
    }
})

然后在玩家的位置放置一个TNT的模型,让他往鼠标方向移动

 

 

world.onPress(async({ button, entity, raycast }) => { //事件
    if(button ==='action0'){
   
    const ball =world.createEntity({//放个模型
    mesh:"mesh/tnt.vb",
    collides:true,
    meshScale:[0.06,0.06,0.06],//模型缩放
    position:[entity.position.x, entity.position.y+, entity.position.z],
    })
   
    ball.velocity.x += raycast.direction.x*2; ball.velocity.y += raycast.direction.y*2; ball.velocity.z += raycast.direction.z*2;//设置速度
    }
 })

这时候就轮到奇妙的bug出场了)

 

因为放置的位置在玩家的正中间,所以有百分之80的几率会在玩家身上弹开

这里有种解决方法是让tnt模型等待几秒再开启碰撞,但是如果玩家想要炸自己)朝地面发射——

TNT就穿墙了)

所以这里在放置的时候可以让它先朝鼠标的方向走一点,这样就不至于弹开了

world.onPress(async({ button, entity, raycast }) => { //事件
    if(button ==='action0'){
   
    const ball =world.createEntity({//放个模型
    mesh:"mesh/tnt.vb",
    collides:true,
    meshScale:[0.06,0.06,0.06],
    position:[entity.position.x+raycast.direction.x, entity.position.y+raycast.direction.y, entity.position.z+raycast.direction.z],//此处有变化
    })
    ball.velocity.x += raycast.direction.x*2; ball.velocity.y += raycast.direction.y*2; ball.velocity.z += raycast.direction.z*2;
   
    }
 })

接下来就是灵魂一步了(敲黑板)我们要给它加上炸掉方块的效果

 

如果用for循环设置范围炸出一个正方形就会肥肠美观)

center_image

好吧美观到我不忍直视)

 

所以聪明的我就搬来了造球代码))))我们可以用造球代码在爆炸的位置造一个球,只不过方块是空气

 

 

async  function sphere(vox, cx, cy, cz, radius){//参数分别是方块、x,y,z和圆的半径
    let xend = cx+radius
    let yend = cy+radius
    let zend = cz+radius
    for(let x=cx-radius;x<=xend;x++){
    for(let y=cy-radius;y<=yend;y++){
    for(let z=cz-radius;z<=zend;z++){
        let dx = x-cx;
        let dy = y-cy;
        let dz = z-cz;
        if(Math.round(Math.sqrt(dx*dx+dy*dy+dz*dz)) <= radius){
            voxels.setVoxel(x,y,z,vox)
        }
    }}}
}
 world.onPress(async({ button, entity, raycast }) => { //事件
    if(button ==='action0'){
   
    const ball =world.createEntity({//放个模型
    mesh:"mesh/tnt.vb",
    collides:true,
    meshScale:[0.06,0.06,0.06],
    position:[entity.position.x+raycast.direction.x, entity.position.y+raycast.direction.y, entity.position.z+raycast.direction.z],
    })
    ball.onVoxelContact(({ x, y, z, voxel }) => {//TNT碰到了方块
    sphere('air',ball.position.x,ball.position.y,ball.position.z,3)//造一个空气球
    ball.destroy()//删除TNT
    });
    ball.velocity.x += raycast.direction.x*2; ball.velocity.y += raycast.direction.y*2; ball.velocity.z += raycast.direction.z*2;
    }
 })

所以)))

 

 

伟大的TNT特效就此诞生!(鼓掌!~)

ps:作业太多搞的人都傻了所以有点抽风(doge)

好吧回到正题,到这里基本的功能就实现了,如果想增大爆炸范围或者增加伤害自行在原程序上做亿点点小改变就行了(滑稽)

下面是展示图)因为本喵过于手残所以没有抓拍到瞬间)center_image

 

 

如果觉得不够炫你也可以给它加个粒子特效或者爆炸伤害之类的)点的我太懒了)不想做了)

因为之前做kitten习惯了图形化的理解方式)如有错误欢迎批评指正

 


回复

上一页1 页 / 共 1下一页
追梦喵aowC追梦喵aowC

D一D

点赞0


评论


AlcalaAlcala

喵d

点赞0


评论


AlcalaAlcala

求地图链接(

点赞0


评论


成熟的强袭编程猫548成熟的强袭编程猫548

前排,发点做boss的代码把))比如发射火球对玩家啥的)

点赞0


评论


时当日色QWQ时当日色QWQ

抓捕

点赞0


评论


追梦喵aowC追梦喵aowC

也许此教程可以解释深海的TNT的神奇bug)

点赞0


评论


seven葫中葫seven葫中葫

堵啊

点赞0


评论


seven葫中葫seven葫中葫

堵啊嘟嘟啊堵啊阿杜

点赞0


评论


追梦喵aowC追梦喵aowC

再顶一下

点赞1


评论


Architect_胖达Architect_胖达

awa

点赞0


评论


SHEL深空无尽SHEL深空无尽

假如把空气球半径设成128会怎么样(滑稽)

点赞0


评论


无尽深空无尽深空

这个好像没伤害。

点赞0


评论


无尽深空无尽深空

我发现水也能扎个洞。

点赞0


评论


摩羯哥哥摩羯哥哥

 

 

点赞0


评论


治愈绾兮治愈绾兮

所以玩家被爆炸后的TNT炸飞的效果呢()其实我已经写完这种代码了,还加了打火石和火焰弹引爆

点赞1


评论


豹2a7豹2a7

不错!

点赞1


评论


YLG_個YLG_個

()

点赞0


评论


银狐残影银狐残影

能不能发个被破坏的方块自动还原代码

点赞0


评论


AB骉AlobokAB骉Alobok

TNT呢

 

点赞0


评论


屑怪盗屑怪盗

保存

点赞0


评论


卑微OIer卑微OIer

考古(?)

点赞0


评论


无极玄天无极玄天

我突然知道愚公移山代码哪来的了

点赞0


评论


宁静倒数28天宁静倒数28天

控制台:听说你很勇哦~

点赞0


评论


TAM无敌TAM无敌

.。。。。。。。。。。。。。。

点赞0


评论