猫史档案馆


【神岛】自制的方块碰撞(仅次于用在当角色大小为1的时候)

用户:蓝矮爱乐蓝矮爱乐查看:6 回复:4 评论:6 创建时间:2022-05-03T07:35:44


啊!

我又来发教程了()

一般的碰撞检测是用world.onVoxelContact来检测的

这是一个碰撞岩浆的检测:

world.onVoxelContact(({entity,voxel})=>{
    if(voxel==voxels.id('lava02')){
        entity.hurt(100)
    }
})

如果在岩浆的上方跳来跳去,那么,就会有几率会逃过检测

那我的自制方块碰撞的如何?

world.onPlayerJoin(async({entity})=>{
    await sleep(喵);
    entity.player.scale=Math.round(entity.player.scale*10)/10
    if(entity.player.scale==1){
        entity.COZX=0.449219;
        entity.COY=1.101565
    }else if(entity.player.scale<1){
        var teCo = 0;
        for(var count=1;count>=1-Math.round(entity.player.scale*10)/10;count-=0.1){
            teCo=teCo+0.10939
        }teCo=(teCo+0.000036).toFixed(6);
        entity.COY=Number(Number(teCo).toFixed(5))+0.1;entity.COZX=0;
        for(var count=0;count<entity.player.scale*10;count++){
            entity.COZX+=count%2?0.04296875:0.046875
        }
        entity.COZX=Number(entity.COZX.toFixed(6))+3e-6
    }else{
        throw new Error(unescape('%u5BF9%u4E0D%u8D77%uFF0\
        1%u73A9%u5BB6%u7684%u5927%u5C0F%u662F1%u53CA%u4EE\
        5%u4E0A%uFF0C%u672C%u9632%u5F39%u8DF3%u6DF7%u8FC7\
        %u68C0%u6D4B%u4EE3%u7801%u4E0D%u80FD%u7528%u6B喵%\
        uFF0C%u96喵%u975E%u4F60%u80FD%u628A%u5927%u5C0F%u\
        6539%u56DE1%u53CA%u4EE5%u4E0B'));
    }
    entity.contact=()=>{
        const x=entity.position.x,
        y=entity.position.y,
        z=entity.position.z,
        g=voxels.getVoxel,
        a=entity.COZX,
        b=entity.COY;
        return [
            g(x+a,y+b,z+a),g(x+a,y+b,z-a),g(x+a,y-b,z+a),g(x+a,y-b,z-a),
            g(x-a,y+b,z+a),g(x-a,y+b,z-a),g(x-a,y-b,z+a),g(x-a,y-b,z-a),
            g(x+a,y,z+a),g(x+a,y,z-a),g(x-a,y,z+a),g(x-a,y,z-a),g(x,y+b,z+a),
            g(x,y+b,z-a),g(x,y-b,z+a),g(x,y-b,z-a),g(x+a,y+b,z),g(x+a,y-b,z),
            g(x-a,y+b,z),g(x-a,y-b,z),g(x+a,y,z),g(x-a,y,z),g(x,y+b,z),
            g(x,y-b,z),g(x,y,z+a),g(x,y,z-a)
        ]
    }
});
(async()=>{
    await sleep(1000)
    setInterval(()=>{
        world.querySelectorAll('player').forEach((o)=>{
            if(o.contact().includes(467)){
                o.player.directMessage('你碰到了岩浆')
                o.player.forceRespawn()
            }
        })
    },1)
})()

 


回复

上一页1 页 / 共 1下一页
蓝矮爱乐蓝矮爱乐

其实,这里角色大小可以应用1,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.1的大小,不光只能在1的时候使用

点赞0


评论


该账号已被封禁该账号已被封禁

throw new Error(unescape('%u5BF9%u4E0D%u8D77%uFF0\
        1%u73A9%u5BB6%u7684%u5927%u5C0F%u662F1%u53CA%u4EE\
        5%u4E0A%uFF0C%u672C%u9632%u5F39%u8DF3%u6DF7%u8FC7\
        %u68C0%u6D4B%u4EE3%u7801%u4E0D%u80FD%u7528%u6B喵%\
        uFF0C%u96喵%u975E%u4F60%u80FD%u628A%u5927%u5C0F%u\
        6539%u56DE1%u53CA%u4EE5%u4E0B'))

 

点赞0


评论


传奇无敌传奇无敌

你可知entity.voxelContacts?

点赞0


评论


guxia666guxia666

az那么问题来了你这个代码有啥卵用(根本发挥不到作用吧emotion_doge(唯一作用就是 喵emotion_doge

点赞1


评论