2012-02-11 37 views
2

我使用的Cocos2D开发一个迷你iPhone游戏..我想检测精灵的触摸。要做到这一点,我决定不子类CCSprite类,而是使用层类的触摸事件:如何访问UITouch locationInWindow坐标

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CCLOG(@"touch began..."); 
    CCSprite *particularSprite = [self getChildByTag:artSprite]; 
    CCNode *nodeClass = (CCNode*) particularSprite; 
    CGRect DesiredSprite = CGRectMake(nodeClass.positionInPixels.x, nodeClass.positionInPixels.y,particularSprite.contentSize.width , particularSprite.contentSize.height); 

    for (UITouch *myTouch in touches) { 
     CGPoint touchPosition = [myTouch locationInView: [myTouch view]]; 
     if(CGRectContainsPoint(DesiredSprite ,touchPosition)) 
     { 
      CCLOG(@"Sprite touched"); 
     } 
    } 
} 

不幸的是,坐标是错误的。 locationInView翻译它不同。我正在使用landscapeleft视图(kCCDeviceOrientationLandscapeLeft)。

添加的功能,断点,看的myTouch变量,然后我看到,它有一个名为locationInWindow成员变量,它反映了实际触摸位置(这是我想要的)。

我试图访问到locationInWindow但它没有getter方法。我该怎么做?

非常感谢和诚挚的问候

回答

5

窗口是一个UIWindow这是一个UIView子类。此外UITouchwindow属性。所以你可以尝试:

CGPoint touchPosition = [myTouch locationInView:myTouch.window]; 

视图的变换数字到计算中;所以你可能也想尝试self.superview作为参数。

+0

您好,感谢,这也帮助..我不得不转换位置交换X到Y的景观视野的..想知道是否有一个自动化的方式来做到这一点。我没有使用boundingBox的矩形比较针对如如先前创建完成一个矩形不是精确(它不与x中的原点和y作为SPRIE创建)。谢谢 :)! – mm24 2012-02-11 18:37:04

+2

同时,文档指出,你可以通过'nil'获得窗口坐标。 – 2013-02-12 23:13:17