总结:
理解:
精灵不是一个点,它是有大小的。你设置它的位置的时候。它是依照重心来设置这个精灵的位置的。
锚点 就是这个精灵的重心。
而设置锚点的两个参数都在0 -1之间。它实际上表示图片一个比例。比如,一个边长为1的正方形。0,0,锚点为左下角。01锚点为坐上角,10锚点为右下,11为右上。
0.5,0.5锚点为正方形正中心。
setposition方法设置的位置就是图片“锚点”这个点所在设置点的位置。
示例参考博客转接理解:https://www.byjth.com/biji/28.html
1、设置layer的坐标位置为屏幕的中心vec2(0.5,0.5)
auto layer = LayerColor::create(Color4B(255, 0, 0, 255));//RGBA 颜色数据(红)
layer->setContentSize(CCSizeMake(80, 80));//设置大小
layer->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0.5,0.5));//设置锚点(0.5,0.5)居中
addChild(layer);//添加到场景并设置绘制层的顺序
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。
因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。
https://www.byjth.com/biji/28.html
1、设置layer的坐标位置为屏幕的中心vec2(0.5,0.5)
auto layer = LayerColor::create(Color4B(255, 0, 0, 255));//RGBA 颜色数据(红)
layer->setContentSize(CCSizeMake(80, 80));//设置大小
layer->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0.5,0.5));//设置锚点(0.5,0.5)居中
addChild(layer);//添加到场景并设置绘制层的顺序
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。
因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。
https://www.byjth.com/biji/28.html
1、设置layer的坐标位置为屏幕的中心vec2(0.5,0.5)
auto layer = LayerColor::create(Color4B(255, 0, 0, 255));//RGBA 颜色数据(红)
layer->setContentSize(CCSizeMake(80, 80));//设置大小
layer->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0.5,0.5));//设置锚点(0.5,0.5)居中
addChild(layer);//添加到场景并设置绘制层的顺序
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。
因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。
https://www.byjth.com/biji/28.html
1、设置layer的坐标位置为屏幕的中心vec2(0.5,0.5)
auto layer = LayerColor::create(Color4B(255, 0, 0, 255));//RGBA 颜色数据(红)
layer->setContentSize(CCSizeMake(80, 80));//设置大小
layer->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0.5,0.5));//设置锚点(0.5,0.5)居中
addChild(layer);//添加到场景并设置绘制层的顺序
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。
因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。
https://www.byjth.com/biji/28.html
1、设置layer的坐标位置为屏幕的中心vec2(0.5,0.5)
auto layer = LayerColor::create(Color4B(255, 0, 0, 255));//RGBA 颜色数据(红)
layer->setContentSize(CCSizeMake(80, 80));//设置大小
layer->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0.5,0.5));//设置锚点(0.5,0.5)居中
addChild(layer);//添加到场景并设置绘制层的顺序
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。
因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。
都在 0~1 之间
锚点(AnchorPoint)是相对坐标,通常用来定义物体内部的点,在cocos2dx中,一般都是以加载精灵来实现游戏元素的表现,而精灵一般都是对应的一张图片资源。
我们在设置精灵位置的时候,要设置精灵中的锚点来和我们的坐标点相对应,就比如人站在地上,我们要设置人的脚为锚点,假如设置人的头为锚点,那么人的身子就都会在底下了。
Anchor Point的两个参数都在0~1之间。一般Node的锚点默认为(0.5, 0.5),而Layer的锚点则在左下角(0,0)。
在cocos2dx中物体的旋转等动作都是围绕锚点进行的。锚点不同,决定着物体的位置不同。描述起来比较抽象,用几张图瞬间就可以明白了。
1、设置layer的坐标位置为屏幕的中心vec2(0.5,0.5)
auto layer = LayerColor::create(Color4B(255, 0, 0, 255));//RGBA 颜色数据(红)
layer->setContentSize(CCSizeMake(80, 80));//设置大小
layer->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0.5,0.5));//设置锚点(0.5,0.5)居中
addChild(layer);//添加到场景并设置绘制层的顺序
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。
因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。
1、设置layer的坐标位置为屏幕的中心vec2(0.5,0.5)
auto layer = LayerColor::create(Color4B(255, 0, 0, 255));//RGBA 颜色数据(红)
layer->setContentSize(CCSizeMake(80, 80));//设置大小
layer->setPosition(Vec2(origin.x + visibleSize.width/2,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0.5,0.5));//设置锚点(0.5,0.5)居中
addChild(layer);//添加到场景并设置绘制层的顺序
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。
因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。