Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)
admin
2023-02-12 05:20:05
0

锚点(AnchorPoint)是相对坐标,通常用来定义物体内部的点,在cocos2dx中,一般都是以加载精灵来实现游戏元素的表现,而精灵一般都是对应的一张图片资源。

我们在设置精灵位置的时候,要设置精灵中的锚点来和我们的坐标点相对应,就比如人站在地上,我们要设置人的脚为锚点,假如设置人的头为锚点,那么人的身子就都会在底下了。

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

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);//添加到场景并设置绘制层的顺序

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 


 

 

从图中我们可以看出来,我们设置的代码是layer的锚点是居中,而运行显示的则是锚点在左下角(0,0)位置。这是什么情况呢?

原来是因为Layer比较特殊,它默认忽略锚点。所以要调用ignoreAnchorPointForPosition()接口来改变锚点。

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

 

因为ignoreAnchorPointForPosition()默认为true参数,忽略锚点。我们要将参数改为false,为不忽略锚点,这样锚点才会在layer有效果。

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

 

这样锚点就在layer层中心点了,如果用精灵来代替层的话这不需要设置ignoreAnchorPointForPosition()函数,直接设置锚点即可。


 

2、设置layer的坐标位置为屏幕的左下角vec2(0,0)


 

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,0));//设置锚点(0,)左下角

layer->ignoreAnchorPointForPosition(false);//设置忽略锚点

addChild(layer);//添加到场景并设置绘制层的顺序


是不是发现和我们刚才不设置忽略锚点参数为false的时候一样的啊。

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 


是不是发现和我们刚才不设置忽略锚点参数为false的时候一样的啊。

 

 

 

3、设置layer的坐标位置为屏幕的右下角vec2(1,0)


 

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(1,0));//设置锚点(1,0)右下角

layer->ignoreAnchorPointForPosition(false);//设置忽略锚点

addChild(layer);//添加到场景并设置绘制层的顺序


Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 


 

 

 

4、设置layer的坐标位置为屏幕的左上角vec2(0,1)


 

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,1));//设置锚点(0,1)左上角

layer->ignoreAnchorPointForPosition(false);//设置忽略锚点

addChild(layer);//添加到场景并设置绘制层的顺序

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 


 

 

5、设置layer的坐标位置为屏幕的右上角vec2(1,1)


 

 

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(1,1));//设置锚点(0,1)右上角

layer->ignoreAnchorPointForPosition(false);//设置忽略锚点

addChild(layer);//添加到场景并设置绘制层的顺序

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 


 

 

 

相信通过几张图我们可以了解锚点的概念了,锚点位置是针对设置锚点的物体而言,所以图中的锚点都是针对的是红色的方块而言。锚点的起始位置为左下角(0,0)到右上角(1,1),百分比形式设置的。

 

我们来设置4中颜色的层,其他参数(位置坐标,颜色块大小)相同的情况下,分别设置四个角为锚点。

 

auto red = LayerColor::create(Color4B(255, 0, 0, 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));//设置锚点(0,0)左下角

red->ignoreAnchorPointForPosition(false);//设置忽略锚点

addChild(red);//添加到场景并设置绘制层的顺序

 

auto green = LayerColor::create(Color4B(0, 255,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));//设置锚点(0,1)左上角

green->ignoreAnchorPointForPosition(false);//设置忽略锚点

addChild(green, 30);//添加到场景并设置绘制层的顺序

 

auto blue = LayerColor::create(Color4B(0, 0, 255, 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));//设置锚点(1,0)右下角

blue->ignoreAnchorPointForPosition(false);//设置忽略锚点

addChild(blue, 20);//添加到场景并设置绘制层的顺序

 

auto white  = LayerColor::create(Color4B(255, 255, 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);//添加到场景并设置绘制层的顺序

 

 

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)

 

 

 

 

注意:layer层是特殊的,所以锚点默认为忽略状态,而其他node节点的则正常。

锚点相信已经分析的很清楚了(其实我已经哭晕在厕所了)。



本文由闭眼就天黑整理编辑,转载请注明:http://www.byjth.com/biji/28.html | 闭眼就天黑专栏_原创技术博客

相关内容

热门资讯

玩家分享攻略“毛豆大厅牛牛究竟... 家人们!今天小编来为大家解答毛豆大厅牛牛透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里...
今日重大消息“九酷众娱炸/金/... 有 亲,根据资深记者爆料九酷众娱炸/金/花是可以开挂的,确实有挂(咨询软...
重磅消息“麻友圈2贵阳捉鸡辅助... 您好:麻友圈2贵阳捉鸡这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在...
我来教教您“小南四川长牌真的有... 网上科普关于“小南四川长牌有没有挂”话题很是火热,小编也是针对小南四川长牌作*弊开挂的方法以及开挂对...
【第一财经】“熊猫麻将怎么装挂... 您好:熊猫麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
今日重大发现“皇豪众娱牛牛究竟... 网上科普关于“皇豪众娱牛牛有没有挂”话题很是火热,小编也是针对皇豪众娱牛牛作*弊开挂的方法以及开挂对...
重磅消息“十三十三水怎么开挂?... 家人们!今天小编来为大家解答十三十三水透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买...
最新引进“微友山西麻将是不是有... 最新引进“微友山西麻将是不是有挂?”(确实真的有挂)您好,微友山西麻将这个游戏其实有挂的,确实是有挂...
【第一消息】“沧海麻将十三水到... 网上科普关于“沧海麻将十三水有没有挂”话题很是火热,小编也是针对沧海麻将十三水作*弊开挂的方法以及开...
如何科学地休假?这位量子物理学... 1925年的夏天,年轻的海森堡处于一种“内忧外患”的境地。 一年前,他在索末菲指导下完成了博士论文,...