猫史档案馆


沉着的潘达熊MZXB

沉着的潘达熊MZXB

Lv.1

获赞:7收藏:0浏览:11作品收藏:0
回复帖子评论
上一页1 页 / 共 1下一页

【源码编辑器Kitten】意见反馈信箱(长期有效) 中回复

这是怎么回事?center_image

2020-12-13T16:44:01 点赞:0

教程师召唤计划,启动 中回复

搞什么啊,岛3都了!!!!!官方出来快来修复!!!!!!

center_image

 

2022-03-13T14:57:31 点赞:0

【kitten4.0反馈】遇到问题不要怕,技术喵来帮你忙! 中回复

多人协作作品怎么保存本地啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

不然我们怎么参赛啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

2022-03-15T15:02:06 点赞:0

【Kitten公测·版本更新】来自4.0的全新体验,都是你想要的功能 中回复

imgsrc="https://static.codemao.cn/emotion/thunder_monkey/%E9%9B%B7%E7%94%B5%E7%8C%B42.gif"alt="emotion_雷电猴_哇噻"

2022-03-16T12:37:39 点赞:0

【每日亿个岛3建图小技巧】点击建造或者摧毁方块,创意达人必备! 中回复

c喵ole.clear()

/** --------------生成围墙的代码----------------- */
for (let x = 0; x < 127; x++) {
    for (let y = 9; y < 126; y++) {
        voxels.setVoxel(x, y, 0, 'stone')
        voxels.setVoxel(x, y, 126, 'stone')
    }
}
for (let z = 0; z < 127; z++) {
    for (let y = 9; y < 126; y++) {
        voxels.setVoxel(0, y, z, 'stone')
        voxels.setVoxel(126, y, z, 'stone')
    }
}
for(let x = 0;x < 128 ;x++){
    for(let z = 0;z < 128 ;z++){
        voxels.setVoxel(x, 125, z, 'glass')
    }
}
/** --------------生成围墙的代码----------------- */


world.onPlayerJoin(({ entity }) => {
    entity.player.onPress(async ({ raycast, button }) => {
        // 点击鼠标左键 发射蛛丝,并飞向蛛丝射中的位置
        if (button == Box3ButtonType.ACTION0) {

            // 首先实现发射蜘蛛丝的效果
            // 并拿到蜘蛛丝的实体做后续操作
            c喵t id = raycast.hitVoxel
            c喵t spiderSilk = fireSpiderSilk(raycast, entity, id)

            // 使用animate模拟飞行过程中,蛛丝逐渐缩短的效果
            shortenSpiderSilk(raycast, spiderSilk)

            await sleep(300)

            // 蛛丝开始缩放后,给玩家沿着蛛丝方向的速度,模拟蛛丝拉扯飞行的效果
            firePlayer(raycast, entity)

            // 最后要记得销毁蛛丝,避免卡顿
            await sleep(500)
            spiderSilk.destroy()
        }
    })
})

/** 发射玩家 */
function firePlayer(raycast, entity) {
    // 准心击中位置与玩家位置做向量减法,获得蛛丝的方向向量
    c喵t direction = raycast.hitPosition.sub(entity.position)
    // 给方向向量乘以一个合适的系数,模拟玩家飞出去的效果。y轴速度小一些的原因是避免飞太高
    c喵t velocity = new Box3Vector3(direction.x * 0.15, direction.y * 0.1, direction.z * 0.15)
    entity.velocity = velocity.clone()

    // 小技巧~~如果射中了其他玩家,可以给他一个反方向速度,模拟粘过来的效果
    if (raycast.hitEntity && raycast.hitEntity.isPlayer) {
        raycast.hitEntity.velocity = velocity.scale(-1)
    }
}

