在缩放视图上获取触摸位置的不同x和y坐标

时间:2013-09-13 18:27:57

标签: cocos2d-iphone touch zoom

我正在使用Cocos2d来开发游戏。我需要能够在必要时进行平移和缩放,因此我将CCLayerPanZoom扩展添加到我的项目中。最近我注意到了缩放图层的问题。问题是如果我在进行缩放或平移之前触摸缩放平移层,我会得到正确的x,y坐标。但是如果我缩放图层,触摸的位置坐标与之前的坐标不同。以下是我获取触摸位置的方法:

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        UITouch *touch=[touches anyObject];
        CGPoint touchedLocation=[touch locationInView:touch.view];
        touchedLocation=[[CCDirector sharedDirector] convertToGL:startPoint];
}

您可能会问我如何确定缩放前后两点是否不同。我有一个精灵位于视图中的预定点。当我触摸精灵时,我记录了精灵和触摸位置的位置。在缩放之前,这些点几乎相同,只有几个单位的x和y差异。但是在缩放之后它们是完全不同的点,我猜这个差异与缩放比例成正比。我不想在缩放前后询问如何使触摸位置相同,我想在这种情况下询问我应该做些什么。

1 个答案:

答案 0 :(得分:0)

好吧,我终于搞到了我的错误。我忘记了这样一个事实:当我在一个图层上添加一个精灵然后引用它的位置时,它总是显示相同的点。因此,例如,如果我添加一个精灵并将其位置设置为100,100然后平移或缩放图层并最终得到精灵的位置我仍将得到100,100,即使精灵不在该范围内屏幕暂时。因此,当我在平移或缩放图层后触摸精灵时,我触摸到不同的位置,而不是100,100。这让我感到困惑。为了解决这个问题,我只是从触摸位置的x,y中减去了图层位置的x,y。通过这种方式,我可以得到两个点 - 精灵的位置和触摸的位置 - 是相同的。  注意:图层的锚点是ccp(0,0);