ConvertToNodeSpace和convertToWorldSpace函数的应用
来源:互联网 发布:如何登陆淘宝店铺 编辑:程序博客网 时间:2024/05/21 08:43
触摸点(Touch position)
所以在处理触摸事件时需要用重写以下四个函数:
virtual
bool
onTouchBegan(Touch *touch, Event * event);
virtual
void
onTouchEnded(Touch *touch, Event * event);
virtual
void
onTouchCancelled(Touch *touch, Event * event);
virtual
void
onTouchMoved(Touch *touch, Event * event);
在函数中获取到touch,我们在设计游戏逻辑时需要用到触摸点在Cocos2d坐标系中的位置,就需要将touch的坐标转换成OpenGL坐标系中的点坐标。
Touch position是屏幕坐标系中的点,OpenGL position是Cocos2d-x用到的OpenGL坐标系上的点坐标。通常我们在开发中会使用两个接口getLocation()
和getLocationInView()
来进行相应坐标转换工作。
在开发中一般使用getLocation()
获取触摸点的GL坐标,而getLocation()
内部实现是通过调用Director::getInstance()->convertToGL(_point);
返回GL坐标。
此外,关于世界坐标系和本地坐标系的相互转换,在Node中定义了以下四个常用的坐标变换的相关方法。
// 把世界坐标转换到当前节点的本地坐标系中
Point convertToNodeSpace(
const
Point& worldPoint)
const
;
// 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToWorldSpace(
const
Point& nodePoint)
const
;
// 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToNodeSpaceAR(
const
Point& worldPoint)
const
;
// 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中
Point convertToWorldSpaceAR(
const
Point& nodePoint)
const
;
下面通过一个例子来说明这四个方法的理解和作用:
auto *sprite1 = Sprite::create(
"HelloWorld.png"
);
sprite1->setPosition(ccp(20,40));
sprite1->setAnchorPoint(ccp(0,0));
this
->addChild(sprite1);
//此时添加到的是世界坐标系,也就是OpenGL坐标系
auto *sprite2 = Sprite::create(
"HelloWorld.png"
);
sprite2->setPosition(ccp(-5,-20));
sprite2->setAnchorPoint(ccp(1,1));
this
->addChild(sprite2);
//此时添加到的是世界坐标系,也就是OpenGL坐标系
//将 sprite2 这个节点的坐标ccp(-5,-20) 转换为 sprite1节点 下的本地(节点)坐标系统的 位置坐标
Point point1 = sprite1->convertToNodeSpace(sprite2->getPosition());
//将 sprite2 这个节点的坐标ccp(-5,-20) 转换为 sprite1节点 下的世界坐标系统的 位置坐标
Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
log
(
"position = (%f,%f)"
,point1.x,point1.y);
log
(
"position = (%f,%f)"
,point2.x,point2.y);
运行结果:
Cocos2d: position = (-25.000000,-60.000000)
Cocos2d: position = (15.000000,20.000000)
其中:Point point1 = sprite1->convertToNodeSpace(sprite2->getPosition());
相当于sprite2
这个节点添加到(实际没有添加,只是这样理解)sprite1
这个节点上,那么就需要使用sprite1
这个节点的节点坐标系统,这个节点的节点坐标系统的原点在(20,40),而sprite1
的坐标是(-5,-20),那么经过变换之后,sprite1
的坐标就是(-25,-60)。
其中:Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
此时的变换是将sprite2
的坐标转换到sprite1
的世界坐标系下,而其中世界坐标系是没有变化的,始终都是和OpenGL等同,只不过sprite2
在变换的时候将sprite1
作为了”参照“而已。所以变换之后sprite2
的坐标为:(15,20)。
原地址:http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/coordinate-system/zh.md
- ConvertToNodeSpace和convertToWorldSpace函数的应用
- ConvertToNodeSpace和convertToWorldSpace函数的应用
- cocos2dx convertToNodeSpace和convertToWorldSpace
- convertToNodeSpace和convertToWorldSpace
- convertToNodeSpace和convertToWorldSpace
- cocos2d-x convertToWorldSpace和convertToNodeSpace
- cocos2d-x convertToWorldSpace和convertToNodeSpace
- cocos2d-x convertToWorldSpace和convertToNodeSpace
- 坐标系(下) convertToNodeSpace和convertToWorldSpace
- convertToWorldSpace convertToNodeSpace
- cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用
- cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用
- cocos2dx 举例说明 convertToNodeSpace 与 convertToWorldSpace 的使用
- convertToWorldSpace与convertToNodeSpace
- cocos2dx 坐标之convertToNodeSpace、convertToWorldSpace、convertToNodeSpaceAR、convertToWorldSpaceAR区别和用法
- 【COCOS2DX-游戏开发之三一】之 坐标系(下) convertToNodeSpace和convertToWorldSpace
- 【COCOS2DX-游戏开发之三一】之 坐标系(下) convertToNodeSpace和convertToWorldSpace
- 坐标系转换之convertToNodeSpace 与 convertToWorldSpace
- led58k280j电视刷机
- android:windowSoftInputMode
- 使用NLPIR汉语分词工具进行中文分词(java语言)
- 关于集群、负载均衡、分布式的区别
- geohash 周边查询
- ConvertToNodeSpace和convertToWorldSpace函数的应用
- 生日提醒功能(oracle)
- 处理FTP成功上传的判断
- Win7 局域网打印机共享设置
- android真机测试问题
- 基于HTML5 Canvas和jQuery 的画图工具的实现
- DropDownList控件不触发SelectedIndexChanged事件(转)
- 牛人东西
- git 设置代理