【问题标题】:Show end screen after collision detection碰撞检测后显示结束屏幕
【发布时间】:2015-01-02 12:41:45
【问题描述】:

在我的第一个精灵(松鼠)和我的第二个精灵(橡子/坚果)发生碰撞后,我正在尝试创建 GameOverScene。现在,当两个精灵碰撞时,松鼠刚刚从屏幕上掉下来。我希望松鼠从屏幕上掉下来,但会弹出一个结束屏幕。这是我目前所拥有的:

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

    [self initializeStartGameLayer];
    [self initializeGameOverLayer];

    _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];

    SKAction *wait = [SKAction waitForDuration:3.0];

    SKAction *createSpriteBlock = [SKAction runBlock:^{
        SKSpriteNode *lightnut = [SKSpriteNode     spriteNodeWithImageNamed:@"lightnut.png"];
        BOOL heads = arc4random_uniform(100) < 50;
        lightnut.position = (heads)? CGPointMake(257,600) : CGPointMake(50,600);

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

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

        lightnut.physicsBody.affectedByGravity = NO;

        self.physicsWorld.contactDelegate = self;

        [self addChild: lightnut];

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

    SKAction *waitThenRunBlock = [SKAction sequence:@[wait,createSpriteBlock]];

    [self runAction:[SKAction repeatActionForever:waitThenRunBlock]];

}
return self;
}

我尝试使用教程从以下页面制作结束和开始屏幕:http://mytechspace.com/2014/02/tutorial-how-to-develop-flappy-bird-game-in-ios-using-spritekit-part2-of-2.html,但我的开始或结束屏幕都没有出现(我不确定是什么阻止了它)。

这是我的联系委托方法:

-(void)didBeginContact:(SKPhysicsContact *)contact
{ 

SKPhysicsBody *firstBody, *secondBody;

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

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

}

谢谢!

【问题讨论】:

标签: ios ios7 sprite-kit collision-detection skphysicsbody


【解决方案1】:
-(void)didBeginContact:(SKPhysicsContact *)contact
{
    SKPhysicsBody *firstBody, *secondBody;

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

    if(firstBody.categoryBitMask == squirrelHitCategory || secondBody.categoryBitMask == nutHitCategory)
    {
        [self gameOver];
    }
}

- (void)gameOver
{
    GameOverScene *gameOverScene = [GameOverScene sceneWithSize:self.size];
    [self.view presentScene:gameOverScene transition:[SKTransition pushWithDirection:SKTransitionDirectionLeft duration:0.5]];
}

【讨论】:

  • 太棒了,谢谢!出于某种原因,即使我认为我声明了它,它仍然给我错误“使用未声明的标识符'GameOverScene'”,你碰巧知道如何正确声明它吗?
  • 是的,我有一个 GameOverScene.m 和 GameOverScene.h,我应该在其中声明它们吗?
  • 你应该创建导航控制器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多