一、笛卡儿坐标系

  OpenGl坐标系为笛卡儿右手系。x向右,y向上,z向外。在cocos2d-lua中坐标系原点在屏幕的左下角,x向右,y向上,z则是指的zorder(层级)。

二、世界坐标系,本地坐标系

  世界坐标系的原点固定在屏幕的左下角。
  本地坐标是和节点相关的坐标系,每个节点都有独立的坐标系,是以节点左下角为原点。当节点移动或改变方向时,和该节点关联的坐标系将随之移动或者改变方向。

三、锚点

  锚点Anchor Point的两个参数范围在0-1 之间,他们是乘数因子。比如(0.5,0.5)表示锚点位于节点长乘于0.5,宽*0.5的位置。可以设置锚点,如果没设置,默认在(0.5,0.5);

  下面给个代码看看效果:

        //创建大的精灵
CCSprite *big = CCSprite::create();
//设置背景颜色
big->setColor(Color3B(,,));
//设置锚点为左下角
big->setAnchorPoint(ccp(, ));
//设置大小
big->setTextureRect(CCRectMake(, , , ));
//设置位置
big->setPosition(ccp(, ));
//加载
addChild(big);

  如果不忽略锚点

         //创建大的精灵
CCSprite *big = CCSprite::create();
//设置背景颜色
big->setColor(Color3B(,,));
//设置锚点为左下角
//big->setAnchorPoint(ccp(0, 0));
big->ignoreAnchorPointForPosition(false);
//设置大小
big->setTextureRect(CCRectMake(, , , ));
//设置位置
big->setPosition(ccp(, ));
//加载
addChild(big);

  忽略锚点

 //创建大的精灵
CCSprite *big = CCSprite::create();
//设置背景颜色
big->setColor(Color3B(,,));
//设置锚点为左下角
//big->setAnchorPoint(ccp(0, 0));
big->ignoreAnchorPointForPosition(true);
//设置大小
big->setTextureRect(CCRectMake(, , , ));
//设置位置
big->setPosition(ccp(, ));
//加载
addChild(big);

4、世界坐标和本地坐标的转化

convertToNodeSpace//将世界坐标转换为本地坐标系
convertToWorldSpaceAR//将本地坐标系转换为世界坐标系

总的来说世界坐标就是相对于窗口的坐标,本地坐标就是相对于某个节点的坐标

整体代码:

T5Coordinate.h
 #pragma once
#include "cocos2d.h"
USING_NS_CC; class T5Coordinate :public CCLayer
{
public:
static CCScene *scene();
CREATE_FUNC(T5Coordinate);
bool init(); bool onTouchBegan(CCTouch *pTouch, CCEvent *pEvent);//创建点击事件
};
T5Coordinate.cpp
 #include "T5Coordinate.h"

 CCScene *T5Coordinate::scene()
{
CCScene *scene = CCScene::create();
T5Coordinate *layer = T5Coordinate::create();
scene->addChild(layer);
return scene;
} bool T5Coordinate::init()
{
CCLayer::init();
setTouchEnabled(true);//打开触摸开关
setTouchMode(kCCTouchesOneByOne);//单点 //创建大的精灵
CCSprite *big = CCSprite::create();
//设置背景颜色
big->setColor(Color3B(,,));
//设置锚点为左下角
//big->setAnchorPoint(ccp(0, 0));
big->ignoreAnchorPointForPosition(true);
//设置大小
big->setTextureRect(CCRectMake(, , , ));
//设置位置
big->setPosition(ccp(, ));
//加载
addChild(big); //创建小的精灵
CCSprite *little = CCSprite::create();
//设置背景颜色
little->setColor(Color3B(, , ));
//设置锚点为左下角
little->setAnchorPoint(ccp(, ));
//设置大小
little->setTextureRect(CCRectMake(, , , ));
//设置位置
little->setPosition(ccp(, ));
//加载到大的精灵里面,以大的精灵的锚点为坐标原点
big->addChild(little); //世界坐标转化为本地坐标
CCPoint toWorld = big->convertToWorldSpace(little->getPosition()); CCSprite *little2 = CCSprite::create();
little2->setColor(Color3B(, , ));
little2->setAnchorPoint(ccp(, ));
little2->setTextureRect(CCRectMake(, , , ));
little2->setPosition(ccp(, ));
big->addChild(little2); //将本地坐标转化为世界坐标 //CCPoint toNode = big->convertToNodeSpace(little2->getPosition()); //创建动作
//移动到的位置
CCMoveBy *by = CCMoveBy::create(, ccp(, ));
//从移动到的位置回来
CCMoveBy *by2 = (CCMoveBy *)by->reverse();
//创建动作
CCSequence *seq = CCSequence::create(by, by2, NULL);
//把动作给大的精灵
big->runAction(CCRepeatForever::create(seq)); CCMoveBy *l1by = CCMoveBy::create(, ccp(, -));
CCMoveBy *l1by2 = (CCMoveBy *)l1by->reverse();
CCSequence *l1seq = CCSequence::create(l1by, l1by2, NULL);
little->runAction(CCRepeatForever::create(l1seq)); CCMoveBy *lby = CCMoveBy::create(, ccp(, ));
CCMoveBy *lby2 = (CCMoveBy *)lby->reverse();
CCSequence *lseq = CCSequence::create(lby, lby2, NULL);
little2->runAction(CCRepeatForever::create(lseq)); return true;
} bool T5Coordinate::onTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
//获取GL坐标
CCPoint pGl = pTouch->getLocation();
//获取UI坐标
CCPoint pUi = pTouch->getLocationInView();
//世界坐标转化为相对坐标
CCPoint pnode = this->convertToNodeSpace(pGl);
//UI->GL坐标转换
CCPoint ptoGl = CCDirector::sharedDirector()->convertToGL(pUi);
//GL->UI坐标的转换
CCPoint ptoUi = CCDirector::sharedDirector()->convertToUI(pGl); //存储结果并且显示
char Gl[];
char Ui[];
char toGl[];
char toUi[];
char node[];
char res[];
sprintf(Gl, "GL坐标:x = %f y = %f", pGl.x, pGl.y);
sprintf(Ui, "UI坐标: x = %f y = %f", pUi.x, pUi.y);
sprintf(toGl, "toGL坐标:x = %f y = %f", ptoGl.x, ptoGl.y);
sprintf(toUi, "toUi坐标:x = %f y = %f", ptoUi.x, ptoUi.y);
sprintf(node , "相对坐标:x = %f y = %f", pnode.x, pnode.y);
sprintf(res, "%s\n%s\n%s\n%s\n%s", Gl, Ui,toGl,toUi,node);
MessageBoxA(, res, "当前点击坐标", );
return true;
}
												

