猫史档案馆


【box3】虚空跑酷存档不精准?来试试这套把!

用户:ACL番茄炒蛋ACL番茄炒蛋查看:0 回复:3 评论:0 创建时间:2023-02-01T10:11:18


————————防窥线————————

在虚空跑酷游戏中,我们经常会发现,作者不会把存档点贴着方块放,而是比方块高出2~3个方块(如下图所示)。

center_image

这样做是为了让玩家复活的时候,不会因为穿模而掉入虚空。而会让玩家穿模掉入虚空,是因为没有掉入虚空的判断代码,所以存档位置设为的是存档点模型位置。

所以,此类存档代码应为:

//这样做,踩到存档点时存档位置就是模型位置了
for (const e of world.querySelectorAll('*')) {//遍历所有实体并判断是否为存档点
if (e.id.startsWith('地砖')) {
e.collides = true//打开碰撞并设置不可推动
e.fixed = true
e.onEntityContact(({other}) => {//碰撞事件触发
if (other.isPlayer) {//判断碰撞者是否为玩家实体
other.player.spawnPoint = e.position  //将重生点设为存档点位置
other.player.directMessage('到达新的存档点')
}
})
}
}

这样也可以免掉读档代码,但是……存档点不贴这方块放,也不美观吧……

解决方案1:

既然API里本身没有掉入虚空的判断,那就自己做一个呀!(该代码需要与以上代码连用才能生效)

world.onTick(() => {//游戏每时每刻检查
world.querySelectorAll("player").forEach((entity)=>{//遍历所有是玩家的实体
if (8 < entity.position.y && 20 > entity.position.y) {//判断是否掉入虚空
entity.player.directMessage(entity.player.name+' 掉 入 虚 空')
entity.position.copy(entity.player.spawnPoint)
entity.position.y+=4//存档点上方复活
}
})
});

但是,地图中即使没有写代码,掉入虚空也会回到存档点。我们就可以利用它,省略掉读档代码。

看解决方式2↓

解决方式2:

不需要回档代码,将存档位置提前设置好。

作者发现这个解决方案前,在bilibili上还看到了路卡的存档代码。

他是以一个方块为存档点来存档的。

当然,不推荐这种存档方式,也不精准。

大家可以想一下,如果存档的时候我不是在y轴方向存的档,那我回档的时候不就会在方块旁边复活?

于是我就参考他的存档方式,把这种存档带进了模型存档中,并做了改良。

for (const e of world.querySelectorAll('*')) {
if (e.id.startsWith('地砖')) {
e.collides = true
e.fixed = true
e.onEntityContact(({other}) => {
if (other.isPlayer) {      other.player.spawnPoint.set(e.position.x,other.position.y,e.position.z)
//存档时,我把存档位置的x和z坐标设为了存档点坐标,这样回档时就能复活在存档点中间
//存档位置的y坐标则设为了玩家的y坐标,便可以让回档时不会穿模掉下去
other.player.directMessage('到达新的存档点')
}
})
}

希望我的教程能帮到你!

(tips:如发现有报错,请及时反馈在评论区哟!

反馈格式:我发现第…段代码有报错,报错内容…

最好还能加个图片!)


回复

上一页1 页 / 共 1下一页
名探酱名探酱

if (entity.position.y < 0) {//判断是否掉入虚空

点赞0


评论


锦衣侠客锦衣侠客

azzzzzz

点赞0


评论


睿策升华重生版睿策升华重生版

666

 

点赞0


评论