猫史档案馆


求助 怎么做出以下效果

用户:指令者指令者查看:40 回复:9 评论:40 创建时间:2021-03-19T12:26:24


如题

标签为a的模型碰到标签为b的模型后喵家传送到出生点


回复

上一页1 页 / 共 1下一页
C岩C岩

当“a”碰到“b”将“a”的坐标改成想到的地方这个是最简单的

点赞0


评论


SKQASKQA

选中所有标签a的实体然后监听碰撞事件 碰撞属性只要other 如果other有b标签就把a移wei

点赞0


评论


SKQASKQA

world.querySelectorAll('.a').forEach((x)=>{
    x.onEntityContact(({other})=>{
        if(other.hasTag('b')){
            //你的移位
        }
    })
})

点赞0


评论


该账号已被封禁该账号已被封禁

首先 如果你没有对这个实体添加标签,你可以使用a喵Tag()函数,而且可以一次添加多个

然后用world.onEntityContect(({entity:e, other:o})=>{})函数

在world.onEntityContect(({entity:e, other:o})=>{})中写入if(e.hasTag('实体A的标签')){}

代码如下

world.onEntityContect(({entity:e, other:o})=>{
if(e.hasTag('A的标签'){}})

然后第二步是查找整个地图中含有B标签的函数

用const b=world.querySelector('.B的标签')

然后B已经定义了,就是最后的大判定了

代码如下:

world.onEntityContect(({entity:e, other:o})=>{
if(e.hasTag('A的标签'){
const b=world.querySelector('.B的标签')
const pos=b.position;o.position.set(pos)}})

 

点赞0


评论


指令者指令者

world.onEntityContect(({ entity: e, other: o }) => {
    if (e.hasTag('A的标签'){//“{”这里有个红波浪
        const b = world.querySelector('.B的标签')
        const pos = b.position; o.position.set(pos)
    }
})

点赞0


评论


该账号已被封禁该账号已被封禁

world.onEntityContect(({entity:e, other:o})=>{
if(e.hasTag('A的标签')){
const b=world.querySelector('.B的标签')
const pos=b.position;o.position.set(pos)}})

点赞0


评论


SKQASKQA

好吧()我再改改()

world.querySelectorAll('.a').forEach((x)=>{
    x.onEntityContact(({other})=>{
        if(!other.hasTag('b'))return
        world.querySelectorAll('player').forEach((x)=>{
            if(x.player.name=='用户名')x.position.set(x,y,z)
            //上一行照抄报错怪你
        })
    })
})

点赞0


评论


该账号已被封禁该账号已被封禁

算了我直接说代码原理吧

首先onEntityContect函数接受事件

此时‘主动碰撞的实体’就是other重命名为o然后o就是玩家

那么entity重命名为e就是那个带A标签的实体

那么现在使用if判断

判断后定义变量b为世界中的带b标签的实体

此时o是玩家b是带B标签的实体e是带A标签的实体

那么直接将o传送到b就完了

点赞0


评论


SKQASKQA

好吧我也重新开个回帖()

我的思路是查找带a的 监听碰撞带b的

用querySA查找带a的命名然后监听onEntityContact事件

事件只需要接收other参数 因为带a实体就是querySA命名的那玩意

直接检测other是否带标签然后不说了

点赞0


评论