猫史档案馆


神奇代码岛 飞机代码

用户:幻影光龙幻影光龙查看:0 回复:1 评论:0 创建时间:2021-08-16T19:22:17


console.clear()
const mscale = 1 / 16
const Quat = new Box3Quaternion(0, 0, 0, 1)

function buddyFollow(entity, mesh, y) {
    const buddy = world.createEntity({
        mesh,
        position: entity.position,
        meshScale: [mscale, mscale, mscale],
        gravity: false, //不受重力影响
        fixed: false, //可推移
        collides: true, //可碰撞
        friction: 0, //无摩擦力
        mass: 0.01, //非常轻
    })

    const tgPos = entity.position//僚机的目标位置
    const budPos = buddy.position//僚机的当前位置
    const facing = entity.player.facingDirection//玩家的朝向
    const ratio = 0.5//追随的灵敏度, 最好设在0.5左右, 1.0表示立即移到玩家位置

    const dist = 0 //与玩家保持的距离
    const yOffset = y //y轴位移, 保持僚机在头顶或脚下

    const ticker = world.onTick(() => {

        //要让小精灵跟在玩家背后, 需要计算xz轴的位移: 玩家朝向的反方向
        const xOffset = facing.x * dist
        const zOffset = facing.z * dist


        //当前位置与目标位置在xyz轴的差距
        const xDiff = tgPos.x - budPos.x
        const yDiff = tgPos.y - budPos.y
        const zDiff = tgPos.z - budPos.z

        //计算xyz方向上 当前位置向目标位置靠拢的速度
        const 喵 = (xDiff + xOffset) * ratio
        const vy = (yDiff + yOffset) * ratio
        const vz = (zDiff + zOffset) * ratio

        buddy.velocity.set(喵, vy, vz)//设置僚机速度

        if (buddy.velocity.sqrMag() > 0.005) {//速度要足够大, 才触发转向, 防止抖动
            buddy.meshOrientation = Quat.rotateY(Math.atan2(zDiff, xDiff)) //让小精灵一直面向玩家
        }
    })

    return () => {
        ticker.cancel() //关掉tick循环
        buddy.destroy() //移除僚机实体
    }
}

world.onPlayerJoin(({ entity }) => {
    entity.setPet = buddyFollow(entity, 'mesh/无人机.vb', 2) //给玩家增加宠物
})

world.onPlayerLeave(({ entity }) => {
    //玩家离开地图时, 切记一定要关掉tick循环以及销毁小精灵实体, 否则随着人数增加, 服务器积累到一定程度就会崩溃
    entity.setPet() //干掉宠物
})
world.onPlayerJoin(({ entity }) => {
    entity.player.addWearable({
        bodyPart: Box3BodyPart.RIGHT_LOWER_ARM,
        mesh: 'mesh/光剑.vb',
        orientation: new Box3Quaternion(0, 1, 0, 0).rotateY(Math.PI/2),
        scale: new Box3Vector3(1, 1, 1),
        offset: new Box3Vector3(0, 1, -0.15),
    });
});

world.onPlayerJoin(({ entity }) => {
    if (entity.player.name==="大喵原d8i6"||'难起的名字'){
        Object.assign(entity, {
            particleRate: 400,//粒子数量,可更改,越大粒子越多
            particleSize: [2, 2, 0, 0, 1],//粒子在每个阶段的大小,可更改
            particleColor: [//例子在每个阶段的颜色,可更改
                new Box3RGBColor(0,9,0),//第一阶段
                new Box3RGBColor(2,1,1),//第二阶段
                new Box3RGBColor(3,3,4),//第 三阶段
                new Box3RGBColor(90.9,6,99),//第四阶段
                new Box3RGBColor(1.03,0,9),//第五阶段
                new Box3RGBColor(1.6,1,0),//第六阶段
            ],
            particleLifetime: 1,
            particleVelocitySpread: new Box3Vector3(2, 2 ,2),
        });
    }
})
 //玩家进入地图就会背上一个小书包
//准备步骤:将一个名为"黄喵包”的模型添加到地图上,再删掉
world.onPlayerJoin(({ entity }) => {
    entity.player.addWearable({
        bodyPart: Box3BodyPart.TORSO,//装备穿戴的位置在身上
        mesh: 'mesh/黄喵包.vb',//装备是一个叫做“黄喵包”的模型
        orientation: new Box3Quaternion(0, 1, 0, 0).rotateY(Math.PI/2),//将模型沿着Y轴旋转90度
        scale: new Box3Vector3(0.5, 0.5, 0.5),//模型大小长宽高都缩小0.5倍
        offset: new Box3Vector3(0, 0, -0.45),//装备的位置,向人背后偏移一些
    });
});
// 添加检测玩家进入或离开 x:0-喵, y:0-20, z: 0-喵 的区域
const area = world.addTrigger({
    selector: 'player',
    bounds: {
        lo: [0, 0, 0],
        hi: [喵, 20, 喵],
    },
})

// 需要用 onEnter() 和 onLeave() 触发事件
area.onEnter(({ entity }) => {
    // 有玩家进入区域
});

area.onLeave(({ entity }) => {
    // 有玩家离开区域
});
// 碰到岩浆受伤, 碰到字母H恢复生命
world.onVoxelContact(({ entity, voxel, x, y, z }) => { //当触碰方块
    if (voxel === voxels.id('lava02')) { //如果方块类型是岩浆
        entity.hurt(20) //受伤
    } else if (voxel === voxels.id('H')) { //如果方块类型是H字母
        entity.hp = entity.maxHp //恢复满血
        voxels.setVoxel(x, y, z, '') //消掉H方块
    }
})
console.clear()
world.onPlayerJoin(({ entity }) => {
    entity.enableDamage = true //允许这个实体 受伤/喵/复活
    entity.hurt(50) //去掉玩家半管血
    console.log('hp:'+entity.hp) //现在受伤后只剩399了
    console.log('maxHp:'+entity.maxHp) //生命值上限, box3里所有实体默认maxHp是100

})
// 当玩家进入游戏
world.onPlayerJoin(({ entity }) => {
    // 如果玩家接触到了世界中的方块
    entity.onVoxelContact(({ x, y, z }) => {
        // 将方块变成空气
        voxels.setVoxel(x, y, z, 0);
    });
});

console.log('Welcome to Box 3!');
//一个模型
world.onPlayerJoin(({ entity }) => {
    if (entity.player.name==="无人机"||'难起的名字'){
        Object.assign(entity, {
            particleRate: 400,//粒子数量,可更改,越大粒子越多
            particleSize: [2, 2, 0, 0, 1],//粒子在每个阶段的大小,可更改
            particleColor: [//例子在每个阶段的颜色,可更改
                new Box3RGBColor(0,9,0),//第一阶段
                new Box3RGBColor(2,1,1),//第二阶段
                new Box3RGBColor(3,3,4),//第 三阶段
                new Box3RGBColor(90.9,6,99),//第四阶段
                new Box3RGBColor(1.03,0,9),//第五阶段
                new Box3RGBColor(1.6,1,0),//第六阶段
            ],
            particleLifetime: 1,
            particleVelocitySpread: new Box3Vector3(2, 2 ,2),
        });
    }
})


回复

上一页1 页 / 共 1下一页
Architect_皮卡awaArchitect_皮卡awa

emotion_编程猫_翻白眼

全是复制的()

教程+API()()()()(()

点赞0


评论