猫史档案馆


求助 怎么做出以下效果

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


如题

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


回复

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

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

点赞0


评论

你以为这是kitten。。。


SKQASKQA

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

点赞0


评论

发一个代码

看不懂


SKQASKQA

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

点赞0


评论

你的代码精简()

话说你就不能把注释写上么()

有问题,如果x.onEntityContact里有other就没法实现玩家移动

other可以实现啊

怎么我接收了other属性就不行了

other是第二个B的实体,没法写玩家移动

除非查找所有玩家然后在前面定义变量如果玩家名是变量就怎么怎么滴

否则就会没法实现移位,要么就会写非常长的代码

对啊 操作玩家只能这样

操作玩家只能找所有玩家再判断用户名 没别的办法


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

首先 如果你没有对这个实体添加标签,你可以使用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


评论

报错

我手写的不知道估计有点问题吧

报错发这里我看看是什么

把第一行的Contect的e换成a


指令者指令者

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


评论

这是正确代码

我就问你能不能缩进一下()

还有注意审题()

怎么,你让other移位干嘛

你和我犯同样的错误()把other移位()

没啊

other是玩家

b是已经定义过的实体

js特色:不用缩进

注意审题,他说的是a碰b,你这里判断了entity是a,那么other就是b,这样才对……

我服了宁

带a的实体和玩家是没关系的 又不是玩家碰带a的


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


评论

喂喂喂X重名覆盖了

还有用户民只能实现一个玩家啊喂

那你加或……

这我不多说了……


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

算了我直接说代码原理吧

首先onEntityContect函数接受事件

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

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

那么现在使用if判断

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

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

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

点赞0


评论

首先onEntityCont【e】ct好评

你接收了onEntityContact的entity和other属性,那就是entity和other相撞

楼主说的是带a的实体碰带b的,那么e就是带a标签的实体 o就是带b标签的实体

我之前搜狗定义了一个快捷输入然后打错了懒得改

好家伙我没审题()


SKQASKQA

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

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

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

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

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

点赞0


评论