cocos2dx中的坐标体系
1.UI坐标系和GL坐标系

2.本地坐标与世界坐标
本地坐标是一个相对坐标,是相对于父节点或者你指明的某个节点的相对位置来说的,本地坐标的原点在参考节点的左下角
世界坐标是一个绝对的坐标,是以屏幕的左下角为坐标原点,与GL坐标是重合的.
3.Ui坐标与GL坐标和Node坐标
UI坐标是以UI坐标系来计算的,又叫屏幕坐标,y轴向下,在某些游戏中需要使用到屏幕坐标与GL坐标的转换
GL坐标即世界坐标,是一个绝对的坐标,y轴向上
Node坐标即节点坐标,又叫本地坐标,是一个相对的坐标,是以父节点,或者参考节点的左下角为原点来计算的
4.相关的转换函数:
CCDirector::sharedDirector()->convertToUI();//转换为屏幕坐标
CCDirector::sharedDirector()->convertToGL();//转换为世界坐标
convertToNodeSpace();//转换为本地坐标,又叫节点坐标
convertToWorldSpace();//转换为世界坐标,又叫GL坐标
5.代码处理:
.h文件
#ifndef __T05Coordinate_H__
#define __T05Coordinate_H__ #include "cocos2d.h"
USING_NS_CC; class T05Coordinate :public CCLayer
{
public:
static CCScene * scene();
CREATE_FUNC(T05Coordinate);
bool init(); /*触摸事件处理函数*/
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); }; #endif
.cpp文件
#include "T05Coordinate.h" /*创建场景*/
CCScene *T05Coordinate::scene()
{
CCScene * scene = CCScene::create();
T05Coordinate * layer = T05Coordinate::create();
scene->addChild(layer);
return scene;
} bool T05Coordinate::init()
{
CCLayer::init();
setTouchEnabled(true); //打开触摸开关
setTouchMode(kCCTouchesOneByOne); //设置单点触摸 /*创建一个空精灵作为背景*/
CCSprite *big = CCSprite::create();
/*设置颜色*/
big->setColor(ccRED);
big->setAnchorPoint(ccp(, ));
/*设置纹理大小*/
big->setTextureRect(CCRectMake(, , , ));
big->setPosition(ccp(, ));
addChild(big); CCSprite *little = CCSprite::create();
little->setColor(ccYELLOW);
little->setAnchorPoint(ccp(, ));
little->setTextureRect(CCRectMake(, , , ));
little->setPosition(ccp(, ));//即以父类对象为基准,设置到ccp(100,100)的位置
big->addChild(little); /*打印UI坐标,又叫本地坐标,这是相对于它的父类对象而言的,是一个相对坐标*/
CCLog("little x = %f ,y = %f", little->getPositionX(), little->getPositionY()); /*父类将子类对象,转换为世界坐标*/
CCPoint toWorld = big->convertToWorldSpace(little->getPosition()); CCLog("toWorld x = %f ,y = %f", toWorld.x, toWorld.y); CCSprite *little2 = CCSprite::create();
little2->setColor(ccGREEN);
little2->setAnchorPoint(ccp(, ));
little2->setTextureRect(CCRectMake(, , , ));
little2->setPosition(ccp(, ));
addChild(little2);//它的父类对象时CCLayer,因此它的位置是相对于整个屏幕来说的. /*父类将子类对象转换为本地坐标,又叫节点坐标*/
CCPoint toNode = big->convertToNodeSpace(little2->getPosition());/*相对于big对象来说,little2相当于在ccp(-100,-100)*/
CCLog("little2 x = %f ,y = %f", little2->getPositionX(), little2->getPositionY());
CCLog("toNode x = %f ,y = %f", toNode.x, toNode.y); /*创建一个移动的动作,by表示是绝对位移*/
CCMoveBy *by = CCMoveBy::create(, ccp(, ));
CCMoveBy *by2 = (CCMoveBy *)by->reverse();//掉头,反向反转
/*根据动作,创建一个动作序列*/
CCSequence *seq = CCSequence::create(by, by2, NULL);
/*精灵执行动作*/
//big->runAction(CCRepeatForever::create(seq)); CCMoveBy *lby = CCMoveBy::create(, ccp(, -));//向下运动
CCMoveBy *lby2 = (CCMoveBy *)lby->reverse();
/*变参函数以NULL结尾*/
CCSequence *lseq = CCSequence::create(lby, lby2, NULL); //little->runAction(CCRepeatForever::create(lseq)); return true;
} /*触摸事件的处理函数*/
bool T05Coordinate::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
CCLog("ccTouchBegan");
/*getlocation只有在触摸事件里,其他均是getposition*/
CCPoint pGl = pTouch->getLocation();//获得世界坐标,又叫GL坐标
CCLog("GL:x = %f ,y = %f", pGl.x, pGl.y); CCPoint pUi = pTouch->getLocationInView();//获得UI坐标,UI坐标又叫屏幕坐标系,在坦克大战中可以用到转换
CCLog("UI:x = %f ,y = %f", pUi.x, pUi.y); CCPoint toUi = CCDirector::sharedDirector()->convertToUI(pGl);//将世界坐标转换为Ui坐标
CCLog("ToUix = %f ,y = %f", toUi.x, toUi.y); CCPoint toGl = CCDirector::sharedDirector()->convertToGL(pUi);//将Ui坐标转换为世界坐标
CCLog("ToGlx = %f ,y = %f", toGl.x, toGl.y); CCPoint node = this->convertToNodeSpace(pGl);//将Gl坐标转换为节点坐标,又叫本地坐标
CCLog("Node:x = %f ,y = %f", node.x, node.y); return false;
}
cocos2dx中的坐标体系的更多相关文章
- Quartz 2D在ios中的使用简述一:坐标体系
Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境,官方文档:Quartz 2D Programming Guide. 一.坐标体系 这样的坐标体系就导致我们使用Quart ...
- Cocos2d-X中的坐标系
在Cocos2d-x中坐标能够分成四种: 1.GL坐标体系:GL坐标体系左下角为坐标原点,X轴向右,Y轴向上 2.UI坐标体系:UI坐标体系左上角为坐标原点,X轴向右,Y轴向上. .世界坐标体系:是窗 ...
- java基础 绘图技术.坦克大战 之java绘图坐标体系(一)
坐标体系介绍 下图说明了java坐标体系.坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位.在java的坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素:第二个 ...
- cocos2d-x 中的坐标系
cocos2d-x 中的坐标系是笛卡尔坐标系,向右为 x 轴正方向,向上为 y 轴正方向,以像素为单位 原点在屏幕左下角的坐标系叫世界坐标系,是整个游戏中的根基,直接添加到场景中的节点,设置的位置都是 ...
- Cocos2dx中零散知识点
cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce.功能分别是 每隔几秒调用自定义函数.调用系统默认的update()函数.只调用一次自定义函数 ...
- OpenCV坐标体系的初步认识
实验基础 本次实验通过一个简短的例子,主要来说明下面4个问题: 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat, ...
- Cocos2d-x中jsb结构剖析
libs/javascript下有两部分bindings和spidermonkey.其中spidermonkey为js虚拟机,暂时不去管它.bindings下分为四部分,分别为主干部分,generat ...
- 在cocos2d-x中使用位图字体
http://blog.csdn.net/fansongy/article/details/9006677 通常情况下,游戏中绚丽的文字和数字都不是字体生成的而是"贴"上去!今天, ...
- cocos2d-x中的尺寸之二
接下来我们再做些坏事,比如给EGLView设置分辨率,代码如下: pEGLView->setDesignResolutionSize(240, 320, kResolutionExactFit) ...
随机推荐
- javascript进阶-原型prototype
一.javascript原型认识 很多编程语言都有类的概念,我们可以拿原型和类进行比较,看看它们之间的区别以及相同点在哪里. 1.类:类是一个具体事物的抽象所以类是一个抽象的东西,在面向对象中类可以用 ...
- linux两台服务无密通信
一台新linux需要做两台服务器无密通信. 首先ssh-kengen -t rsa(非对称算法) 回车 一路回车即可 #cd /root/.ssh #ssh-copy-id -i id_rsa.pub ...
- CSS3--实现特殊阴影 (实例)
学习来源:慕课网http://www.imooc.com/view/240 先看效果图↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ HTML结构 <body> <div class=& ...
- PHP动态函数
header('Content-type:text/html;Charset=utf8'); function welcome(){ echo 'Welcome to you.'; } functio ...
- C#传递参数
与函数交换数据的最好方式就是传递参数,在C#中有四种方法来控制参数如何传递给目标方法 C#中的参数修饰符 无修饰 如果一个参数没有用参数修饰符,则认为它将按值传递 out 输出参数由被调用的方法赋值. ...
- UNIX 信号基本概念
1. 信号的基本概念 为了理解信号,先从我们最熟悉的场景说起: 用户输入命令,在Shell下启动一个前台进程. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断. 如果CPU当前正在执行这个进程的代 ...
- (转)国内外三个不同领域巨头分享的Redis实战经验及使用场景
随着应用对高性能需求的增加,NoSQL逐渐在各大名企的系统架构中生根发芽.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享领域佼佼者Pinterest带来的Redis实践,首先我们 ...
- maxlength属性在textarea里奇怪的表现
HTML5给表单带来了很多改变,比如今天要说的maxlength,这个属性可以限制输入框输入的最大字字符数,更方便的是对于粘贴的内容也能够根据字符数自动截断. 最近就接到这要一个需求,限制用户最多输入 ...
- 判断Featureclass的类型
一个Featureclass可以是Shapefile Feature Class.Personal Geodatabase Feature Class.File Geodatabase Feature ...
- 《Mail电子邮件日志存储的管理》RedHat6.3——以一举三
我们都知道很多日志的模块都是放在这下面的 要是想修改或是添加其他服务的日志,怎么办?修改下面的配置文件 测试下是否ok 轮转日志和定位分析和分析日志汇总报告: 安装logwatch软件包,这个没啥说的 ...