【新手求救】关于采用不同方式触发函数,却无法实现一样的效果

我用的是3.8.5 做的是一个2D的项目

该函数为 当函数被调用时 分别移动图片ABC 到新位置

当我用按钮进行调用时 该函数能正确将图片移动到我想要的位置

但是当我用碰撞条件调用时 能正确的往该函数传入参数 但是图片却没有正确移动

有人能解答一下么?

没代码只能瞎猜。
你自己打LOG,传的位置是否正确。函数是否调用。

盲猜碰撞触发多次,函数调用了多次

并没有 我在调用的开头 打印了消息出来 每次碰撞 都是调用1次

我给你看看 我的大致代码

这是英雄的碰撞代码
heroCollision(selfCollider: Collider2D, otherCollider: Collider2D) {

    console.log(`hero碰撞了${otherCollider.name}`);

    if (otherCollider.node && otherCollider.node.name === 'map') {

        const mapX = Math.round(otherCollider.node.position.x);

        const mapY = Math.round(otherCollider.node.position.y);

        console.log(`调用 mapGenerate 函数,参数: 1, ${mapX}, ${mapY}`);

        this.mapGenerate(1, mapX, mapY);

    }

}

mapGenerate里面有对物理对象进行操作吗,比如改位置。在物理碰撞的回调中操作物理对象会不生效,可以延迟一帧执行

我试了 好像还是没法碰撞 有个基础的问题 我想请教一下

我只想做一个纯2D的游戏 就算发射子弹 也用不到 刚体里面的重力系统 那我在设置精灵的时候 除了需要添加碰撞体之外 是否可以不用添加刚体组件呢

2.x可以,3.x貌似没有单独的碰撞系统

是否就是说 我想做碰撞的话 两个精灵 我都要加 刚体和碰撞体才行呢?

https://docs.cocos.com/creator/3.8/manual/zh/physics-2d/physics-2d-contact-callback.html
按文档说的,Box2D是需要刚体的

我重头设置了一下 现在我两个都添加了刚体组件和碰撞器组件

并且我再设计上 将英雄的脚本挂到了英雄的预制体上 地图同理

但是他们就是无法触发碰撞效果 这是我的代码截图 能帮我看看吗?

这是英雄的代码和属性面板



这是地图的代码和属性面板


image

这是物理设置界面

我不管怎么做 就是无法触发碰撞结果

我想要的效果是这样的

当英雄与地图碰撞时 地图触发mapChange函数

将其中任意一个刚体的类型改为其他类型试试

image

感谢 现在可以碰撞了

你好现在确实可以碰撞了,感谢
但是有2个新问题:
1、初始化后,第一次碰撞函数确实是触发了,并且我通过打印信息页看到能正常执行代码,但是就是没法移动map的位置

2、初始化碰撞后,我分离hero和map后再次碰撞他们却不能再次触发碰撞函数,并且我在使用hero碰撞别的map的时候,就无法map的碰撞函数

我的设计思路是,初始化碰撞后,会触发一次map自身的碰撞函数,后续当我控制hero离开map,但是当hero与map再次碰撞时,依然会调用map自身的碰撞函数

这是我将打印信息调出来后,明明代码里面显示已经移动了,但是实际的界面中,却还是在原位置
image

另外,我尝试使用按钮来调用地图身上的函数,就能实现我想要的功能,惟独使用碰撞调用就无法实现