猫史档案馆


【Box3求助】如何让玩家跑酷的轨迹回放(使用模型,pro端用)

用户:生命之神晨海龙神神位生命之神晨海龙神神位查看:4 回复:3 评论:4 创建时间:2024-01-09T00:57:57


如如如如如如如如如如题


回复

上一页1 页 / 共 1下一页
追梦ez追梦ez

最简单也最麻烦的就是记录玩家几毫秒过后的位置写成列表,然后让模型去移动

点赞0


评论


NomenNomen

shequ.codemao.cn/community/543058

点赞1


评论


NomenNomen

啊可恶忘记放代码了怎么没人告诉我

const elevator = world.querySelector('.awa') //获取电梯板实体
elevator.fixed = true//不受外力影响
elevator.collides = false//允许碰撞
function splitArray(array, size) {
    const result = [];
    for (let i = 0; i < array.length; i += size) {
        result.push(array.slice(i, i + size));
    }
    return result;
}
async function play(t, r) {
    let anis = [];
    console.log(`KeyFrames ${r.length}`);
    splitArray(r.map(v => {
        return {
            ...v,
            duration: 1,
        }
    }), 16).forEach((v) => {
        let ani = t.animate(v, {
            duration: v.length,
            iterations: 1,
            direction: Box3AnimationDirection.NORMAL,
            delay: 0,
            endDelay: 0,
        });
        anis.push(ani);
    })
    for (let i = 0; i < anis.length; i++) {
        anis[i].play();
        await sleep(1000);
    }

}
async function record(entity) {
    let s = false;
    let p = [];
    new Promise(r => {
        let e = entity.player.onPress(({ button }) => {
            if (button === Box3ButtonType.ACTION1) {
                s = true;
                e.cancel();
                r(null);
            }
        });
    });
    console.log('start recording')
    await new Promise(r => {
        let e = world.onTick(() => {
            if (s) {
                e.cancel();
                r(null);
                return;
            }
            p.push({ position: entity.position.clone() });
        })
    });
    console.log('finish recording');
    return p;
}

忘记怎么用了,总之大概就是这个思路

点赞0


评论