2014-11-07 3 views
0

"App App Purchase (iAd 제거) 기능을 갖춘 완벽한 기능 코드는 여기에 있습니다.하지만 MyScene (SpriteKit) 게임에서 구현해야합니다. 여기 있습니다. 이 강아지까지 메시지를 작동하는 전체 코드를 만들있는 UIButton를 누를 때 여기 In App 구매 (광고 제거) 스프라이트 키트

#import <UIKit/UIKit.h> 
#import <SpriteKit/SpriteKit.h> 

#import <iAd/iAd.h> 

@interface ViewController : UIViewController<ADBannerViewDelegate> 

@property (nonatomic,strong) NSArray*products; 

@property(nonatomic,strong)NSUserDefaults*defaults; 

- (IBAction)removeAdvertisment:(id)sender; 
@end 

ViewController.h

가 나타나고 제거 할 수 있습니다 플레이어가 구입하여 추가 내 ViewController.m

#import "ViewController.h" 

#import "MyScene.h" 

#import <StoreKit/StoreKit.h> 

@implementation ViewController 

@synthesize /*idBanner*/ products,defaults; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    //Configure the view. 
    SKView * skView = (SKView *)self.view; 
    skView.showsFPS = YES; 
    skView.showsNodeCount = YES; 

    // Create and configure the scene. 
    SKScene * scene = [MyScene sceneWithSize:skView.bounds.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 

    // Present the scene. 
    [skView presentScene:scene]; 


    [[SKPaymentQueue defaultQueue]addTransactionObserver:(id)self]; 

    defaults =[NSUserDefaults standardUserDefaults]; 

    BOOL isPro=[defaults boolForKey:@"isPro"]; 



    if (!isPro) { 
     //user code here 
     [self fetchProducts]; 
    } 

    else 
    { 
     //iadBanner.alpha=0.0; 

    } 

} 

-(void)bannerViewDidLoadAd:(ADBannerView *)banner{ 

     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:1]; 
     [banner setAlpha:1]; 
     [UIView commitAnimations]; 

} 

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:1]; 
    [banner setAlpha:0]; 
    [UIView commitAnimations]; 
} 

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } else { 
     return UIInterfaceOrientationMaskAll; 
    } 
} 

-(void)fetchProducts{ 
    SKProductsRequest*request = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithArray:@[@"ProductIDPurchaseID"]]]; 
    request.delegate = (id)self; 
    [request start]; 
} 

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 
    products = response.products; 
    NSLog(@"The app wass purchased"); 
} 
-(void)request:(SKRequest*)request didFailWithError:(NSError *)error{ 
    NSLog(@"%@",error); 
} 

-(void)buy:(SKProduct*)product{ 

    SKPayment *payment = [SKPayment paymentWithProduct:product]; 
    [[SKPaymentQueue defaultQueue]addPayment:payment]; 
} 

-(void)paymentQueue:(SKPaymentQueue*)queue updatedTransactions:(NSArray *)transactions{ 

    for (SKPaymentTransaction *tx in transactions) { 
     switch (tx.transactionState) { 
      case SKPaymentTransactionStatePurchased: 
       [[SKPaymentQueue defaultQueue]finishTransaction:tx]; 
       //_____________________ 
       //iadBanner.alpha=0.0; 
       //______________________ 

       [defaults setBool:YES forKey:@"isPro"]; 
       break; 

      case SKPaymentTransactionStateFailed: 
       [[SKPaymentQueue defaultQueue]finishTransaction:tx]; 
       NSLog(@"Error:%@",tx.error); 
       break; 


      case SKPaymentTransactionStateRestored: 
       [[SKPaymentQueue defaultQueue]finishTransaction:tx]; 
       break; 


      default: 
       break; 
     } 
    } 


} 

- (IBAction)removeAdvertisment:(id)sender { 

    SKProduct *prod = [products objectAtIndex:0]; 
    [self buy:prod]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 

} 


@end 

입니다

"광고를 제거"

이 방법은 정공 코드 일 수

  • (IBAction를) removeAdvertisment (ID) 송신기 {

    SKProduct의 자극 * = [제품 objectAtIndex : 0]; [자기 구매 : 찌르다]; }

하지만 내가 태어나 셨는 그래서 질문은 내가 MyScene 클래스에서 removeAdvertisement (버튼 위) 메소드를 호출 할 어떻게

SKScene

의 MyScene 클래스의 서브 클래스에서 호출 할 수 있습니다?

답변

0

당신의 SKScene

gameViewController= (UIViewController*)self.view.window.rootViewController; 
을 우르 SKScene에 같은

//.h 파일

@property UIViewController *gameViewController; 

//.h 파일

insilde의하는 .m 파일의 ViewController의 싱글을 만들

이제 UIViewController의 모든 공용 함수에

까지 액세스 할 수 있습니다. (무효) inAccess { _gameViewController = (의 UIViewController *) self.view -
[gameViewController removeAdvertisement(@"value")]; 
+0

그래서 그때 내가 그렇게 같은 MyScene.m 파일에 새로운 방법을 만들어 내 MyScene.h 파일의 ViewController의 싱글을 만들었습니다. window.rootViewController; [_gameViewController removeAdvertisement (@ "value")]]; }이 "inAccess"메서드를 "TouhchesBegins"에 넣고 싶지만이 코드 줄이 작동하지 않습니다. 컴파일러에서 인식하지 못하고 "expected '와 같은 어리석은 실수를합니다." "그리고" (@ "value") "는이 줄에 있음을 의미합니다 [gameViewController removeAdvertisement (@"value ")] ;? 무엇을 넣어야합니까? –

+1

미안, 내 실수 [gameViewController removeAdvertisement]; 여기서 removeAdvertisement는 뷰 컨트롤러에서 선언 한 public 함수입니다 – dragoneye

+0

답장을 보내 주셔서 감사합니다! 나는 당신의 제안을 후자를 시도하고, 나는 당신이 어쨌든 회신 upvoted! 희망이 작동하지만 어쨌든 도움을 시도해 주셔서 감사합니다. 그것이 작동하면 나는 당신에게 "답변"으로 다시 응답 해 주셔서 감사합니다. –