Как получить доступ к UITouch locationInWindow координаты - PullRequest
2 голосов
/ 11 февраля 2012

Я использую Cocos2D для разработки мини-игры для iPhone. Я хотел обнаружить прикосновение спрайта.Для этого я решил не создавать подкласс класса CCSprite, а вместо этого использовать сенсорные события в классе слоя:

-(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.)позиция касания (это то, что я хочу).

Я пытался получить доступ к locationInWindow, но для него нет метода получения.Как я могу это сделать?

Большое спасибо и наилучшие пожелания

1 Ответ

5 голосов
/ 11 февраля 2012

Окно является UIWindow, который является UIView подклассом. Дополнительно UITouch имеет свойство window. Так что вы можете попробовать:

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

Преобразование данных вида в расчет; Так что вы также можете попробовать self.superview для параметра.

...