cocos源码:
/// @name Coordinate Converters
/**
* Converts a Vec2 to node (local) space coordinates. The result is in Points.
*/
// 把世界坐标转换到当前节点的本地坐标系中
Vec2 convertToNodeSpace(const Vec2& worldPoint) const;
/**
* Converts a Vec2 to world space coordinates. The result is in Points.
*/
// 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Vec2 convertToWorldSpace(const Vec2& nodePoint) const;
/**
* Converts a Vec2 to node (local) space coordinates. The result is in Points.
* treating the returned/received node point as anchor relative.
*/
// 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Vec2 convertToNodeSpaceAR(const Vec2& worldPoint) const;
/**
* Converts a local Vec2 to world space coordinates.The result is in Points.
* treating the returned/received node point as anchor relative.
*/
// 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中
Vec2 convertToWorldSpaceAR(const Vec2& nodePoint) const;
示例代码:
local icon = {
"ccbResources/HXH_league_icon/gonghuitouxiang1.png",
"ccbResources/HXH_league_icon/gonghuitouxiang2.png",
}
self.sprite1 = cc.Sprite:create(icon[1])
self.sprite1:setPosition(cc.p(50, 50))
self.sprite1:setAnchorPoint(cc.p(0,0))
self.rootNode:addChild(self.sprite1)
self.sprite2 = cc.Sprite:create(icon[2])
self.sprite2:setPosition(cc.p(100, 200))
self.sprite2:setAnchorPoint(cc.p(0,0))
self.rootNode:addChild(self.sprite2)
local p1 = self.sprite1:convertToNodeSpace(cc.p(self.sprite2:getPosition()))
local p2 = self.sprite1:convertToWorldSpace(cc.p(self.sprite2:getPosition()))
print(p1.x .." " .. p1.y)
print(p2.x .." " .. p2.y)
local p3 = self.sprite1:convertToNodeSpaceAR(cc.p(self.sprite2:getPosition()))
local p4 = self.sprite1:convertToWorldSpaceAR(cc.p(self.sprite2:getPosition()))
print(p3.x .." " .. p3.y)
print(p4.x .." " .. p4.y)
输出结果:
[LUA-print] 50 150
[LUA-print] 150 250
[LUA-print] 50 150
[LUA-print] 150 250
总结:
不带AR的是以参照物的坐下角作为坐标原点,向右、向上创建坐标系。
带AR的是以参照物的锚点为原点,向右、向上创建坐标系。