猫史档案馆


【box3】一起来测试最新机关喵!

用户:YDS尹子YDS尹子查看:10 回复:11 评论:10 创建时间:2020-10-02T10:10:13


https://box3create.codemao.cn/games/4dcd6971a461f04add38

center_image

center_image


回复

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

更新一下h ttp://www.yxtnt.cn/box3/box3sample.ht ml

建议:能抬头、低头

点赞0


评论


指令者指令者

公布代码?

点赞0


评论


无限正义无限正义

 没有人

点赞0


评论


YDS尹子YDS尹子

公布代码

注意事项:

先放一个炮台模型,标注标签firer

再放一个底座模型,标注标签喵

再放一个炮弹模型,标注标签lchr

world.onPlayerJoin(({entity})=>{
    entity.player.scale=1.8;
    entity.player.canFly=true;
    entity.enableDamage=true;
    entity.maxHp=1000;
    entity.hp=entity.maxHp;
    entity.mass=10;
    entity.player.movementBounds=new Box3Bounds3(new Box3Vector3(-50, -50, -50), new Box3Vector3(258, 258, 258));
})

var pt=world.querySelector(".pt");
var st=world.querySelector(".喵");
var pd=world.querySelector(".lchr");
function spawn(){
    var a=world.createEntity();
    var posx=Math.random()*186;
    var posz=Math.random()*186;
    a.position.set(posx,11.5,posz);
    a.mesh=pt.mesh;
    a.meshScale=world.querySelector(".firer").meshScale;
    a.addTag("firer");
    a.type="双发加农炮";
    a.enableDamage=true;
    a.collides=false;
    a.gravity=false;a.fixed=true;
    var b=world.createEntity();
    b.position.set(posx,9.6,posz);
    b.mesh=st.mesh;
    b.meshScale=world.querySelector(".喵").meshScale;
     b.addTag("喵")
    b.gravity=false;b.fixed=true;
    a.喵=b;

}

for(let i=0;i<15;i++){
    if(Math.random()<0.5)
    spawn();
    else
    spawnMach();
}


const MeshScale = [0.0625,0.0625,0.0625]


const Quat = new Box3Quaternion(0,-1,0,1)// box引擎默认的旋转朝向
let allPlayers = []
let allZombies = []//所有僵尸
world.onTick(async ({tick}) => {//每秒16个tick
    if(tick%32===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
        allPlayers = world.querySelectorAll('player')
        allZombies = world.querySelectorAll('.firer')
    }
    allZombies.forEach(async (e) => {
        let zomPos = e.position
        var ee=e.lchr;
        
        if(tick%10===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
            let target = allPlayers.sort((a,b)=>{//寻找距离最近的玩家
               return a.position.distance(zomPos)-b.position.distance(zomPos)
            })[0]
            if(target){//地图如果还有玩家
                e.target = target
            }
        }
        if(e.target && !e.target.destroyed&&e.target.position.distance(e.position)<40&&e.target.hp>0){//如果要追杀的玩家还没有离开地图
            
            var direction = e.target.position.sub(zomPos);
            var orientation = Quat.rotateY(Math.atan2(direction.z, direction.x))
            
            e.meshOrientation.copy(orientation)
            if(e.type="双发加农炮"&&tick%32==0){
            for(let i=0;i<=1;i++){
            var c=world.createEntity();
            c.position.set(e.position.x,11.7,e.position.z);
            c.mesh=pd.mesh;
            c.gravity=true;c.fixed=false;
            c.addTag("lchr");
            c.velocity.x=direction.x/5;
            c.velocity.z=direction.z/5;

            c.mass=0.01;
            setTimeout(()=>{c.destroy()},2000)
            await sleep(200);
            }
            
            }else if(e.type="机关喵"&&tick%16==0){
            var c=world.createEntity();
            c.position.set(e.position.x,11.7,e.position.z);
            c.mesh="mesh/venus.vb";
            c.gravity=true;c.fixed=false;
            c.addTag("lchr");
            c.velocity.x=direction.x/3;
            c.velocity.z=direction.z/3;
            c.mass=0.01;
            setTimeout(()=>{c.destroy()},2000)
            
            }
        }
    })
})
world.onEntityContact(({entity,other})=>{
    if(entity.hasTag("lchr")&&other.isPlayer){
        other.hurt(10);
        entity.destroy();
    }else if(entity.isPlayer&&other.hasTag("喵")){
        entity.hurt(1000);
        world.say(entity.player.name+"触碰了炮台被电喵了")
    }
})
world.onClick(({entity,clicker})=>{
    if(entity.hasTag("firer")){
        entity.hurt(5);
        if(entity.hp<=0){
            entity.喵.meshColor.set(0,0,0,1)
            
            world.say(clicker.player.name+"干掉了一个"+entity.type);
            entity.destroy();
            if(Math.random()<0.5)
    spawn();
    else
    spawnMach();
            
        }
    }
})
world.onDie(async({entity})=>{
    if(entity.isPlayer){
        entity.player.directMessage("你将在三秒后复活")
        await sleep(3000);
        entity.hp=1000;
        world.say(entity.player.name+"复活了")
    }
})

