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) ...
随机推荐
- ASP-----分页功能的实现
WEB 分页功能的实现后端C#代码部分: // 建立Linq 数据库的连接 private MYDateDataContext context = new MYDateDataContext(); / ...
- 如何提高手机APP的用户体验?
详细内容请点击 随着移动互联网如日中天,如火如荼的时候,手机APP开发日益高涨了起来,关于手机APP的用户体验,也是一个老话长谈的话题.从事这行业也很久了,以下是我个人在工作中的一些关于APP的用户体 ...
- c#获取网页内容的三种方法
1.webclient WebClient wc = new WebClient(); Stream stm = wc.OpenRead(str_url); StreamReader sr = new ...
- Java之累加和
所谓累加算法,就是数学中数列求的算法,这都是司空见惯了的.下面我们用java求: package com.cdp.leijiahe; import java.util.Scanner; public ...
- C#如何关闭一个窗口的同时打开另一个窗口
在.net的WinForm程序中,如果是直接起动的Form作为主窗口,那么这个主窗口是不能关闭的,因为它维护了一个Windows消息循环,它一旦关闭了就等于声明整个应用程序结束,所以新打开的窗口也就被 ...
- Toad for Oracle Authorization key
Authorization key : 0-63920-00993-29060-08749 sit message : li
- 济南学习 Day1 T3 am
凝视[问题描述]背包是个好东西,希望我也有.给你一个二维的背包,它的体积是N*M.现在你有一些大小为1× 2和1×3的物品,每个物品有自己的价值.你希望往背包里面装一些物品,使得它们的价值和最大,问最 ...
- javascript a=a||"" 表达式
其实: a=a||"defaultValue"; 与: if(!a){ a="defaultValue"; } 和: if(a==null||a==" ...
- LLVM language 参考手册 翻译停止相关
再翻译LLVM language 参考手册的时候,个人感觉很多东西都不是很懂,因此打算学习完编译原理后再去继续研究翻译,多有不便望见谅
- Android模拟器中安装APK文件(转)
1.平台环境:Win7系统, 安装Eclipse,android4.0(sdk) 2.随便创建个工程(HelloWorld),结果如下: 3.运行(Run HelloWorld),启动模拟器,如下所示 ...