用户:
高贵的木叶龙A35d查看:17 回复:12 评论:17 创建时间:2021-01-16T15:25:00
起床战争可谓代码岛3.0最火的一张图了,我这个教程系列给大家教教如何模仿出一个起床战争!
第一章:背包跟随
背包跟随是起床的一大特色,比那些只会放一个模型然后开互动的人强得多
要想有独自背包,得考虑无论人再多都有自己的背包对吧,所以要在API中找到创建实体的代码!
world.createEntity({
})
光是这个代码只能创造出一个实体,这个实体只是一个可以被查询的东西,没有外观,没有大小,没有名称
还需要在玩家进入时创建:
world.onPlayerJoin(async({entity,tick})=>{
world.createEntity({
})
})
那么,这个实体什么也干不了,得添加上参数
world.onPlayerJoin(async({entity,tick})=>{
if(!entity.player.boxId){return;}//如果是游客不创建实体
world.createEntity({
mesh:'mesh/我的世界背包.vb',/*mesh样子,但是在这边没啥用,填实体在文件中的位置就行*/
id:entity.player.boxId,/*id名称,设置为玩家的boxId*/
position:entity.position,/*position位置,设置为玩家所在的位置*/
enableInteract:true,/*enableInteract互动,设置为开启(true)*/
interactRadius:5,/*interactRadius互动范围,设置为5格*/
})
})
那么,这样可以吗?如果要选中所有背包,那可不好办,所以得加上一个tag(标签)
world.onPlayerJoin(async({entity,tick})=>{
if(!entity.player.boxId){return;}//如果是游客不创建实体
world.createEntity({
mesh:'mesh/我的世界背包.vb',/*mesh样子,但是在这边没啥用,填实体在文件中的位置就行*/
id:entity.player.boxId,/*id名称,设置为玩家的boxId*/
position:entity.position,/*position位置,设置为玩家所在的位置*/
enableInteract:true,/*enableInteract互动,设置为开启(true)*/
interactRadius:5,/*interactRadius互动范围,设置为5格*/
})
world.querySelectorAll('#'+entity.player.boxId).forEach(async(b)=>{
b.addTag('玩家背包')//添加喵g:玩家背包
b.ps=entity//把他的主人设置为玩家
b.meshInvisible=true;//开启隐形
b.collides=false//关闭物理
b.gravity=false//关闭物理
})
})
那还不够,因为被交互时什么也不会发生![]()
要加上一个被交互时的事件
b.onInteract(async({entity:user,targetEntity})=>{
const re=await user.player.dialog({
type:Box3DialogType.SELECT,
title:`背包`,
content:'请选择:',
options:[
'剑类',
'方块类',/*后面懒得加了*/
],
})
if(!re||re===null){return;}
//自己用swith,懒得加
})
最后核心来了:跟随
setInterval(() => {
world.querySelectorAll('.玩家背包').forEach(async(b)=>{//标签派上用场
const pl=b.ps//把pl设为他的主人
b.position.set(b.ps.position.x,b.ps.position.y+3,b.ps.position.z)//移动
})
},1);//每隔1ms执行一次
全部代码:
world.onPlayerJoin(async({entity})=>{
if(entity.player.boxId===null){return;}
//entity.enableDamage = true;
//entity.player.Presss=0
//entity.player.armss='加特林'
//entity.player.cameraMode='fps';
//entity.player.cooling=0
world.createEntity({
mesh:'mesh/我的世界背包.vb',
id:entity.player.boxId,
position:entity.position,
enableInteract:true,
interactRadius:5,
})
world.querySelectorAll('#'+entity.player.boxId).forEach(async(b)=>{
b.addTag('玩家背包')
b.ps=entity
b.meshInvisible=true;
b.collides=false
b.gravity=false
b.onInteract(async({entity:user,targetEntity})=>{
const re=await user.player.dialog({
type:Box3DialogType.SELECT,
title:`背包`,
content:'请选择:',
options:[
'剑类',
'方块类',
],
})
if(!re||re===null){return;}
//var as=arms[re.index]
//entity.player.armss=as
//entity.player.directMessage('成功切换到'+entity.player.armss)
})
})
})
setInterval(() => {
world.querySelectorAll('.玩家背包').forEach(async(b)=>{
const pl=b.ps
b.position.set(b.ps.position.x,b.ps.position.y+3,b.ps.position.z)
})
},1);