2016-02-16 2 views
-1

Я делаю свою вторую игру на XCode и, похоже, что-то не так с кодом. Это космическая шутерская игра, в которой игровое поле следует за вашим пальцем, и вы нажимаете, чтобы выпустить ракету. Проблема в том, что ... когда я нажимаю «начать игру», все скрыто и не будет всплывать. Вот мой viewcontroller.h и viewcontroller.mНеизвестная ошибка в игре (XCode)

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

int score; 
int lives; 
int enemyAttackOccurence; 
int enemyPosition; 
int randomSpeed; 
float enemySpeed; 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

@implementation PlayViewController 

-(void)viewDidAppear:(BOOL)animated { 

    // Images that are to be hidden 
    playerShip.hidden = YES; 
    enemyShip.hidden = YES; 
    missile.hidden = YES; 
    earth.hidden = YES; 

    // Hidden Labels 
    scoreLabel.hidden = YES; 
    livesLabel.hidden = YES; 

    // Set score and lives remaining 
    score = 0; 
    lives = 0; 

    // Strings 
    scoreString = [NSString stringWithFormat:@"Score: 0"]; 
    liveString = [NSString stringWithFormat:@"Lives: 0"]; 

    // Initial Label Text 
    scoreLabel.text = scoreString; 
    livesLabel.text = liveString; 

    // Image starting positions 
    playerShip.center = CGPointMake(150, 658); 
    enemyShip.center = CGPointMake(175, 20); 
    missile.center = CGPointMake(playerShip.center.x, playerShip.center.y); 

} 

-(IBAction)startGame:(id)sender { 

    // Hide buttons 
    startButton.hidden = YES; 
    exitButton.hidden = YES; 

    // Images to show 
    playerShip.hidden = NO; 
    enemyShip.hidden = NO; 
    earth.hidden = NO; 

    // Labels 
    scoreLabel.hidden = NO; 
    livesLabel.hidden = NO; 

    [self positionEnemy]; 

} 

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

} 

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

    touch = [touches anyObject]; 
    CGPoint point = [touch locationInView:self.view]; 

    playerShip.center = CGPointMake(point.x, playerShip.center.y); 

} 

-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { 
    [missileMovementTimer invalidate]; 
    missile.hidden = NO; 
    missile.center = CGPointMake(playerShip.center.x, playerShip.center.y); 

    missileMovementTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(missileMovement) userInfo:nil repeats:YES]; 

} 

-(void)positionEnemy { 

    // Random enemy position 
    enemyPosition = arc4random() % 249; 
    enemyPosition = enemyPosition + 20; 

    // Enemy Image Location 
    enemyShip.center = CGPointMake(enemyPosition, -40); 

    // Set enemy speed 
    randomSpeed = arc4random() % 3; 
    switch (randomSpeed) { 
     case 0: 
      enemySpeed = 0.03; 
      break; 
     case 1: 
      enemySpeed = 0.02; 
      break; 
     case 2: 
      enemySpeed = 0.01; 

     default: 
      break; 
    } 

    enemyAttackOccurence = arc4random() % 5; 
    [self performSelector:@selector(enemyMovementTimerMethod) withObject:nil afterDelay:enemyAttackOccurence]; 

} 

-(void)enemyMovementTimerMethod { 

    enemyMovementTimer = [NSTimer scheduledTimerWithTimeInterval:enemySpeed target:self selector:@selector(enemyMovement) userInfo:nil repeats:YES]; 


} 

-(void)enemyMovement { 

    enemyShip.center = CGPointMake(enemyShip.center.x, enemyShip.center.y + 2); 

    if (CGRectIntersectsRect(enemyShip.frame, earth.frame)) { 

     lives = lives - 1; 
     liveString = [NSString stringWithFormat:@"Lives: %i", lives]; 
     livesLabel.text = liveString; 

     // Stop Enemy Moving 
     [enemyMovementTimer invalidate]; 

     if (lives > 0) { 
      [self positionEnemy]; 
     } 
     if (lives == 0) { 
      [self gameOver]; 
     } 

    } 

} 

-(void)missileMovement { 

    missile.hidden = NO; 
    missile.center = CGPointMake(missile.center.x, missile.center.y - 2); 

    if (CGRectIntersectsRect(missile.frame, enemyShip.frame)) { 
     score = score + 1; 
     scoreString = [NSString stringWithFormat:@"Score: %i", score]; 
     scoreLabel.text = scoreString; 
     // Stop missile 
     [missileMovementTimer invalidate]; 
     // Position missile to be at the playerShip's center 
     missile.center = CGPointMake(playerShip.center.x, playerShip.center.y); 
     missile.hidden = YES; 
     // Stop enemy movement 
     [enemyMovementTimer invalidate]; 
     [self positionEnemy]; 
    } 

} 

-(void)gameOver { 

    [enemyMovementTimer invalidate]; 
    [missileMovementTimer invalidate]; 
    [self performSelector:@selector(gameReplay) withObject:nil afterDelay:3]; 

} 

-(void) gameReplay { 

    // Images that are to be hidden 
    playerShip.hidden = YES; 
    enemyShip.hidden = YES; 
    missile.hidden = YES; 
    earth.hidden = YES; 

    // Hidden Labels 
    scoreLabel.hidden = YES; 
    livesLabel.hidden = YES; 

    // Set score and lives remaining 
    score = 0; 
    lives = 0; 

    // Strings 
    scoreString = [NSString stringWithFormat:@"Score: 0"]; 
    liveString = [NSString stringWithFormat:@"Lives: 0"]; 

    // Initial Label Text 
    scoreLabel.text = scoreString; 
    livesLabel.text = liveString; 

    // Image starting positions 
    playerShip.center = CGPointMake(150, 658); 
    enemyShip.center = CGPointMake(175, 20); 
    missile.center = CGPointMake(playerShip.center.x, playerShip.center.y); 

} 

@end 

ViewController.h (Просто для резервного копирования)

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

    IBOutlet UIButton *startGame; 

} 

@end 
@interface PlayViewController : UIViewController { 

    IBOutlet UIImageView *playerShip; 
    IBOutlet UIImageView *enemyShip; 
    IBOutlet UIImageView *missile; 
    IBOutlet UIImageView *earth; 

    IBOutlet UILabel *livesLabel; 
    IBOutlet UILabel *scoreLabel; 

    IBOutlet UIButton *startButton; 
    IBOutlet UIButton *exitButton; 

    UITouch *touch; 

    NSString *liveString; 
    NSString *scoreString; 

    NSTimer *enemyMovementTimer; 
    NSTimer *missileMovementTimer; 

} 

-(IBAction)startGame:(id)sender; 

@end 

Я смотрю учебник для этого игра, созданный человек не отвечает. Пожалуйста, помогите - я не могу быть более конкретным. Это просто должен быть странный пробел в коде. Благодарю.

ответ

0

Я бы рекомендовал испортить ваши строки кода, где вы устанавливаете object.hidden = YES и object.hidden = НЕТ и посмотреть, что произойдет. Часто время подделывать и тестировать ваш код - хороший способ увидеть, что происходит. Убедитесь, что для UIImageViews установлены изображения. Я предполагаю, что они установлены в вашем построителе интерфейса, потому что я не вижу, где вы их устанавливаете в своем коде. Если для UIImageViews нет изображения, оно будет прозрачным, если не будет задан определенный цвет. Если фальсификация кода не работает, это не повредит повторному просмотру учебника и убедитесь, что вы ничего не испортили. Часто время, которое мы смотрим, устарело, и нам остается решать небольшую проблему самостоятельно, и это может быть или не быть одним из этих случаев. Опять же, проверьте свой код и посмотрите, действительно ли на самом деле установлено скрытое или нет, когда вы нажимаете эту кнопку.

+0

Хорошо, я буду работать с объектными скрытыми линиями и попробовать разобраться. Благодарю. – Remain

+0

Я не совсем уверен, но я думаю, что моя проблема частично возникает, когда я нажимаю кнопку начала игры – Remain

1

Кроме того, у вас есть кнопка IBOutlet и IBAction для вашей кнопки StartGame. IBOutlet, который вы никогда не используете. Вы можете ввести в заблуждение свой компилятор, имея одно и то же имя для IBOutlet и IBAction UIButton. Удалите IBOutlet или измените имя правильно и посмотрите, не изменит ли это что-либо.

+0

как раз вовремя, когда я это заметил, спасибо. Позвольте мне посмотреть, исправляет ли она проблему. – Remain

+0

Исправлена ​​ошибка с удалением некоторых ненужных точек. Благодарю. – Remain

+0

Нет проблем! Рад, что это сработало –

Смежные вопросы