如何使用convertToWorldSpace计算触摸位置?

时间:2012-06-25 03:11:16

标签: objective-c cocos2d-iphone coordinates

我想将触摸位置转换为我的平铺游戏中的世界坐标。使用此代码,我点击屏幕右侧(以便我的角色走进平铺游戏,背景慢慢向左):

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    for( UITouch *touch in touches ) {
        CGPoint location = [touch locationInView: [touch view]];

        location = [[CCDirector sharedDirector] convertToGL: location];
        CGPoint test = [self convertToWorldSpace:location];

        CCLOG(@"test : %.2g", test.x);

test日志给了我:

  

50,72,1e + 02,6.6e + 02,4.2e + 02,(然后下降)3.2e + 02,9.5,-1.9e + 02等

有谁知道为什么? 我想计算触摸的“真实”坐标,以便我知道角色何时必须继续前进(点击其实际位置的右侧)或者他是否必须转身去向后。 (点击其实际位置的左侧

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这些打印的数字看起来不错,但您使用%g格式说明符,根据Apple's documentation对此主题进行说明:

  

64位浮点数(double),如果指数小于-4或大于或等于精度,则以%e的样式打印,否则为%f的样式。

除非那是你想要的,否则你应该使用%f代替,这不会产生科学记数法中的任何数字。

答案 1 :(得分:1)

您使用cocos2d所做的一切,都是在单个OpenGL视图中完成的。因此,如果您处理场景或具有场景大小的图层的触摸,则调用这些线

就足够了
    CGPoint location = [touch locationInView: [touch view]];
    location = [[CCDirector sharedDirector] convertToGL: location];

将触摸位置重新连接到屏幕上。 convertToWorldSpace只是将本地节点坐标转换为世界坐标