【cocos2d-x官方文档】cocos2d-x坐标系详解

Cocos2d-坐标系详解 Cocos2d-x的坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系。笛卡尔坐标系右手系: 屏幕坐标系和Cocos2d坐标系世界坐标系(world coordinate)和本地坐标系(local coordinate)世界坐标系也就是绝对坐标系,Cocos2d中的元素是有父子关系的层级结构,通过Node的setPosition方法设定元素的位置使用的是相对与其父节点的本地坐标系而非世界坐标系 阅读详情

笛卡尔坐标系

不同坐标系简介

笛卡尔坐标系

你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到。如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆:

【cocos2d-x官方文档】cocos2d-x坐标系详解

在移动游戏开发过程中,有三种类型的坐标系你可能遇到:

UI坐标系

iOS/Android/Windows SDK中的通用UI坐标系:

  • 起点坐标(x=0, y=0)位于左上角
  • X轴从屏幕最左边开始,由左向右渐增
  • Y轴坐标从屏幕最上方开始,由上向下渐增

详见下图

【cocos2d-x官方文档】cocos2d-x坐标系详解

 

Direct3D坐标系

DirectX 使用Left-handed Cartesian Coordinate

OpenGL和Cocos2d坐标系

Cocos2d-x/-html5/-iphone使用的坐标系和OpenGL的坐标系一样,名为“Right-handed Cartesian Coordinate Syste”。

【cocos2d-x官方文档】cocos2d-x坐标系详解

在2D世界中,我们仅会使用x轴和y轴。所以在你的cocos2d游戏中:

  • 起点坐标(x=0, y=0)位于左下角,这意味着屏幕位于
  • X轴从屏幕最左边开始,由左向右渐增
  • Y轴坐标从屏幕最下方开始,由下向上渐增

下面这张图片有助于更好的阐述Cocos2d-x坐标:

【cocos2d-x官方文档】cocos2d-x坐标系详解

一定要注意:通用UI坐标系和DirectX坐标系是不一样的。

Parent and Childrens

由于每个类都继承自CCNode(cocos2d-x的最顶层类),所以每个类都会默认有anchorPoint属性。 当我们在一个位置画一个的对象的时候,cocos2d-x会合并属性位置和anchorPoint。当然,当旋转一个对象时,cocos2d-x会围绕绕anchorPoint旋转的。

我们创建一个灰色父对象和一个蓝色子对象。设置父对象位置是ccp(100,100),子对象的anchor point位于圆心。

 
  1. CCSprite* parent = CCSprite::create("parent.png");
  2. parent->setAnchorPoint(ccp(0, 0));// Anchor Point
  3. parent->setPosition(ccp(100, 100));
  4. parent->setAnchorPoint(ccp(0, 0));
  5. addChild(parent);
  6.  
  7. //create child
  8. CCSprite* child = CCSprite::create("child.png");
  9. child->setAnchorPoint(ccp(0.5, 0.5));
  10. child->setPosition(ccp(0, 0));
  11. parent->addChild(child);//add child sprite into parent sprite.

由于我们设置子对象的位置是ccp(0,0),父对象位置是ccp(100,100)。所以,子对象位置是:

![](http://www.cocos2d-x.org/attachments/1559/parent.jpeg)

锚点

作为例子,下面这个精灵有的锚点位于 ccp(0,0),位置位于ccp(0,0)。

【cocos2d-x官方文档】cocos2d-x坐标系详解

这个矩形精灵将被放到它的父对象(layer)的左下角。

示例:

 
  1. // create sprite
  2. CCSprite* sprite = CCSprite::create("bottomleft.png");
  3. sprite->setAnchorPoint(ccp(0, 0));// Anchor Point
  4. sprite->setPosition(ccp(0,0));
  5. addChild(sprite);

【cocos2d-x官方文档】cocos2d-x坐标系详解

在另一个例子中,我们会摆放一个坐标为ccp(0.5,0.5)的anchorPoint,以便您更好的理解锚点的相对值。

【cocos2d-x官方文档】cocos2d-x坐标系详解

 
  1. // create sprite
  2. CCSprite* sprite = CCSprite::create("center.png");
  3. sprite->setAnchorPoint(ccp(0.5, 0.5));// Anchor Point
  4. sprite->setPosition(ccp(0,0));
  5. addChild(sprite);

【cocos2d-x官方文档】cocos2d-x坐标系详解

正如你从图中看出的,锚点取的不是像素值,此值的X和Y是相对于此节点的大小的。

获取可视区域大小, 获取可视区域起点 vs 获取窗口大小

VisibleSize(可视区域大小)会返回此点的OpenGL视图的可视区域大小。如果没有调用CCEGLView::setDesignResolutionSize()的话,此值等于getWinSize的大小。 getVisibleOrigin(获取可视区域起点)会返回此点的OpenGL视图的可视区域起点。请移步Multi resolution support查看详情。

如何转换坐标

convertToNodeSpace:

举例,convertToNodeSpace用于tile-based的游戏,即有一个大地图。convertToNodeSpace会转换openGL触摸点转成.tmx 地图或者其他近似的坐标。

例子:

下面的图片会展现,node1的锚点(0,0),node2的锚点是(1,1)。

我们会调用CCPoint point = node1->convertToNodeSpace(node2->getPosition()); 转换node2的屏幕坐标为node1的位置。结果是,node2的位置是(-25,-60).

【cocos2d-x官方文档】cocos2d-x坐标系详解

convertToWorldSpace:

convertToWorldSpace(常量 CCPoint& nodePoint) 转换node坐标为SCREEN坐标。convertToWorldSpace会经常返回你的精灵的SCREEN位置,如果你想捕获精灵的taps而且需要移动/缩放layer的时候,这可能非常有帮助。

 
  1. CCPoint point = node1->convertToWorldSpace(node2->getPosition());

上面的代码会转换node2坐标为node2在屏幕上对应的坐标。

【cocos2d-x官方文档】cocos2d-x坐标系详解

convertToWorldSpaceAR

convertToWorldSpaceAR返回相对锚点的位置:所以如果你的场景 – 根layer有一个锚点位于ccp(0.5f, 0.5f)。- 默认的,convertToNodeSpaceAR应返回相对于屏幕中心的位置。

convertToNodeSpaceAR – 和convertToWorldSpaceAR是一样的逻辑。

示例代码:
 
  1. CCSprite *sprite1 = CCSprite::create("CloseNormal.png");
  2.  
  3. sprite1->setPosition(ccp(20,40));
  4.  
  5. sprite1->setAnchorPoint(ccp(0,0));
  6.  
  7. this->addChild(sprite1);
  8.  
  9. CCSprite *sprite2 = CCSprite::cteate("CloseNormal.png");
  10.  
  11. sprite2->setPosition(ccp(-5,-20));
  12.  
  13. sprite2->setAnchorPoint(ccp(1,1));
  14.  
  15. this->addChild(sprite2);
  16.  
  17. CCPoint point1 = sprite1->convertToNodeSpace(sprite2->getPosition());
  18.  
  19. CCPoint point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
  20.  
  21. CCPoint point3 = sprite1->convertToNodeSpaceAR(sprite2->getPosition());
  22.  
  23. CCPoint point4 = sprite1->convertToWorldSpaceAR(sprite2->getPosition());
  24.  
  25. CCLog("position = (%f,%f)",point1.x,point1.y);
  26.  
  27. CCLog("position = (%f,%f)",point2.x,point2.y);
  28.  
  29. CCLog("position = (%f,%f)",point3.x,point3.y);
  30.  
  31. CCLog("position = (%f,%f)",point4.x,point4.y);

结果:

 
  1. position = (-25.000000,-60.000000)
  2.  
  3. position = (15.000000,20.000000)
  4.  
  5. position = (-25.000000,-60.000000)
  6.  
  7. position = (15.000000,20.000000)

参考

http://www.ityran.com/archives/3367
cocos2d-x API中文文档 本人花了一万整理的cocos2d-x API中文文档,是2015年最新的哦 立即下载

相关推荐

交叉熵损失函数基本概念及公式

对于二分类问题,模型的输出通常是一个标量,表示样本属于正类的概率。因此,在二分类的交叉熵损失函数中,我们只需要考虑一个概率值,即模型预测为正类的概率。具体来说,当真实标签为1时,我们关注模型预测为正类的概率;当真实标签为0时,我们关注模型预测为负类的概率。因此,二分类的交叉熵损失函数可以表示为:其中,y 表示真实标签,取值为 0 或 1;p 表示模型预测为正类的概率。而对于多分类问题,模型的输出通常是一个向量,表示样本属于各个类别的概率。因此,在多分类的交叉熵损失函数中,我们需要考虑所有类别的概率。

qlkaicx的博客 1万+

cocos2d-x坐标系详解

转自:http://bbs.9ria.com/thread-194992-1-1.html   笛卡尔坐标系不同坐标系简介笛卡尔坐标系你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到。如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆: 在移动游戏开发过程中,有三种类型的坐标系你可能遇到: UI坐标系iOS/Android/Windows SDK中的通用U

Gabriel的专栏 1059

信号处理中的滤波器的阶数和谐波的理解

最近在读paper的时候,遇到了一些以前遗忘的问题,先重新查找,记录在这里,以备不时之查看。 我相信一定有小伙伴跟我有过一样的疑惑,那就是我们在使用滤波器的时候,总是遇到滤波器的阶数这个概念参数,我们很多都是根据别的paper里的设置,设置自己的科研参数,其实并不是很理解其中的含义: 其实我们常用的阶数N的意思是: 滤波器的阶数,就是指过滤谐波的次数,一般来讲,同样的滤波器,其阶

Miracle.Zhao的博客 2万+

[8]Cocos2d-x之Position

Position用于设置Node相对其父节点的位置,配合contentSize使用可以设置子节点相对父节点的位置。contentSize是节点的原始大小,缩放并不会影响这个值的大小,所以当我们想设置子节点在其父节点的位置时,可以使用contentSize。 通过获取父节点的cnotentSize,根据自己想设置的位置,设置子节点在父节点上的位置。如下代码: childNode->setPosi

2025年写100篇文章 728

ESP32语音交互实战:离线唤醒与DeepSeek大模型集成

本文详细介绍了如何将ESP32-S3开发板与天问ASRPRO语音模块结合,实现离线语音唤醒并集成DeepSeek大模型的智能交互系统。通过串口通信与API调用,系统可处理本地指令及复杂语义请求,适用于低成本、高隐私保护的AIoT语音交互场景。

rust6ferris的博客 866

【学习体会】Lighttools8.4.0:简单光学系统实例

添加球型光源(SphereSource)和表面接收器: 对光线模拟的参数进行设置: 光线追踪-模拟输入 要追踪的光线总数,决定模拟的准确度,总数越多,准确度越高,当然耗时更多 预览光线数量是模拟之后可以看到的示意光线(黑线),一般是100~1000,随意设置 点击,开始模拟: (模拟结果) 如果光线太多,则会出现,可以看到剩余时间 照度分析: 分析-照度显示-光栅图表 ...

LeonJin的博客 1万+

cocos第二天 坐标系简介

原文章地址:http://www.jellythink.com/archives/717 UI坐标系 在进行iOS或者Android界面开发时,它的坐标系规则如下图所示: 原点坐标(x=0, y=0)位于左上角;X轴从屏幕最左边开始,由左向右渐增;Y轴坐标从屏幕最上方开始,由上向下渐增 Cocos2d-x坐标系 Cocos2d-x坐标系是这里的重点,也是我们开发时考虑的最多的

bigboygo的博客 490

Windows 游戏 EXCEPTION_ACCESS_VIOLATION 修复:3类硬件问题与5步软件排查法

本文提供Windows游戏EXCEPTION_ACCESS_VIOLATION错误的终极修复指南,涵盖3类硬件问题(内存故障、显卡问题、超频不稳定)和5步软件排查法(文件验证、驱动更新、DEP调整等),帮助玩家彻底解决0xFFFFFFFFFFFFFFFF内存访问冲突问题。

weixin_31856057的博客 2391

cocos2d-x 添加 Game Center 游戏中心的方法

写这篇文章的主要用于给自己加强印象,帮助他人就是帮助自己. 本教程基于cocos2d-x 13版本编写 主要内容是告诉大家在c++中如何添加 game center ,找了很多网络上面的代码基本上都是缺胳膊少腿的,代码不完整,对于初学者来说是痛苦的。 本代码仅提供如何登陆GameCenter 显示和关闭Leaderboard(排行榜)。其他实现请参考子龙山人的博客,顺便贴下地址 h...

dinglian6704的博客 207

FDTD材料nk值拟合优化指南:利用材料资源管理器提升光学模型精度

本文详细介绍了如何利用FDTD仿真软件中的材料资源管理器,对材料nk值进行精确拟合与优化,从而提升光学模型的仿真精度。文章通过实战案例,解析了拟合参数调整、报告解读以及针对varFDTD求解器的特殊注意事项,帮助用户从根本上解决仿真结果不准的常见问题。

weixin_29196891的博客 352

Arduino I2C for TCA9548A应答扫描程序

Arduino I2C for TCA9548A应答扫描程序

perseverance51博客 1119

Box2D一:基础知识

一、box2d基础知识 1、关于 Box2D 是一个用于游戏的 2D 刚体仿真库。从游戏的视角来看,物理引擎就是一个程序性动画(proceduralanimation)的系统,而不是由动画师去移动你的物体。 1、核心概念 刚体(rigid body) 一块十分坚硬的物质,它上面的任何两点之间的距离都是完全不变的。 形状(shape) 一块严格依附于物体(body)的 2D 碰撞...

weixin_30550081的博客 892

华为OD机试 - 荒岛求生 - 栈Stack(Python/JS/C/C++ 新系统 100分)

每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2837

[Cocos2d-x v3.x官方文档]Cocos2d-x 3.0坐标系详解

Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系。 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系。 屏幕坐标系和Cocos2d坐标系 标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系。 iOS, Android, Windows

luyafei_89430的专栏 2374

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Cocos2d-x v3.x官方文档Cocos2d-x 3.0坐标系详解

Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系。 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系。 屏幕坐标系和Cocos2d坐标系 标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系。 iOS, Android, Windows

yuxikuo_1的专栏 912

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Cocos2d-x 详解坐标系统

这篇博文将介绍一下在cocos2dx中的一些坐标系统概念: 一、      (1)OpenGL坐标系 Cocos2D-x以OpenGL和OpenGL ES为基础,所以自然支持OpenGL坐标系。该坐标系原点在屏幕左下角,x轴向右,y轴向上。 (2)屏幕坐标系 屏幕坐标系使用的是不同的坐标系统,原点在屏幕左上角,x轴向右,y轴向下。iOS的屏幕触摸事件CCTouch传入的位置信

小邓笔记 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Cocos2d-x 3.0坐标系详解

1

妙心的专栏 1244

Cocos2d-x 3.x 之 坐标系

Cocos2d-x 3.x 之 坐标系

继续激情,继续奋斗。 1974

cocos2d-x坐标系和锚点整理

原文链接:http://blog.youkuaiyun.com/wen294299195/article/details/7867595 在cocos2d-x中一共有四种坐标: (1)屏幕坐标系         在windows系统中,默认的原点在屏幕的左上角,X轴向右,Y轴向下。        (2)GL坐标系         原点在左下角,X轴向右,Y轴向上。由于coc

千里之行 积于跬步 5202

cocos2d-x坐标系、锚点、矩阵变换详解

1. OpenGL 坐标系         Cocos2D-x 以OpenGL 和OpenGL ES 为基础,所以自然支持OpenGL 坐标系。该坐标系原点在屏幕左下角,x 轴向右,y 轴向上。 屏幕坐标系使用的是不同的坐标系统,原点在屏幕左上角,x 轴向右,y 轴向下。iOS 的屏幕触摸事件CCTouch 传入的位置信息使用的是该坐标系。因此在Cocos2D-x 中对触摸事件做出响应前,需要

继续沉淀! 3321

cocos2d-x坐标系详解 (对于新手有点用)

转载与 http://www.ityran.com/archives/3367 刚开始学习对于坐标没有概念的同学,可以参考一下相关的资料。 笛卡尔坐标系 不同坐标系简介 笛卡尔坐标系 你可能上学的时候就已经知道“笛卡尔坐标系”了,它在几何课本里经常用到。如果你已经忘得差不多了,下面这些图片可以很快唤起你的记忆: 在移动游戏开发

JuniorKang的专栏 880

cocos2d-x的坐标系转换

在cocos2d-x中主要用以下几个方法来进行坐标转,这些方法都是定义再CCNode中(yebaok):

kingabcde的专栏 1132
上一篇: 给UIImageview 添加边框 或者设置成圆角
下一篇: 在UITableView中动态的插入或删除行
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值