Cocos2d-x 3.x 之 坐标系

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

继续夯一下基础,

今天研究下——坐标系

内容:

> UI坐标

> OpenGLzuobiao

> 世界坐标和模型坐标

1.关于 坐标系

在图形图像和游戏应用开发中坐标系是非常重要的。

在 Android 和 iOS等平台应用开发的时候,它们所使用的二维坐标系的 原点 是在 左上角。

But,在Cocos2d-x坐标系中 原点 是在 左下角 的,而且Cocos坐标系又分为 世界坐标系  和  模型坐标系。

2.UI坐标

UI坐标 就是指 Android 和 iOS等应用开发时候,所使用的坐标系,

就像:

UI坐标 的原点是在 左上角,x轴右向为正,y轴下向为正。

上面也说过,cocos2d-x默认坐标系并不是这样的,但是并非全不是,

在触摸事件的时候,触摸到的坐标,就是UI坐标,

就像这样获得的: Vec2 touchLocation = touch -> getLocationInView();

当然,我们也可以进行坐标转换,将它转换成cocos2d-x的默认坐标:

Vec2 touchLocation2 = Director::getInstance()->convertToGL(touchLocation);

3.OpenGL坐标

OpenGL坐标是三维坐标,

由于cocos2d-x底层采用OpenGL渲染,因此默认坐标就是OpenGL坐标,只不过只采用两维。

若不考虑z轴,OpenGL坐标的原点在 左下角:

PS:三维坐标根据z轴指向不同分为 左手坐标(z轴正向指向屏幕内) 和 右手坐标(z轴正向指向屏幕外)。

OpenGL坐标是右手坐标,Microsoft平台的 Direct3D是左手坐标。

4.世界坐标 与 模型坐标

因为 OpenGL坐标 可以分为世界坐标和模型坐标,

所以 cocos2d-x坐标 也分为世界坐标和模型坐标。

参照物的不同,造就两个不同的坐标,

比如:

描述A点的位置:

世界坐标,就是直接说A点为(5,5)

而模型坐标,可以以B点为参照物,就是(-1,1)

既然有这两个不同参照物的坐标,肯定需要互相转换,

cocos2d-x提供了几个函数:

> 将世界坐标转换为模型坐标

Vec2 convertToNodeSpace(const Vec2& worldPoint);

> 将世界坐标的触摸点转换为模型坐标

Vec2 convertTouchToNodeSpace(const Vec2& worldPoint);

> 将模型坐标转换为世界坐标

Vec2 convertToWorldSpace(const Vec2& nodePoint);

在Cocos2d-x中,每个Node都有一个锚点的存在,

这个锚点,就和我们在Word编辑文字中的 左对齐-右对齐-居中 一样,

它代表这个Node的中心,我们每次setPosition时候,其实放的是锚点的位置。

比如,我们把一个图片的锚点设定在正中央,让它展现在背景的中央位置,图片就是在正中央;如果我们把一个图片锚点设定在 左上角,让它展现在背景的中央位置,整个图片会在背景的右下角位置,就像下面的图一样:

? 中间位置

// 添加一个Button
auto node1 = Sprite::create("button1.png");
node1->setAnchorPoint(Vec2(0.5,0.5));
node1->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));

this->addChild(node1,0);

? 左上角

// 添加一个Button
auto node1 = Sprite::create("button1.png");
node1->setAnchorPoint(Vec2(0.0,1.0));
node1->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));

this->addChild(node1,0);

两个不同的坐标系之间的转换,还有相对于锚点的转换:

> 将世界坐标系转换为模型坐标,相对于锚点

Vec2 convertToNodeSpaceAR(const Vec2& worldPoint);

> 将世界坐标的触摸点转换为模型坐标,相对于锚点

Vec2 convertTouchToNodeSpaceAR(const Vec2& worldPoint);

> 将模型坐标转换为世界坐标,相对于锚点

Vec2 convertToWorldSpaceAR(const Vec2& nodePoint);

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

时间: 2024-10-07 14:35:45

Cocos2d-x 3.x 之 坐标系的相关文章

Cocos2d-x的坐标系和其转换方式

