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

锚点(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()函数,直接设置锚点即可。

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的时候一样的啊。

是不是发现和我们刚才不设置忽略锚点参数为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);//添加到场景并设置绘制层的顺序

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

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

相信通过几张图我们可以了解锚点的概念了,锚点位置是针对设置锚点的物体而言,所以图中的锚点都是针对的是红色的方块而言。锚点的起始位置为左下角(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);//添加到场景并设置绘制层的顺序

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

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

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

时间: 2024-10-06 05:20:19

Cocos2dx学习笔记9:cocos2dx锚点(Anchor Point)的相关文章

【Cocos2D-X 学习笔记】Cocos2D-x 3.0+VS开发环境搭建[使用Python]

上一节讲了如何用VS自带的项目管理器创建项目,该方法只适用于cocos2d-x 2.0版本,而cocos2d-x 3.0较之前版本在命名等方面有了较大更新,而cocos2d-x3.0不再支持用VS项目管理器自建项目,而是用Python脚本创建项目. 为什么做这种改变?经过上一节讨论可以发现,使用VS创建项目有一个缺陷:新建的项目必须在cocos2d-x的解决方案中,这样会导致自己的项目和Template项目混淆:如果想单独创建一个项目的话,又需要把cocos2d-x包中的cocos2d文件整个拷

Cocos2d-x学习笔记(三)“万物之父”——CCNode

原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38701767 通过前两份学习笔记,我们不难发现CCScene.CCLayer.CCSprite.CCAction等一系列元素都是CCNode的子类,但其实"万物之父"这个标题还是有点夸大,毕竟还有像CCDirector.CCCamera之类并不继承自CCNode的组件. 但是CCNode绝对是Cocos2d-x中举足轻重的一个核心,我们可以把它理解为节点.它

Cocos2d-x学习笔记—事件处理机制

Cocos2d-x学习笔记-事件处理机制 一:事件处理机制 一个事件由触发到完成响应,主要由以下三部分组成: 事件分发器EventDispatcher: 事件类型EventTouch.EventKeyboard等: 事件监听器EventListenerTouch.EventListenerKeyboard等. 在Cocos2d-x v3.x中,关于事件的东西,无非就是围绕上述的三个部分展开来的,掌握了上述的三个部分,也就掌握了Cocos2d-x v3.x中事件处理的精髓. (1)事件分发器: 事

Cocos2d-x学习笔记(四)CCScene分析

原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38730335 前言 之前提到CCScene是场景,是整个游戏的舞台,通过查看源码我们不难发现CCScene也是CCNode的子节点,那么它也拥有我们上一节讲的CCNode的所有非private属性及方法. CCScene的作用十为了联系所有的CCNode节点(包括CCLayer.CCSprite等). 当清楚知道每个场景要显示的内容,那么定义出不同的CCNode,然后

【Cocos2D-X 学习笔记】Node父类的方法和属性

Node方法: 1.创建节点 Node *childNode=Node::create(); 该方法多为Node的子类调用create()静态方法进行创建实例 2.增加新的子节点:node->addChild(childNode,1,Tag); //1是指Z轴的索引,简单讲表示层号,这里addChild并不是个静态方法,因此需要进行指针调用,另外根据多态性(函数重载),其形参还可以是 addChild(childNode,int zOrder)  或者addChild(childNode); 3

【Cocos2D-X 学习笔记】为精灵添加单点触控

由于Cocos2d-x处于新学的阶段,因此最近也无法进行系统地更新,只会选择一些典型的Demo贴上来,一来是与大家分享,而来也可以作为以后回顾时的参考. 今天介绍一下Cocos2d-x的触摸事件处理,了解Android开发的朋友们知道,Android里会用一个OnClickListener()进行事件监听,而在J2SE中也会有Event类实现专门的监听处理.在Cocos2d-x中,因为是游戏引擎,用户在玩游戏时总是要通过屏幕与游戏进行交互,可想而知触摸事件是主要处理的事件.这里主要讲一下如何为精

cocos2dx学习笔记(2)

昨天尝试了cocos2dx在win下的开发环境配置,并且运行了cocos的helloword程序,晚上想要尝试一下android开发环境配置,顺便学习cocos在eclipse下的JNI机制,按照cocoa中文论坛的android环境配置弄了NDK,并配置了环境变量,由于想要学习cocos的luabind机制(这个我们公司游戏的引擎用的很多,确实比较有兴趣),一切搞定不明就里的用eclipse导入了cocos3.0rc中的tests目录下的cpp-tests工程(这算android开发久了的毛病

Cocos2dx 学习笔记整理----场景切换

据说Cocos2dx场景切换的方法有32种:cocos2dx 常见的32种切换场景的动画 无需一一求证,只需要知道切换场景需要怎么做就行了. 作为导演CCDirector,切换场景的事情当然归它管了. 切换场景的接口如下: ? 1 CCDirector::sharedDirector()->replaceScene(cocos2d:CCScene * pScene); 所以,我们只要把需要切换的场景实例传进去就可以了. ? 1 2 CCScene * pScene = GameMain::sce

Cocos2dx 学习笔记整理----第一个项目

接上一节, 进入新建的项目下面的proj.win32下面,找到项目名.sln文件(我的是game001.sln),双击会通过VS2010打开.(当然,你装了VS什么版本就是什么版本) 将你的项目设为启动项目, 切换到解决方案视图, 然后邮件点击解决方案, 选择生成解决方案. 第一次生成根据个人机器性能会消耗大概1-3分钟,呵呵. 但是以后会快很多的. 生成成功的话会在输出窗口显示如下: 一般都会生成成功,但是我生成的时候失败了很多次,后来发现是这个问题:http://www.cnblogs.co

Cocos2dx 学习笔记整理----开发环境搭建

最近在学习cocos2dx,预备将学习过程整理成笔记. 需要的工具和环境整理一下: 使用的版本 cocos2dx目前已经出到了v3.1.1,学习和项目的话还是用2.2.3为宜,毕竟不大想做小白鼠,并且学习了几天之后才发出3.X版本的,版本内容变动比较大. 开发环境 1 jdk 1.6以上 2 python 2.7为宜(创建项目要用的) 3 NDT+Android SDK 4 Cygwin或者MinGW 开发工具 1 Eclipse + CDT + ADT 2 VS2010 3 Sublime T