10.cocos2d坐标系的更多相关文章

  1. Cocos2d坐标系转换

    Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系(高中数学里面那种). 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右 ...

  2. 一张图了解cocos2d坐标系

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

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

    Cocos-2d中,涉及到4种坐标系: GL坐标系Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. 屏幕坐标系苹果的Quar ...

  4. Cocos-2d 坐标系

    Cocos-2d中,涉及到4种坐标系: GL坐标系:Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. getLocation ...

  5. 【Cocos2d入门教程七】三分钟看懂Cocos2d坐标系

    无论是搞2d还是3d开发,最需要搞清楚的就是坐标系,这部分混乱的话就没啥搞头了.所以玩cocos2d,一上来就需要先把各种与坐标有关的东西搞清楚. 1.OpenGL坐标系 Cocos2d-x使用的是O ...

  6. Cocos2d坐标系具体解释

    1.笛卡尔坐标系 左手坐标系(Direct3D坐标系),右手坐标系(Direct3D坐标系) 大拇指和食指分别相应x轴和y轴 2.UI坐标系 iOS/Android/Windows SDK中的通用UI ...

  7. 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)

    注:ccp是cocos2dx中的一个宏定义,#define ccp(__X__,__Y__)CCPointMake((float)__X__, (float)__Y__),在此文章中表示坐标信息 1. ...

  8. cocos2d-x 屏幕坐标系和OPenGL坐标系转换

    转自:http://home.cnblogs.com/group/topic/57609.html cocos2d坐标系(OPenGL坐标系):以左下角为原点,x向右,y向上 屏幕坐标系(androi ...

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

    Cocos2d-x 3.0坐标系详解 Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系. 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenG ...

随机推荐

  1. Spring深入浅出(二)IOC的单例 ,继承,依赖,JDBC,工厂模式以及自动装载

    IOC的单例模式--Bean Spring中的bean是根据scope来决定的. scope有4种类型: 1.singleton:单例模型,表示通过Spring容器获取的该对象是唯一的.常用并且默认. ...

  2. windows, fast-rcnn CPU版本的安装配置

    一:安装准备 1:caffe的安装配置,本人用的是happynear大神的caffe版本,具体链接https://github.com/happynear/caffe-windows,编译时需要用到p ...

  3. UVa 12661 Funny Car Racing【 dijkstra 】

    题意:给出n个点,m条路,每条路用5个整数表示u,v,a,b,t u表示这条路的起点,v表示终点,a表示打开时间,b表示关闭时间,t表示通过这条道路需要的时间 看的紫书,因为边权不再仅仅是路上的时间, ...

  4. gym 100971 J Robots at Warehouse

    Vitaly works at the warehouse. The warehouse can be represented as a grid of n × m cells, each of wh ...

  5. CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法

    CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法 CentOS 7.4 中, 网卡命名方式发生改变, 可预测功能命名: 网卡简要名称组成格 ...

  6. Ubuntu 18.04图形化软件包管理器

    1.ubuntu软件这个管理工具提供了一种管理您系统中软件的好方法,通过他可以很直观的查找软件安装很简单,打开终端,输入以下命令:----------------------------------- ...

  7. iOS开发——导航栏的一些小设置

    1.导航栏的隐藏与显示:navigationBarHidden - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; ...

  8. bzoj1618 购买干草

    Description 约翰的干草库存已经告罄,他打算为奶牛们采购日(1≤日≤50000)磅干草.他知道N(1≤N≤100)个干草公司,现在用1到N给它们编号.第i个公司卖的干草包重量为Pi(1≤Pi ...

  9. eclipse maven install 时控制台乱码问题解决

    pom.xml文件中加入: <properties> <argLine>-Dfile.encoding=UTF-8</argLine> <project.bu ...

  10. 在Unix上用 BIND建立名称服务器(naem server)

    在Unix上用 BIND建立名称服务器(naem server) 安装 apt install -y bind9 yum install -y bind bind-utils 下载源码并解压缩,htt ...