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) ...
随机推荐
- css+js 控制幻灯片效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- spring小例子-springMVC+mybits整合的小例子
这段时间没更博,找房去了... 吐槽一下,自如太坑了...承诺的三年不涨房租,结果今年一看北京房租都在涨也跟着涨了... 而且自如太贵了,租不起了.. 突然有点理解女生找对象要房了.. 搬家太 ...
- c#重载和重写及运用
重载的条件: 1.必须在同一个类中2.方法名必须相同3.参数列表不能相同. 重写的条件: 1. 在不同的类中 2. 发生方法重写的两个方法 ...
- C# 简单邮件群发通用类
public static class Email { /// <summary> /// 发件人 /// </summary> public static string ma ...
- asp.net判断访问者是否来自移动端
主要就是通过客户端传递的User-agent来判断访问网站的客户端是PC还是手机. .NET中就是Request.ServerVariables["HTTP_USER_AGENT" ...
- ios中的事件处理、响应者链条以及第一响应者
在ios中,事件UIEvent类来表示,当一个事件发生时,系统会搜集的相关事件信息,创建一个UIEvent对象,最后将该事件转发给应用程序对象(UIApplication).日常生活中,主要有三种类型 ...
- jQuery骨架
jQuery选择器 jQuery操作DOM jQuery中的事件与应用 jQuery的动画与特效 Ajax在jQuery中的应用 jQuery常用插件 jQuery UI插件 jQuery实用工具函数 ...
- tslib 移植问题与解决方法
问题一.执行脚本.提示出错,错误有"cann't exec aclocal" ,错误提示最多的是关于aclocal的问题,查资料显示这个文件是automake必备一个文件,好吧,那 ...
- flume+kafka (分区实现 默认单分区)
这篇文章主要是log4j+flume+kafka的内容 首先从从下面的地址下载flume+kafka的插件包 https://github.com/beyondj2ee/flumeng-kafka-p ...
- CodeForces 628D Magic Numbers (数位dp)
题意:找到[a, b]符合下列要求的数的个数. 1.该数字能被m整除 2.该数字奇数位全不为d,偶数位全为d 分析: 1.dp[当前的位数][截止到当前位所形成的数对m取余的结果][当前数位上的数字是 ...