1.坐标系 cocos2d使用的是opengl坐标系,这里说的cocos2d是指cocos2d中所有的节点的节点坐标系也都是使用的opengl坐标系. 手机设备使用的是标准设备坐标系,这与cocos2d无关. 2.锚点 锚点是一个相对位置,值从0-1,这是个节点的属性,按照cocos2d使用opengl坐标,右上角是(1,1)这个锚点坐标,右下角是(0,0)坐标 下面的图是重设锚点,绿色层设置位置为(0,0),在红色层添加绿色层: 每个节点有一个忽略锚点的属性,如果设置为true,则节点锚点强制

ios中关于对锚点的理解

锚点在ios中见到的地方不多,大部分用在动画中. 今天看到一个动画,上面都是关于锚点的,锚点这个概念在两年前看cocos2d得基本概念时接触过,当时没怎么看,今天看到了,就在好好的学一下. 看了一篇blog,是关于锚点的,就借鉴一些上面的图像: cocos2d里采用OpenGL ES坐标系,坐标原点在屏幕左下角.而ios采用的是Quartz 2D坐标系,坐标原点在屏幕左上角. 在cocos2d和ios中分别把视图的坐标点设为(10,10),结果如下: 那么什么是锚点呢?下面以一个例子来说明: 比

Cocos2d坐标系转换

Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系(高中数学里面那种). 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右手系. 屏幕坐标系和Cocos2d坐标系 标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系. iOS, Android, Windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下. Cocos2d坐标系和OpenG

Cocos-2d 坐标系及其坐标转换

anchor point 究竟是怎么回事? 之所以造成不容易理解的是因为我们平时看待一个图片是 以图片的中心点 这一个维度来决定图片的位置的.而在cocos2d中决定一个 图片的位置是由两个维度 一个是 position 也就是图片的中心点 另外一个是anchor point.只要我们搞清楚他们的关系,自然就迎刃而解. 他们的关系是这样的: actualPosition.x = position.x + width*(0.5 - anchor_point.x); acturalPosition.

Cocos2d-x学习(3) - cocos2d坐标系,锚点

1.OpenGL的坐标系 Cocos2d是基于OpenGL开发的,所以Cocos2d的坐标系和OpenGL的坐标系是一致的,都是按照图示方向.和我们平时最常见到的坐标系也是一致的. 2.屏幕坐标系 屏幕坐标系是界面编程中很常见的坐标系.它规定的则是屏幕的左上角为坐标原点,向右为X轴正方向,向下为Y轴正方向.这个相比OpenGL坐标系,X轴方向其实是一致的,不同就在与Y轴方向. 3.元素的位置 每个元素的坐标系都是相对于其父节点的,也就是说如果父节点移动那么该父节点下的元素坐标也是相对移动的.就像

一张图了解cocos2d坐标系

一张图了解cocos2d坐标系 平面直角坐标系

Cocos2d-x 3.0坐标系详解(转载)

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

cocos2dx坐标系介绍

GL坐标系 Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. 屏幕坐标系 苹果的Quarze2D使用的是不同的坐标系统,原点在屏幕左上角,x轴向右,y轴向下.ios的屏幕触摸事件CCTouch传入的位置信息使用的是该坐标系.因此在cocos2d中对触摸事件做出响应前需要首先把触摸点转化到GL坐标系.可以使用CCDirector的convertToGL来完成这一转化. 世界坐标系 世界坐标系也叫做绝对坐标系,是游戏开发中的

Cocos2D学习笔记(1)- 常用的类

1.坐标系 >屏幕坐标系(UIKit):原点在左上角! >OpenGl坐标系:原点在屏幕的左下角! 2.游戏设计:Director--Scene--Layer--Sprite. >CCDirector:导演类,相当于是游戏策划,负责整个游戏的布局和运行规则的制定. >CCScene:场景类,每个场景可以是一个界面或一个关卡. >CCLayer:图层类,为了方便游戏界面的渲染管理. >CCSprite:精灵类, 小结:一个导演类(CCDirector)可以指挥多个场景类(

Cocos2d之Node类详解之节点树(一)

一.声明 笔者分析的是用C++语言实现.版本号为cocos2d-x-3.3rc0的cocos2d框架的源代码.本文为笔者原创,允许读者分享和转载,只要读者注明文章来源即可. 二.简介 Node对象时场景图的基本元素,并且场景图的基本元素必须是Node对象和Node的子类对象.常见的Node类的子类有:Scene.Layer.Sprite.Menu和Label类. Node类主要实现几个特性: Node对象的 addChild(Node *child).getChildByTag(int tag)