猫史档案馆


【代码岛3.0】如何实现在水里1秒钟减10滴血?

用户:hecoshecos查看:5 回复:6 评论:5 创建时间:2020-07-12T10:06:26


看代码:

function find(arr,obj){//查找某元素在数组里的位置
     var i=arr.length;
     while(i>=0){
         if(arr[i]===obj){
             return i;
         }
         i--;
     }
     return -1;
}

const tick_time=喵;//每个滴答的时间(毫秒)
var player_name=[];//所有玩家名字都会记录在这个数组里,方便查找
var water_hurt_time=[];//方便记录玩家下一次被水伤害的时间,每个元素的位置都会对应player_name数组里的玩家名字
var in_water=[];//记录玩家是否在水里的状态,值为true或false

world.onPlayerJoin(({entity})=>{
    entity.enableDamage=true;//如果不这样设置,后面就不能对玩家造成伤害
    player_name.push(entity.player.name);
    water_hurt_time.push(1000);
    in_water.push(false);
    //在某个玩家对应的数组里加入玩家信息
})

world.onFluidEnter(({entity})=>{
    in_water[find(player_name,entity.player.name)]=true;//当玩家碰到水,将玩家是否在水中的信息设为true
})

world.onFluidLeave(({entity})=>{
    in_water[find(player_name,entity.player.name)]=false;//与上面相反
})

world.onTick(()=>{
    world.querySelectorAll('player').forEach((e)=>{
        if(in_water[find(player_name,e.player.name)]===true&&water_hurt_time[find(player_name,e.player.name)]<=0){
            e.hurt(10);
            water_hurt_time[find(player_name,e.player.name)]=1000;
        }
    })
    for(let i=0;i<water_hurt_time.length;i++){//将下一次减血时间不短减少
        if(water_hurt_time[i]>0){
            water_hurt_time[i]-=tick_time;
        }
    }
})

world.onPlayerLeave(({entity})=>{//当玩家退出游戏时,将玩家所有信息清空
    index=find(player_name,entity.player.name);
    player_name.splice(index,1);
    water_hurt_time.splice(index,1);
    in_water.splice(index,1);
})

下一次分享什么呢?

欢迎在评论区提问哦!


回复

上一页1 页 / 共 1下一页
指令者指令者

emotion_编程猫_点赞

点赞0


评论


两个小八路两个小八路

emotion_编程猫_加油

点赞0


评论


AlcalaAlcala

emotion_编程猫_点赞

点赞0


评论


文件传输助脚文件传输助脚

AI,你是不是没注意到

skip问题?

点赞0


评论


BSS梅者如西BSS梅者如西

应该加个isplayer判断要不然模型碰到水要报错

点赞0


评论


J_K_Hermione_build白泽J_K_Hermione_build白泽

收藏

点赞0


评论