在ios游戏中添加开始和结束屏幕

时间:2014-11-16 04:22:55

标签: ios objective-c sprite-kit

我的游戏开始暂停时遇到问题,因此玩家必须按下按钮才能启动游戏。我也有碰撞检测工作,所以当两个物体碰撞时,它们就会脱离屏幕。这是我目前的代码:

- (instancetype)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
    self.physicsWorld.contactDelegate = self;
    [self buildBackground];
    [self startScrolling];

    _firstPosition = CGPointMake(self.frame.size.width * 0.817f, self.frame.size.height * .40f);
    _squirrelSprite = [SKSpriteNode spriteNodeWithImageNamed:@"squirrel"];
    _squirrelSprite.position = _firstPosition;
    _atFirstPosition = YES;

    _squirrelSprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:10];
    _squirrelSprite.physicsBody.categoryBitMask = squirrelHitCategory;
    _squirrelSprite.physicsBody.contactTestBitMask = nutHitCategory;
    _squirrelSprite.physicsBody.collisionBitMask =  nutHitCategory;

    _squirrelSprite.physicsBody.affectedByGravity = NO;

    self.physicsWorld.contactDelegate = self;

    [self addChild:_squirrelSprite];

    // Declare SKAction that waits 2 seconds
    SKAction *wait = [SKAction waitForDuration:3.0];

    // Declare SKAction block to generate the sprites
    SKAction *createSpriteBlock = [SKAction runBlock:^{
        const BOOL isHeads   = arc4random_uniform(100) < 50;
        NSString* spriteName = isHeads ? @"lightnut.png" : @"darknut.png";
        SKSpriteNode *nut    = [SKSpriteNode spriteNodeWithImageNamed:spriteName];
        BOOL heads = arc4random_uniform(100) < 50;
        nut.position = (heads)? CGPointMake(257,600) : CGPointMake(50,600);

        nut.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(200,160)];

        nut.physicsBody.categoryBitMask = nutHitCategory;
        nut.physicsBody.contactTestBitMask = squirrelHitCategory;
        nut.physicsBody.collisionBitMask =  squirrelHitCategory;

        nut.physicsBody.affectedByGravity = NO;

        self.physicsWorld.contactDelegate = self;

        [self addChild: nut];

        SKAction *moveNodeUp = [SKAction moveByX:0.0 y:-700.0 duration:1.3];
        [nut runAction: moveNodeUp];
    }];

    // Combine the actions
    SKAction *waitThenRunBlock = [SKAction sequence:@[wait,createSpriteBlock]];

    // Lather, rinse, repeat
    [self runAction:[SKAction repeatActionForever:waitThenRunBlock]];

}
return self;
}

我的触动开始:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if (_atFirstPosition)
{
    SKAction *moveNodeLeft = [SKAction moveByX:-207.8 y:0.0 duration:0.85];
    [_squirrelSprite runAction: moveNodeLeft withKey:@"moveleft"];
} else {
    SKAction *moveNodeRight = [SKAction moveByX:207.8 y:0.0 duration:0.85];
    [_squirrelSprite runAction: moveNodeRight withKey:@"moveright"];
}
_atFirstPosition = !_atFirstPosition;
_squirrelSprite.xScale *= -1.0;
}

最后,我的didBeginContact:

 -(void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;

firstBody = contact.bodyA;
secondBody = contact.bodyB;

if(firstBody.categoryBitMask == squirrelHitCategory || secondBody.categoryBitMask == nutHitCategory)
{

}
}

过去两周我一直试图解决这个问题,我已经阅读了很多教程和代码,用简单的开始按钮和结束屏幕开始游戏,但没有任何效果。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我会使用导航控制器并在根视图上设置您的开始按钮,然后按下该按钮推送一个呈现游戏的视图控制器。