
cocos2dx中节点坐标系与世界坐标系有什么不同之处,如何检测两个不同层之上的
1个回答
推荐于2016-12-01 · 知道合伙人数码行家

知道合伙人数码行家
采纳数:117525
获赞数:517222
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注

展开全部
简而言之,cocos2dx的2d中的坐标系与我们初中所学的笛卡尔坐标系一样。也就是向右为X正轴,向上为Y正轴。
在屏幕中,其原点位于屏幕的左下方。
屏幕坐标系
屏幕坐标系的Y正轴是向下,X正轴不变。原点位于左上方。
World Coordinate与Node Local
World Coordinate == > 世界坐标系、绝对坐标系
Node Local == > 本地坐标系、相对坐标系
世界坐标系的意思是指游戏世界。Node Local坐标系其实就是我们在调用setPositon的时候设置的位置是相对于父节点的,是相对坐标,而不是绝对坐标。
我们需要知道的一个比较重要的东西就是Anchor Point == > 锚点
之所以有锚点这个概念,是因为在游戏中,每个节点都有自己的坐标系,这样我们setPositon才能是相对于父亲节点的,也就是相对坐标系。
但是每个节点的坐标系原点,可能不一样。所以我们就把这个点成为锚点。简而言之,锚点就是游戏中节点的坐标系原点。而且每个节点都有自己的坐标系。
验证:看如下官方文档。
我们用以下代码为例,使用默认Anchor Point值,将红色层放在屏幕左下角,绿色层添加到红色层上:
1
2
3
4
5
6
7
auto red = LayerColor::create(Color4B(255, 100, 100, 128), visibleSize.width/2, visibleSize.height/2);
auto green = LayerColor::create(Color4B(100, 255, 100, 128), visibleSize.width/4, visibleSize.height/4);
red->addChild(green);
this->addChild(red, 0);
anchorPoint
我们用以下代码为例,将红色层的Anchor Point设为中点放在屏幕中央,绿色层添加到红色层上,绿色层锚点为右上角:
注:因为Layer比较特殊,它默认忽略锚点,所以要调用ignoreAnchorPointForPosition()接口来改变锚点,关于ignoreAnchorPointForPosition()接口的使用说明,我们将在后面详细讲解。
1
2
3
4
5
6
7
8
9
10
11
auto red = LayerColor::create(Color4B(255, 100, 100, 128), visibleSize.width/2, visibleSize.height/2);
red->ignoreAnchorPointForPosition(false);
red->setAnchorPoint(Point(0.5, 0.5));
red->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
auto green = LayerColor::create(Color4B(100, 255, 100, 128), visibleSize.width/4, visibleSize.height/4);
green->ignoreAnchorPointForPosition(false);
green->setAnchorPoint(Point(1, 1));
red->addChild(green);
this->addChild(red, 0);
anchorPoint
我的理解:
怎么理解呢,如果你明白了我刚才说的话,就能够理解第二个代码运行的效果。我们把红色的锚点设置成0.5,05,绿色的设置成1,1则如图上所示,两个锚点分别为期两个节点的坐标原点。而绿色没有设置位置,所以其位置默认是相对于红色是0,0位置。
为什么红色成的左下角为本地坐标原点了。你可以这样理解。
1.每个节点的本地坐标原点都是在左下角。
2.每个节点还有一个与AnchorPoint有关的坐标系,其坐标原点就是AnchorPoint,我们把其成为Anchor坐标系。
3.setPosition针对的是AnchorPoint坐标系下的节点,与父亲本地节点坐标系的位置。(此时AnchorPoint即代表这个节点,而节点的之后的渲染效果就看节点的AnchorPoint是在节点的什么位置
)
几个知识要点换种说法:
ignoreAnchorPointForPosition(true); == > 本质上就是setAnchorPoint(0,0);
什么时候把参数设置为false呢?
这种情况只有在Layer类中才需要使用,因为Layer的锚点是(0,0)。也就是等效于ignoreAnchorPointForPosition(true);
所以我们要修改其锚点需要先ignoreAnchorPointForPosition(false);
在屏幕中,其原点位于屏幕的左下方。
屏幕坐标系
屏幕坐标系的Y正轴是向下,X正轴不变。原点位于左上方。
World Coordinate与Node Local
World Coordinate == > 世界坐标系、绝对坐标系
Node Local == > 本地坐标系、相对坐标系
世界坐标系的意思是指游戏世界。Node Local坐标系其实就是我们在调用setPositon的时候设置的位置是相对于父节点的,是相对坐标,而不是绝对坐标。
我们需要知道的一个比较重要的东西就是Anchor Point == > 锚点
之所以有锚点这个概念,是因为在游戏中,每个节点都有自己的坐标系,这样我们setPositon才能是相对于父亲节点的,也就是相对坐标系。
但是每个节点的坐标系原点,可能不一样。所以我们就把这个点成为锚点。简而言之,锚点就是游戏中节点的坐标系原点。而且每个节点都有自己的坐标系。
验证:看如下官方文档。
我们用以下代码为例,使用默认Anchor Point值,将红色层放在屏幕左下角,绿色层添加到红色层上:
1
2
3
4
5
6
7
auto red = LayerColor::create(Color4B(255, 100, 100, 128), visibleSize.width/2, visibleSize.height/2);
auto green = LayerColor::create(Color4B(100, 255, 100, 128), visibleSize.width/4, visibleSize.height/4);
red->addChild(green);
this->addChild(red, 0);
anchorPoint
我们用以下代码为例,将红色层的Anchor Point设为中点放在屏幕中央,绿色层添加到红色层上,绿色层锚点为右上角:
注:因为Layer比较特殊,它默认忽略锚点,所以要调用ignoreAnchorPointForPosition()接口来改变锚点,关于ignoreAnchorPointForPosition()接口的使用说明,我们将在后面详细讲解。
1
2
3
4
5
6
7
8
9
10
11
auto red = LayerColor::create(Color4B(255, 100, 100, 128), visibleSize.width/2, visibleSize.height/2);
red->ignoreAnchorPointForPosition(false);
red->setAnchorPoint(Point(0.5, 0.5));
red->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
auto green = LayerColor::create(Color4B(100, 255, 100, 128), visibleSize.width/4, visibleSize.height/4);
green->ignoreAnchorPointForPosition(false);
green->setAnchorPoint(Point(1, 1));
red->addChild(green);
this->addChild(red, 0);
anchorPoint
我的理解:
怎么理解呢,如果你明白了我刚才说的话,就能够理解第二个代码运行的效果。我们把红色的锚点设置成0.5,05,绿色的设置成1,1则如图上所示,两个锚点分别为期两个节点的坐标原点。而绿色没有设置位置,所以其位置默认是相对于红色是0,0位置。
为什么红色成的左下角为本地坐标原点了。你可以这样理解。
1.每个节点的本地坐标原点都是在左下角。
2.每个节点还有一个与AnchorPoint有关的坐标系,其坐标原点就是AnchorPoint,我们把其成为Anchor坐标系。
3.setPosition针对的是AnchorPoint坐标系下的节点,与父亲本地节点坐标系的位置。(此时AnchorPoint即代表这个节点,而节点的之后的渲染效果就看节点的AnchorPoint是在节点的什么位置
)
几个知识要点换种说法:
ignoreAnchorPointForPosition(true); == > 本质上就是setAnchorPoint(0,0);
什么时候把参数设置为false呢?
这种情况只有在Layer类中才需要使用,因为Layer的锚点是(0,0)。也就是等效于ignoreAnchorPointForPosition(true);
所以我们要修改其锚点需要先ignoreAnchorPointForPosition(false);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |