2013-02-08 30 views
0

我正在創建一個簡單的遊戲,但遇到了一些代碼問題。遊戲的工作方式是有兩個球。一個是敵人,一個是玩家。每5秒遊戲就會將難度提高到一個新的水平。我當前的代碼是here,以下複製:替代等級難度

// 
// ViewController.m 
// BakerBattle 
// 
// Created by Cole Bergmann on 2/6/13. 
// Copyright (c) 2013 Cole Bergmann. All rights reserved. 
// 

#import "ViewController.h" 
#import "SecondView.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    //(X speed, Y speed) vvv 
    pos = CGPointMake(6,5); 
    [three setHidden:YES]; 
    [two setHidden:YES]; 
    [one setHidden:YES]; 
    [go setHidden:YES]; 
    [level1 setHidden:YES]; 
    [level2 setHidden:YES]; 
    [level3 setHidden:YES]; 
} 

-(IBAction)start { 
    [startbutton setHidden:YES]; 
    [logo setHidden:YES]; 
    [instructions setHidden:YES]; 
    [self performSelector:@selector(three) withObject:nil afterDelay:0.5]; 

} 

-(void)three { 
    [three setHidden:NO]; 
    [self performSelector:@selector(two) withObject:nil afterDelay:0.5]; 
} 

-(void)two { 
    [two setHidden:NO]; 
    [self performSelector:@selector(one) withObject:nil afterDelay:0.5]; 
} 

-(void)one { 
    [one setHidden:NO]; 
    [self performSelector:@selector(go) withObject:nil afterDelay:0.5]; 
} 

-(void)go { 
    [go setHidden:NO]; 
    [self performSelector:@selector(gamestart) withObject:nil afterDelay:0.5]; 
} 

-(void)gamestart { 
    [level1 setHidden:NO]; 
    [three setHidden:YES]; 
    [two setHidden:YES]; 
    [one setHidden:YES]; 
    [go setHidden:YES]; 
    [logo setHidden:YES]; 
    pos = CGPointMake(6,5); 
    randomMain = [NSTimer scheduledTimerWithTimeInterval:(0.03) target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 
    [self performSelector:@selector(difficulty2) withObject:nil afterDelay:5.0]; 
} 

-(void)onTimer { 
    [self checkCollision]; 

    enemy.center = CGPointMake(enemy.center.x+pos.x,enemy.center.y+pos.y); 
    if (enemy.center.x > 320 || enemy.center.x < 0) 
     pos.x = -pos.x; 
    if (enemy.center.y > 480 || enemy.center.y < 0) 
     pos.y = -pos.y; 
} 

-(void)checkCollision { 
    if(CGRectIntersectsRect(player.frame,enemy.frame)) 
    { 
     [randomMain invalidate]; 
     [startbutton setHidden:NO]; 
     [logo setHidden:NO]; 
     [three setHidden:YES]; 
     [two setHidden:YES]; 
     [one setHidden:YES]; 
     [go setHidden:YES]; 
     [level1 setHidden:YES]; 
     [level2 setHidden:YES]; 
     [level3 setHidden:YES]; 
     [instructions setHidden:NO]; 

     CGRect frame = [player frame]; 
     frame.origin.x = 137.0f; 
     frame.origin.y = 326.0; 
     [player setFrame:frame]; 

     CGRect frame2 = [enemy frame]; 
     frame2.origin.x = 137.0f; 
     frame2.origin.y = 20.0; 
     [enemy setFrame:frame2]; 

     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You Lost!" message:[NSString stringWithFormat:@"Baker Cat stole your dough!"] delegate:nil cancelButtonTitle:@"I want a rematch!" otherButtonTitles:nil]; 
     [alert show]; 
    } 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *myTouch = [[event allTouches] anyObject]; 
    player.center = [myTouch locationInView:self.view]; 
} 

//##################################-[DIFFICULTY LEVELS]-##############################################\\ 

-(void)difficulty2 { 
    [level1 setHidden:YES]; 
    pos = CGPointMake(10,8); 
    [self performSelector:@selector(difficulty3) withObject:nil afterDelay:5.0]; 
    [level2 setHidden:NO]; 

} 

-(void)difficulty3 { 
    [level2 setHidden:YES]; 
    pos = CGPointMake(14,10); 
    [self performSelector:@selector(win) withObject:nil afterDelay:5.0]; 
    [level3 setHidden:NO]; 

} 

-(void)win { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You Won!" message:[NSString stringWithFormat:@"You defeated Baker Cat!"] delegate:nil cancelButtonTitle:@"Play Again" otherButtonTitles:nil]; 
    [alert show]; 
    [randomMain invalidate]; 
    [startbutton setHidden:NO]; 
    [logo setHidden:NO]; 
    [instructions setHidden:NO]; 
    [three setHidden:YES]; 
    [two setHidden:YES]; 
    [one setHidden:YES]; 
    [go setHidden:YES]; 
    [level1 setHidden:YES]; 
    [level2 setHidden:YES]; 
    [level3 setHidden:YES]; 

    CGRect frame = [player frame]; 
    frame.origin.x = 137.0f; 
    frame.origin.y = 326.0; 
    [player setFrame:frame]; 

    CGRect frame2 = [enemy frame]; 
    frame2.origin.x = 137.0f; 
    frame2.origin.y = 20.0; 
    [enemy setFrame:frame2]; 
} 

@end 

,如果有人知道的另一種方法來定義的水平我想知道。基本上,不同級別必須做的唯一事情是pos = CGPointMake(10,8);並將我的levelText更改爲遊戲所在的級別。

我現在使用的問題是,如果玩家輸了,水平不會被重置。例如,如果有人死於2級,他們會得到死亡信息並轉到標題屏幕,但在屏幕頂部顯示「3級」後不久,併發送消息說明玩家贏了。任何幫助,將不勝感激。

+0

謝謝!工作很棒! – user1542348

+0

不知道您是否與我說話,但如果是這樣,您可以讓其他人知道答案可以解決您的問題,或通過點擊旁邊的複選標記來回答您的問題。 –

回答

0

您在延遲後執行選擇器,但從不取消這些選擇器。你有很多不同的方法名,所以用選擇器取消可能是不可行的,所以一個更快的解決方案(可能有更多的副作用)是將以下代碼添加到終止遊戲狀態的任何方法(並且可能轉換到新級別):

[NSObject cancelPreviousPerformRequestsWithTarget:self]; 

如果您需要取消選擇器查看+cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument]