10.cocos2d坐标系
一、笛卡儿坐标系
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坐标系的更多相关文章
- Cocos2d坐标系转换
Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系(高中数学里面那种). 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenGL坐标系为笛卡尔右 ...
- 一张图了解cocos2d坐标系
一张图了解cocos2d坐标系 平面直角坐标系
- Cocos-2d 坐标系及其坐标转换
Cocos-2d中,涉及到4种坐标系: GL坐标系Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. 屏幕坐标系苹果的Quar ...
- Cocos-2d 坐标系
Cocos-2d中,涉及到4种坐标系: GL坐标系:Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系.GL坐标系原点在屏幕左下角,x轴向右,y轴向上. getLocation ...
- 【Cocos2d入门教程七】三分钟看懂Cocos2d坐标系
无论是搞2d还是3d开发,最需要搞清楚的就是坐标系,这部分混乱的话就没啥搞头了.所以玩cocos2d,一上来就需要先把各种与坐标有关的东西搞清楚. 1.OpenGL坐标系 Cocos2d-x使用的是O ...
- Cocos2d坐标系具体解释
1.笛卡尔坐标系 左手坐标系(Direct3D坐标系),右手坐标系(Direct3D坐标系) 大拇指和食指分别相应x轴和y轴 2.UI坐标系 iOS/Android/Windows SDK中的通用UI ...
- 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)
注:ccp是cocos2dx中的一个宏定义,#define ccp(__X__,__Y__)CCPointMake((float)__X__, (float)__Y__),在此文章中表示坐标信息 1. ...
- cocos2d-x 屏幕坐标系和OPenGL坐标系转换
转自:http://home.cnblogs.com/group/topic/57609.html cocos2d坐标系(OPenGL坐标系):以左下角为原点,x向右,y向上 屏幕坐标系(androi ...
- Cocos2d-x 3.0坐标系详解(转载)
Cocos2d-x 3.0坐标系详解 Cocos2d-x坐标系和OpenGL坐标系相同,都是起源于笛卡尔坐标系. 笛卡尔坐标系 笛卡尔坐标系中定义右手系原点在左下角,x向右,y向上,z向外,OpenG ...
随机推荐
- struts2连接mysql多表查询
下载地址:http://download.csdn.net/detail/qq_33599520/9786567 项目结构: 代码: package com.mstf.action; import j ...
- 关于网易云音乐爬虫的api接口?
抓包能力有限,分析了一下网易云音乐的一些api接口,但是关于它很多post请求都是加了密,没有弄太明白.之前在知乎看到过一个豆瓣工程师写的教程,但是被投诉删掉了,请问有网友fork了的吗?因为我觉得他 ...
- jQuery新浪微博表情插件教程
1.引入css文件 <link rel="stylesheet" type="text/css" href="jquery.sinaEmotio ...
- codeforces 400 C Inna and Huge Candy Matrix【模拟】
题意:给出一个矩形的三种操作,顺时针旋转,逆时针旋转,对称,给出原始坐标,再给出操作数,问最后得到的坐标 画一下模拟一下操作就可以找到规律了 #include<iostream> #inc ...
- 最新linux运维高级架构课13期 架构师课程
有会员购买的,分享给大家.完整一套,可以学习一下. ├─L001-2017linux运维高级架构师13期-运维与自动化运维发展-10节 │ 1-1运维职业发展.avi │ ...
- HDU 4928 Series 2
有了题解以后这题就成了一个模拟题.不过写了好久才把它写对…… Sad #include <iostream> #include <cstdio> #include <cs ...
- silverlight wcf mvvm
近期工作比較忙.也没有时间发表新内容,今天有点时间,就顺便写点,说说近期开发的一套系统心得. 我刚去这个公司已经将前端确定要用Silverlight,我不知道为什么要选择这个,或许是为以后转C/S系统 ...
- [Poi] Use Poi to Build an Index.js with Modern JavaScript Features
Poi can easily launch an index.js file simply by running the poi command. This will launch a dev-ser ...
- storm 消息确认机制及可靠性
worker进程死掉 在一个节点 kill work进程 比方 kill 2509 对work没有影响 由于会在其它节点又一次启动进程运行topology任务 supervisor进程死掉 supe ...
- DECLARE CURSOR (Transact-SQL)
Defines the attributes of a Transact-SQL server cursor, such as its scrolling behavior and the query ...