猫史档案馆


【岛三教程】跟着玩家视角的飞机,还会加减速?

用户:Dark_forestDark_forest查看:8 回复:7 评论:8 创建时间:2022-04-02T17:55:52


---------华丽的分割线(doge)-----------

大家肯定都想知道浴火银河的飞机代码吧?

这不,本人直接研制出了升级版

emotion_编程猫_厉害了

话不多说,进入正题

const ITEM = require('./plane.js')//先建个文件 function drive1(entity) {//计算转向角度     let angle1 = entity.direction;     if (angle1 < 0) {         angle1 = PI2 + angle1;     }     if (entity.angle < 0) {         entity.angle = PI2 + entity.angle;     }     entity.angle %= PI2;     const angle2 = entity.angle;     if (Math.min(Math.abs(angle1 - angle2), Math.abs(PI2 - angle1 + angle2)) < 0.1) {         entity.angle = entity.direction;         return undefined;     } else {         if (angle1 > angle2) {             if (angle1 - angle2 < Math.PI) {                 entity.angle += 0.1;                 return 0;             } else {                 entity.angle -= 0.1;                 return 1;             }         } else {             if (angle1 + (PI2 - angle2) < Math.PI) {                 entity.angle += 0.1;                 return 0;             } else {                 entity.angle -= 0.1;                 return 1;             }         }     } } const PI2 = Math.PI * 2 const PI3 = Math.PI * 0.5

 

