Creator 版本 1.8.1
运行平台: Mac 模拟器
先简单描述一下代码的结构,js 部分传递一个 cc.Node 对象给 c++,c++ 需要获取一下这个对象的 BoundingBox 信息。
编辑器中,这个 cc.Node 就是一个 Node 组件加上一个 Sprite 组件,位置在 0,0,屏幕中心点 (截图中的白色方块)。
js 部分调用绑定的代码:
this.myComponent.addObstacle(this.wallNode._sgNode);
c++ 部分的绑定代码:
static bool js_mycomponent_addObstacle(se::State& s)
{
//......
cocos2d::Node* node = nullptr;
seval_to_native_ptr(args[0], &node);
CCLOG("x: %f", node->getPositionX());
CCLOG("y: %f", node->getPositionY());
CCLOG("anchorPointX: %f", node->getAnchorPoint().x);
CCLOG("anchorPointY: %f", node->getAnchorPoint().y);
CCLOG("originX: %f", node->getBoundingBox().origin.x);
CCLOG("originY: %f", node->getBoundingBox().origin.y);
CCLOG("width: %f", node->getBoundingBox().size.width);
CCLOG("height: %f", node->getBoundingBox().size.height);
}
代码的调用执行没有任何问题,但是打印出的数值是:
x: 0.000000
y: 0.000000
anchorPointX: 0.000000
anchorPointY: 0.000000
originX: 0.000000
originY: 0.000000
width: 0.000000
height: 0.000000
可以看到这个是有问题的(但是,白色方块的位置是没有问题的):

于是我在调用绑定代码前,加上了
this.wallNode._sgNode.setAnchorPoint(this.wallNode.getAnchorPoint());
this.wallNode._sgNode.setContentSize(this.wallNode.getContentSize());
this.myComponent.addObstacle(this.wallNode._sgNode);
这次的输出是:
x: 0.000000
y: 0.000000
anchorPointX: 0.500000
anchorPointY: 0.500000
originX: -16.000000
originY: -16.000000
width: 32.000000
height: 32.000000
这次的输出完全没问题了,但是,这个节点在屏幕上的位置却偏移了:
红色节点坐标是 0, 100,可以看到,橙色的范围才是正确的节点位置。
我尝试了修改 Sprite 组件的 size mode 但是也没有用。
想要请问下,是不是我的实现方式有问题呢。。。