/** 蛛丝缩短的效果 */
function shortenSpiderSilk(raycast, spiderSilk) {
    // 飞行过程中,蛛丝变化的属性有:position、meshScale
    // 如果只缩短蛛丝,而不更改蛛丝位置,不能完整模拟出效果
    // 蛛丝初始生成位置
    c喵t startPos = spiderSilk.position
    // 蛛丝在缩短的过程中需要移动到准心击中的位置
    c喵t endPos = raycast.hitPosition
    // 蛛丝初始缩放值
    c喵t initialScale = spiderSilk.meshScale
    // 蛛丝最终需沿x轴缩到最短
    c喵t endScale = new Box3Vector3(0, 1 / 16, 1 / 16)
    c喵t ani = spiderSilk.animate([
        { position: startPos, meshScale: initialScale, duration: 1 },
        { position: endPos, meshScale: endScale, duration: 0 },
    ])


    ani.play({
        duration: 16 * 0.45, // 播放过程0.45秒,如需更改缩放时间,更改这个数值。相应的也需更改玩家的飞行速度
        iterati喵: 1, // 只播放一次
        direction: Box3AnimationDirection.NORMAL, // 正常播放
    })
}

/** 发射蜘蛛丝 */
function fireSpiderSilk(raycast, entity, hitVoxel) {
    c喵t pos = raycast.voxelIndex // 射线指到的方块位置
    // 摧毁准心对准的方块,用来标记击中的位置
    voxels.setVoxel(pos.x, pos.y, pos.z, hitVoxel)
    // 准心击中位置与玩家位置做向量减法,获得蛛丝的方向向量
    c喵t direction = raycast.hitPosition.sub(entity.position)
    // 通过射出的方向向量,计算出蛛丝的旋转四元数
    c喵t meshOrientation = getOrientationByVector(direction)
    // 准心击中位置与玩家位置的距离,为蛛丝的长度
    c喵t distance = raycast.hitPosition.distance(entity.position)
    // 1/16 为基准缩放值。蛛丝的设计模型为沿x轴方向设计,且为两个方块长度。因此x轴缩放值为1 / 16 * distance / 2
    c喵t initialScale = new Box3Vector3(1 / 16 * distance / 2, 1 / 16, 1 / 16)
    // 蛛丝的生成位置应为 准心击中位置与玩家位置的向量插值的中心点
    c喵t initialPos = entity.position.lerp(raycast.hitPosition, 0.5)
    // 用各种计算好的数值创建蛛丝
    c喵t spiderSilk = world.createEntity({
        mesh: "mesh/钢丝.vb",
        position: initialPos,
        collides: false,
        gravity: false,
        meshScale: initialScale,
        meshOrientation: meshOrientation
    })
    return spiderSilk
}

// 本示例中用到的钢丝模型为沿着x轴方向设计。因此用的Box3Quaternion(0, 0, 0, 1)四元数去做旋转计算
// 如果大家使用沿其他轴向设计的模型,请使用下面注释的四元数去做旋转计算
c喵t Quat = new Box3Quaternion(0, 0, 0, 1) // 沿x轴方向设计的蛛丝,初始化四元数,用于旋转计算
// c喵t Quat = new Box3Quaternion(0.000, 0.000, -0.707, 0.707) // 沿y轴方向设计的资源用
// c喵t Quat = new Box3Quaternion(0.000, 0.707, 0.000, 0.707) // 沿z轴方向设计的资源用

/** 通过射出的方向向量,计算出蛛丝的旋转四元数 */
function getOrientationByVector(vector3) {
    c喵t src = vector3
    let dx = src.x
    let dy = src.y
    let dz = src.z
    let dist = Math.sqrt(dx * dx + dz * dz)
    c喵t rotx = Math.atan2(dy, dist)
    return Quat.rotateX(rotx).rotateY(Math.atan2(dz, dx))
}

2022-03-19T15:20:12 点赞:0

萌新求问-----------急急急急急急急急急 中回复

代码来了(不过血条不会根据角色移动,这个就当作业自己改进吧)

打血条角色:center_image

血条:center_imagecenter_image

2022-07-08T19:05:44 点赞:0

GameAI怎么用,在线等。 中回复

见网址:https://codemao.yuque.com/books/share/165bda28-1103-48dd-a9cf-ca11b75ab2a8/cr4koz  

2022-07-08T19:15:24 点赞:0

编程猫消息通知器v0.2 发布啦! 中回复

你是怎么做到让软件在Win系统下独立运行的?你又是怎么打包的?这得掌握超高的技术才做的出来!而且你的语言风格和技术喵很像,让我严重怀疑你是技术喵的小号。

 

2022-07-08T19:29:14 点赞:2