锚点(AnchorPoint)是相对坐标,通常用来定义物体内部的点,在cocos2dx中,一般都是以加载精灵来实现游戏元素的表现,而精灵一般都是对应的一张图片资源。
我们在设置精灵位置的时候,要设置精灵中的锚点来和我们的坐标点相对应,就比如人站在地上,我们要设置人的脚为锚点,假如设置人的头为锚点,那么人的身子就都会在底下了。
650) this.width=650;" id="aimg_140536" src="http://img.jb51.cc/vcimg/static/loading.png" width="424" height="558" alt="202221ij3pzgulvplstpx4.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202221ij3pzgulvplstpx4.jpg">
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,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);//添加到场景并设置绘制层的顺序
650) this.width=650;" id="aimg_140537" src="http://img.jb51.cc/vcimg/static/loading.png" width="554" alt="202221ur8uebnogt7bbbou.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202221ur8uebnogt7bbbou.jpg">
650) this.width=650;" id="aimg_140538" src="http://img.jb51.cc/vcimg/static/loading.png" width="502" alt="202221cmaqazihi69qqra9.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202221cmaqazihi69qqra9.jpg">
从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?
原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForposition()接口来改变锚点。
650) this.width=650;" id="aimg_140539" src="http://img.jb51.cc/vcimg/static/loading.png" width="600" alt="202222bev77o111zweej11.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222bev77o111zweej11.jpg">
因为ignoreAnchorPointForposition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。
650) this.width=650;" id="aimg_140540" src="http://img.jb51.cc/vcimg/static/loading.png" width="515" alt="202222ws6z0szyk6gss3px.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222ws6z0szyk6gss3px.jpg">
这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForposition()函数,直接设置锚点即可。
2、设置layer的坐标位置为屏幕的左下角vec2(0,0)
auto layer = Layercolor::create(color4B(255,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(0,0));//设置锚点(0,)左下角
layer->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(layer);//添加到场景并设置绘制层的顺序
是不是发现和我们刚才不设置忽略锚点参数为false的时候一样的啊。
650) this.wIDth=650;" ID="aimg_140541" src="http://img.jb51.cc/vcimg/static/loading.png" wIDth="554" alt="202222chc92fixi7xqgqg3.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222chc92fixi7xqgqg3.jpg">
650) this.width=650;" id="aimg_140542" src="http://img.jb51.cc/vcimg/static/loading.png" width="510" alt="202222xhttfz88emxv8xxb.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222xhttfz88emxv8xxb.jpg">
是不是发现和我们刚才不设置忽略锚点参数为false的时候一样的啊。
3、设置layer的坐标位置为屏幕的右下角vec2(1,origin.y + visibleSize.height/2));//设置坐标
layer->setAnchorPoint(Vec2(1,0));//设置锚点(1,0)右下角
layer->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(layer);//添加到场景并设置绘制层的顺序
650) this.width=650;" id="aimg_140543" src="http://img.jb51.cc/vcimg/static/loading.png" width="554" alt="202222yzczaqc8izedcfz7.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222yzczaqc8izedcfz7.jpg">
650) this.wIDth=650;" ID="aimg_140544" src="http://img.jb51.cc/vcimg/static/loading.png" wIDth="468" alt="202222s6k8khqi6wz6w8kk.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222s6k8khqi6wz6w8kk.jpg">
4、设置layer的坐标位置为屏幕的左上角vec2(0,1)
auto layer = Layercolor::create(color4B(255,1));//设置锚点(0,1)左上角
layer->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(layer);//添加到场景并设置绘制层的顺序
650) this.width=650;" id="aimg_140545" src="http://img.jb51.cc/vcimg/static/loading.png" width="554" alt="202222nk81bwgz8maaua2w.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222nk81bwgz8maaua2w.jpg">
650) this.width=650;" id="aimg_140546" src="http://img.jb51.cc/vcimg/static/loading.png" width="430" alt="202222akxxxvvhsi7resi7.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222akxxxvvhsi7resi7.jpg">
5、设置layer的坐标位置为屏幕的右上角vec2(1,1)
auto layer = Layercolor::create(color4B(255,1)右上角
layer->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(layer);//添加到场景并设置绘制层的顺序
650) this.width=650;" id="aimg_140547" src="http://img.jb51.cc/vcimg/static/loading.png" width="553" alt="202222pnx5lca5zv50g0dt.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222pnx5lca5zv50g0dt.jpg">
650) this.width=650;" id="aimg_140548" src="http://img.jb51.cc/vcimg/static/loading.png" width="442" alt="202222fwibxh5zch6h5dm6.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222fwibxh5zch6h5dm6.jpg">
相信通过几张图我们可以了解锚点的概念了,锚点位置是针对设置锚点的物体而言,所以图中的锚点都是针对的是红色的方块而言。锚点的起始位置为左下角(0,0)到右上角(1,1),百分比形式设置的。
我们来设置4中颜色的层,其他参数(位置坐标,颜色块大小)相同的情况下,分别设置四个角为锚点。
auto red = Layercolor::create(color4B(255,255));//RGBA 颜色数据(红)
red->setContentSize(CCSizeMake(80,80));//设置大小
red->setposition(Vec2(origin.x + visibleSize.wIDth/2,origin.y + visibleSize.height/2));//设置坐标
red->setAnchorPoint(Vec2(0,0)左下角
red->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(red);//添加到场景并设置绘制层的顺序
auto green = Layercolor::create(color4B(0,255));//RGBA 颜色数据(绿)
green->setContentSize(CCSizeMake(80,80));//设置大小
green->setposition(Vec2(origin.x + visibleSize.wIDth/2,origin.y + visibleSize.height/2));//设置坐标
green->setAnchorPoint(Vec2(0,1)左上角
green->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(green,30);//添加到场景并设置绘制层的顺序
auto blue = Layercolor::create(color4B(0,255));//RGBA 颜色数据(蓝)
blue->setContentSize(CCSizeMake(80,80));//设置大小
blue->setposition(Vec2(origin.x + visibleSize.wIDth/2,origin.y + visibleSize.height/2));//设置坐标
blue->setAnchorPoint(Vec2(1,0)右下角
blue->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(blue,20);//添加到场景并设置绘制层的顺序
auto white= Layercolor::create(color4B(255,255));//RGBA 颜色数据(白)
white->setContentSize(CCSizeMake(80,80));//设置大小
white->setposition(Vec2(origin.x + visibleSize.wIDth/2,origin.y + visibleSize.height/2));//设置坐标
white ->setAnchorPoint(Vec2(1,1));//设置锚点(1,1)右上角
white ->ignoreAnchorPointForposition(false);//设置忽略锚点
addChild(white,20);//添加到场景并设置绘制层的顺序
650) this.width=650;" id="aimg_140549" src="http://img.jb51.cc/vcimg/static/loading.png" width="500" alt="202222yxd7ejcq18d6xe16.jpg" src="http://img.it171.com/data/attachment/forum/201508/28/202222yxd7ejcq18d6xe16.jpg">
注意:layer层是特殊的,所以锚点默认为忽略状态,而其他node节点的则正常。
锚点相信已经分析的很清楚了(其实我已经哭晕在厕所了)。
本文由闭眼就天黑整理编辑,转载请注明:http://www.byjth.com/biji/28.html| 闭眼就天黑专栏_原创技术博客
总结以上是内存溢出为你收集整理的Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)全部内容,希望文章能够帮你解决Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)