点赞0


评论


Beck_seaBeck_sea

az

点赞0


评论


Alex79Alex79

第一张图右边满屏的报错引起了我的注意【滑稽】

点赞1


评论


难起的名字难起的名字

第一张图右边满屏的。。。

点赞1


评论


某汪星人某汪星人

nb

 

点赞0


评论


编程梦想家编程梦想家

dd

点赞0


评论


ZNS_RJimmyZNS_RJimmy

NB!!!!!

点赞0


评论


该账号已停用该账号已停用

修正版(修正了机关喵的朝向,系统报错等):

先放一个炮台模型,标注标签firer

再放一个底座模型,标注标签喵

再放一个炮弹模型,标注标签lchr

world.onPlayerJoin(({ entity }) => {
    entity.maxHp = 1000;
    entity.hp = entity.maxHp;
    entity.player.movementBounds = new Box3Bounds3(new Box3Vector3(-50, -50, -50), new Box3Vector3(258, 258, 258));
})
var pt = world.querySelector(".pt");
var st = world.querySelector(".喵");
var pd = world.querySelector(".lchr");
const MeshScale = [0.0625, 0.0625, 0.0625]
const Quat = new Box3Quaternion(0, 0, 0, 1)
let allPlayers = []
let allZombies = []
world.onTick(async ({ tick }) => {//每秒16个tick
    if (tick % 32 === 0) {//每16个tick运行一次, 而不是每个tick都运行,节省性能
        allPlayers = world.querySelectorAll('player')
        allZombies = world.querySelectorAll('.firer')
    }
    allZombies.forEach(async (e) => {
        let zomPos = e.position
        var ee = e.lchr;
        if (tick % 10 === 0) {//每16个tick运行一次, 而不是每个tick都运行,节省性能
            let target = allPlayers.sort((a, b) => {//寻找距离最近的玩家
                return a.position.distance(zomPos) - b.position.distance(zomPos)
            })[0]
            if (target) {//地图如果还有玩家
                e.target = target
            }
        }
        if (e.hp != 0) {
            if (e.target && !e.target.destroyed && e.target.position.distance(e.position) < 40 && e.target.hp > 0) {//如果要追杀的玩家还没有离开地图
                var direction = e.target.position.sub(zomPos);
                var orientation = Quat.rotateY(Math.atan2(direction.z, direction.x))
                e.meshOrientation.copy(orientation)
                if (e.type = "双发加农炮" && tick % 32 == 0) {
                    for (let i = 0; i <= 1; i++) {
                        var c = world.createEntity();
                        c.position.set(e.position.x, 11.7, e.position.z);
                        c.mesh = pd.mesh;
                        c.gravity = true; c.fixed = false;
                        c.addTag("lchr");
                        c.velocity.x = direction.x / 5;
                        c.velocity.z = direction.z / 5;
                        c.mass = 0.01;
                        setTimeout(() => { c.destroy() }, 2000)
                        await sleep(200);
                    }
                } else if (e.type = "机关喵" && tick % 16 == 0) {
                    var c = world.createEntity();
                    c.position.set(e.position.x, 11.7, e.position.z);
                    c.mesh = "mesh/venus.vb";
                    c.gravity = true; c.fixed = false;
                    c.addTag("lchr");
                    c.velocity.x = direction.x / 3;
                    c.velocity.z = direction.z / 3;
                    c.mass = 0.01;
                    setTimeout(() => { c.destroy() }, 2000)

                }
            }
        }
        else {
            world.say('机关喵被摧毁了 1 台')
        }
    })
})
world.onEntityContact(({ entity, other }) => {
    if (entity.hasTag("lchr") && other.isPlayer) {
        other.hurt(100);
        entity.destroy();
    } else if (entity.isPlayer && other.hasTag("喵")) {
        entity.hurt(1000);
        world.say(entity.player.name + " 触碰了机关喵底座被电喵了")
    }
})
world.onClick(({ entity, clicker }) => {
    if (entity.hasTag("firer")) {
        entity.hurt(50);
        if (entity.hp <= 0) {
            entity.喵.meshColor.set(0, 0, 0, 1)
            world.say(clicker.player.name + " 干掉了一个" + entity.type);
            entity.destroy();
            if (Math.random() < 0.5)
                spawn();
            else
                spawnMach();
        }
    }
})
world.onDie(async ({ entity }) => {
    if (entity.isPlayer) {
        for (var i = 1; i <= 3; i++) {
            entity.player.directMessage('你将在 ' + i + ' 秒后复活')
            await sleep(1000);
        }
        entity.hp = 1000;
        world.say(entity.player.name + " 复活了")
    }
})

点赞1


评论