关于cocos2dx 3.13.1版本发现的问题,新手小白,并不太懂,求教

新建一个HelloWorld项目
这个是edge的创建


这个Scene的创建
我的edge精灵是Node类型的,layer是继承Node类型的,所以他们在屏幕上是重合的,屏幕中显示出了edge的全部,而它实际的BoundingBox在右上角,我的问题就是,在edge中放一个刚体,可以没edge的边界束缚住,但是要设置一个touch监听,判断当前触摸位置是不是在edge的边界里面,我的办法是edge->Boundingbox()->containsPoint(触摸点);然后这样的话只有点击屏幕的右上角才有反应,因为edge的BoundingBox位置和其看到的位置不一样,
然而事实是这样的:
这是我的调试代码部分:

这是我的调试信息部分:

这是窗口显示部分:

窗口大小是480*320
如图可以看到:edge绘制在窗口上已经铺满窗口了,而edge的BoundingBox却和edge实际位置不一致,只有点击窗口中的右上角四分之一部分才会有反应(具体显示看调试信息),不知道其他人有没有遇见过这种情况,按照这样的话,以后想用BoundingBox捕获触点的话是不是得手动把BoundingBox的位置先减到edge的实际位置,才能使用BoundingBox的containsPoint方法?

这个的确是一个问题。依附在node节点上的physics body不会去考虑node的position,导致了boundingbox拿到的rect是(240, 160, 480, 320). 理论上不应该使用boundingbox的rect来检测是否点中了body。

在物理世界里面,需要根据touch location获取到对应的body对象,可以使用:

    auto world = getScene()->getPhysicsWorld();
    auto location = t->getLocation();
    auto arr = world->getShapes(location);

    PhysicsBody* body = nullptr;
    for (auto& obj : arr)
    {
        if ((obj->getBody()->getTag() & DRAG_BODYS_TAG) != 0)
        {
            body = obj->getBody();
            break;
        }
    }

如果body非空,则点击到此body了。

1赞

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。