2015-10-20 99 views
1

我有一個Sprite Kit遊戲,首先顯示一個菜單屏幕。當你點擊屏幕上的任何地方時,遊戲就會開始。我正在顯示iAd的。我遇到的問題是,當用戶點擊iAd橫幅查看添加時,GameScene會響應點按並開始遊戲。理想情況下,我希望檢測到觸摸是在iAd橫幅上,而不是在這種情況下啓動遊戲。檢測並忽略觸摸iAd橫幅

GameScene.m

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

    // I dont want to start game if the touch was on the iAd Banner 
    NSLog(@"Touch detected - Start the game...."); 

    [self startGame]; 
} 
+0

啓動遊戲的代碼是什麼? – Alistra

+0

我省略了它,因爲它不認爲它增加了任何問題。更新後。 – MikeJ

回答

3

改爲使用UITapGestureRecognizer。檢查是否recognizer.view != adBanner

+0

SpriteKit場景通常使用觸摸方法。您可以在那裏使用UITapGestureRecognizer,但是如果您添加它們,請考慮性能 – SnowMax

+0

謝謝。我在didMoveToView方法中設置了UITapGestureRecognizer,並用自定義handleTap方法替換了touchesDetected。由於手勢僅在視圖上註冊,因此在點擊iAd標題時未檢測到,因此無需執行recognitionizer.view!= adBanner – MikeJ

-1

一種選擇是檢查位置。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // get location 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 

    // check position 
    if (CGRectContainsPoint(self.adBanner.frame, location) { 
     // start game 

    } 
} 
+0

由於返回的位置與iAd橫幅有關,而不是整體視圖 – MikeJ

+1

您不必使用靜態位置,因此在這種情況下看起來不起作用。我添加了一個動態版本。 – SnowMax

0

您是否嘗試過使SKView在GameViewController中更小?

嘗試使

yourScene.size = CGSize(skView.bounds.size.width, skView.bounds.size.height-heightOfiAdBanner) 

變化heightOfiAdBanner與iAd的橫幅的實際高度。然後將場景定位在正確的位置(取決於顯示橫幅的位置)。請記住使用

yourScene.size = skView.bounds.size 

當您刪除橫幅。有了這個解決方案,你不必使用任何手勢識別器。