触摸点(Touch position)
所以在处理触摸事件时需要用重写以下四个函数:
1
2
3
4
|
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中定义了以下四个常用的坐标变换的相关方法。
1
2
3
4
5
6
7
8
9
10
11
|
Point
convertToNodeSpace( const Point&
worldPoint) const ;
Point
convertToWorldSpace( const Point&
nodePoint) const ;
Point
convertToNodeSpaceAR( const Point&
worldPoint) const ;
Point
convertToWorldSpaceAR( const Point&
nodePoint) const ;
|
下面通过一个例子来说明这四个方法的理解和作用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
auto
*sprite1 = Sprite::create( "HelloWorld.png" );
sprite1->setPosition(ccp(20,40));
sprite1->setAnchorPoint(ccp(0,0));
this ->addChild(sprite1);
auto
*sprite2 = Sprite::create( "HelloWorld.png" );
sprite2->setPosition(ccp(-5,-20));
sprite2->setAnchorPoint(ccp(1,1));
this ->addChild(sprite2);
Point
point1 = sprite1->convertToNodeSpace(sprite2->getPosition());
Point
point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
log ( "position
= (%f,%f)" ,point1.x,point1.y);
log ( "position
= (%f,%f)" ,point2.x,point2.y);
|
1
2
3
4
|
运行结果:
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 |