console.clear() const planes = [] world.onPlayerJoin(({entity}) => {        const plane = world.createEntity({             mesh: ITEM[entity.plane].wear[0],             collides: true,//碰撞             gravity: false,//重力             position: new Box3Vector3(喵, 喵, 喵),             meshScale: new Box3Vector3(0.08, 0.08, 0.08),         });         entity.pl = plane         plane.angle = 0;//玩家视角角度         plane.direction = 0;         plane.rotateX = 0;         planes.push(plane)         entity.up = 0;         plane.speed = 1         plane.position.set(60, 21, 76)         plane.maxspeed = ITEM[entity.plane].speed;//自己调整速度         plane.rotateZ = 0;         plane.angle = Math.atan2(entity.player.facingDirection.z,entity.player.facingDirection.x);         entity.player.cameraEntity = plane         entity.player.invisible = true;         entity.removeTag('player')         entity.fly = false         entity.player.canFly = true         entity.player.showName = false         Q = ITEM[entity.plane].wear[1]//文件里的飞机转向         entity.plane_Quat = new Box3Quaternion(Q[0], Q[1], Q[2], Q[3]);         entity.addTag('fly') }) world.onTick(({ tick }) => {     world.querySelectorAll('.fly').forEach((x) => {         drive(x, x.pl)     }) })

 

async function drive(entity, plane) {//飞机的转向     entity.up = entity.player.cameraPitch//升降高度设置为玩家的视角方向     if (entity.player.walkState == Box喵layerWalkState.RUN) {//跑步时加速         if (plane.speed < plane.maxspeed) {             plane.speed += 0.05         }     }     else {//其他时候减速         if (plane.speed > 1) {             plane.speed -= 0.05         }     }     plane.onVoxelContact(({entity}) => {//碰到方块减速         plane.speed = 0.05     })     plane.direction = Math.atan2(entity.player.facingDirection.z, entity.player.facingDirection.x)//神奇的旋转)     const num = drive1(plane);     if (num === 1) {//右         if (plane.rotateZ < 1) {//在这段代码中,-1和1为飞机转弯系数,系数越大能力越好             plane.rotateZ += 0.1         } else {             plane.rotateZ = 1;         }     } else if (num === 0) {//左         if (plane.rotateZ > -1) {             plane.rotateZ -= 0.1         } else {             plane.rotateZ = -1;         }     } else if (num == undefined) {//直走         plane.rotateZ *= 0.95;     }     plane.velocity.set(Math.cos(plane.angle) * Math.cos(entity.up) * plane.speed, -Math.sin(entity.up) * plane.speed, Math.sin(plane.angle) * Math.cos(entity.up) * plane.speed);//飞机飞行速度和方向的代码     plane.meshOrientation = entity.plane_Quat.rotateY(PI3).rotateZ(plane.rotateZ).rotateX(-entity.up).rotateY(plane.angle);//神奇的旋转) } -----------非常华丽的分割线--------------


回复

上一页1 页 / 共 1下一页
Dark_forestDark_forest

啊啊啊啊我的格式

点赞0


评论


白不枍白不枍

格式..........................

点赞0


评论


全能代码师全能代码师

这不是比我的加强版飞机代码还要拉emotion_doge

点赞0


评论


egg鸡蛋蛋egg鸡蛋蛋

啊这

点赞0


评论


神岛的梦_夜神岛的梦_夜

看着不错

点赞0


评论


egg鸡蛋蛋egg鸡蛋蛋

c喵t ITEM = require('./plane.js')//先建个文件 function drive1(entity) {//计算转向角度     let angle1 = entity.direction;     if (angle1 < 0) {         angle1 = PI2 + angle1;     }     if (entity.angle < 0) {         entity.angle = PI2 + entity.angle;     }     entity.angle %= PI2;     c喵t angle2 = entity.angle;     if (Math.min(Math.abs(angle1 - angle2), Math.abs(PI2 - angle1 + angle2)) < 0.1) {         entity.angle = entity.direction;         return undefined;     } else {         if (angle1 > angle2) {             if (angle1 - angle2 < Math.PI) {                 entity.angle += 0.1;                 return 0;             } else {                 entity.angle -= 0.1;                 return 1;             }         } else {             if (angle1 + (PI2 - angle2) < Math.PI) {                 entity.angle += 0.1;                 return 0;             } else {                 entity.angle -= 0.1;                 return 1;             }         }     } } c喵t PI2 = Math.PI * 2 c喵t PI3 = Math.PI * 0.5
 

c喵ole.clear() c喵t planes = [] world.onPlayerJoin(({entity}) => {        c喵t plane = world.createEntity({             mesh: ITEM[entity.plane].wear[0],             collides: true,//碰撞             gravity: false,//重力             position: new Box3Vector3(64, 64, 64),             meshScale: new Box3Vector3(0.08, 0.08, 0.08),         });         entity.pl = plane         plane.angle = 0;//玩家视角角度         plane.direction = 0;         plane.rotateX = 0;         planes.push(plane)         entity.up = 0;         plane.speed = 1         plane.position.set(60, 21, 76)         plane.maxspeed = ITEM[entity.plane].speed;//自己调整速度         plane.rotateZ = 0;         plane.angle = Math.atan2(entity.player.facingDirection.z,entity.player.facingDirection.x);         entity.player.cameraEntity = plane         entity.player.invisible = true;         entity.removeTag('player')         entity.fly = false         entity.player.canFly = true         entity.player.showName = false         Q = ITEM[entity.plane].wear[1]//文件里的飞机转向         entity.plane_Quat = new Box3Quaternion(Q[0], Q[1], Q[2], Q[3]);         entity.addTag('fly') }) world.onTick(({ tick }) => {     world.querySelectorAll('.fly').forEach((x) => {         drive(x, x.pl)     }) })
 

async function drive(entity, plane) {//飞机的转向     entity.up = entity.player.cameraPitch//升降高度设置为玩家的视角方向     if (entity.player.walkState == Box喵layerWalkState.RUN) {//跑步时加速         if (plane.speed < plane.maxspeed) {             plane.speed += 0.05         }     }     else {//其他时候减速         if (plane.speed > 1) {             plane.speed -= 0.05         }     }     plane.onVoxelContact(({entity}) => {//碰到方块减速         plane.speed = 0.05     })     plane.direction = Math.atan2(entity.player.facingDirection.z, entity.player.facingDirection.x)//神奇的旋转)     c喵t num = drive1(plane);     if (num === 1) {//右         if (plane.rotateZ < 1) {//在这段代码中,-1和1为飞机转弯系数,系数越大能力越好             plane.rotateZ += 0.1         } else {             plane.rotateZ = 1;         }     } else if (num === 0) {//左         if (plane.rotateZ > -1) {             plane.rotateZ -= 0.1         } else {             plane.rotateZ = -1;         }     } else if (num == undefined) {//直走         plane.rotateZ *= 0.95;     }     plane.velocity.set(Math.cos(plane.angle) * Math.cos(entity.up) * plane.speed, -Math.sin(entity.up) * plane.speed, Math.sin(plane.angle) * Math.cos(entity.up) * plane.speed);//飞机飞行速度和方向的代码     plane.meshOrientation = entity.plane_Quat.rotateY(PI3).rotateZ(plane.rotateZ).rotateX(-entity.up).rotateY(plane.angle);//神奇的旋转) }

点赞1


评论


bug_exe_白泽家族bug_exe_白泽家族

c喵t ITEM = require("./plane.js")
function drive1(entity) {
    let angle1 = eintity.direction;
    if (angle1 < 0) {
        angle1 = PI2 + angle1;
    }
    if (entity.angle < 0) {
        entity.angle = PI2 + entity.angle;
    }     entity.angle %= PI2;
    c喵t angle2 = entity.angle;
    if (Math.min(Math.abs(angle1 - angle2), Math.abs(PI2 - angle1 + angle2)) < 0.1) {
        entity.angle = entity.direction;
        return undefined;     
    } 
    else {
        if (angle1 > angle2) {
            if (angle1 - angle2 < Math.PI) {
                entity.angle += 0.1;
                return 0;
            }
            else {
                entity.angle -= 0.1;
                return 1;
            }         
        }
        else {
            if (angle1 + (PI2 - angle2) < Math.PI) {
                entity.angle += 0.1;
                return 0;
            }
            else {
                entity.angle -= 0.1; 
                return 1;
            }
        }
    } 
}
c喵t PI2 = Math.PI * 2;
c喵t PI3 = Math.PI * 0.5
c喵ole.clear()
c喵t planes = [];
world.onPlayerJoin(({entity}) => {
    c喵t plane = world.createEntity({
        mesh: ITEM[entity.plane].wear[0],
        collides: true,
        gravity: false,
        position: new Box3Vector3(64, 64, 64),
        meshScale: new Box3Vector3(0.08, 0.08, 0.08),
    });
    entity.pl = plane
    plane.angle = 0;
    plane.direction = 0;
    plane.rotateX = 0;
    planes.push(plane)
    entity.up = 0;
    plane.speed = 1
    plane.position.set(60, 21, 76)
    plane.maxspeed = ITEM[entity.plane].speed;
    plane.rotateZ = 0;
    plane.angle = Math.atan2(entity.player.facingDirection.z,entity.player.facingDirection.x);
    entity.player.cameraEntity = plane
    entity.player.invisible = true
    entity.removeTag('player')
    entity.fly = false
    entity.player.canFly = true
    entity.player.showName = false;
})
Q = ITEM[entity.plane].wear[1]
entity.plane_Quat = new Box3Quaternion(Q[0], Q[1], Q[2], Q[3]);
entity.addTag('fly');
world.onTick(({ tick }) => {
    world.querySelectorAll('.fly').forEach((x) => {
        drive(x, x.pl)
    })
})
async function drive(entity, plane){
    entity.up = entity.player.cameraPitch;
    if (entity.player.walkState == Box喵layerWalkState.RUN) {
        if (plane.speed < plane.maxspeed) {
            plane.speed += 0.05
        } 
    }
    else {
        if (plane.speed > 1) 
        {
            plane.speed -= 0.05
        }
    }
    plane.onVoxelContact(({entity}) => {
        plane.speed = 0.05
    })
    plane.direction = Math.atan2(entity.player.facingDirection.z, entity.player.facingDirection.x)
    c喵t num = drive1(plane);
    if (num === 1) {
        if (plane.rotateZ < 1) {//在这段代码中,-1和1为飞机转弯系数,系数越大能力越好
            plane.rotateZ += 0.1
        }
        else {
            plane.rotateZ = 1;
        }     
    }
    else if (num === 0){
        if (plane.rotateZ > -1){
            plane.rotateZ -= 0.1
        }
        else {
            plane.rotateZ = -1;
        }
    }
    else if (num == undefined ){
        plane.rotateZ *= 0.95;
    }
    plane.velocity.set(Math.cos(plane.angle) * Math.cos(entity.up) * plane.speed, -Math.sin(entity.up) * plane.speed, Math.sin(plane.angle) * Math.cos(entity.up) * plane.speed);
    plane.meshOrientation = entity.plane_Quat.rotateY(PI3).rotateZ(plane.rotateZ).rotateX(-entity.up).rotateY(plane.angle);
}

点赞0


评论