Cocos2dx锚点

总结:

理解:

                精灵不是一个点,它是有大小的。你设置它的位置的时候。它是依照重心来设置这个精灵的位置的。

                锚点 就是这个精灵的重心。

                而设置锚点的两个参数都在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);//添加到场景并设置绘制层的顺序

 

学习笔记9:图2.png

学习笔记9:图3.png

 

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

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

学习笔记9:图4.png

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

学习笔记9:图5.png

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

 

学习笔记9:图2.png

学习笔记9:图3.png

 

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

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

学习笔记9:图4.png

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

学习笔记9:图5.png

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

 

学习笔记9:图2.png

学习笔记9:图3.png

 

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

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

学习笔记9:图4.png

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

学习笔记9:图5.png

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

 

学习笔记9:图2.png

学习笔记9:图3.png

 

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

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

学习笔记9:图4.png

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

学习笔记9:图5.png

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

 

学习笔记9:图2.png

学习笔记9:图3.png

 

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

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

学习笔记9:图4.png

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

学习笔记9:图5.png

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


都在 0~1 之间


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

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

学习笔记9:图1.png

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

 

学习笔记9:图2.png

学习笔记9:图3.png

 

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

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

学习笔记9:图4.png

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

学习笔记9:图5.png

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


1、设置layer的坐标位置为屏幕的中心vec20.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);//添加到场景并设置绘制层的顺序

 

学习笔记9:图2.png

学习笔记9:图3.png

 

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

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

学习笔记9:图4.png

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

学习笔记9:图5.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值