2

同じ位置に 2 つのボタンを配置して、SpriteKit でシーンを一時停止および一時停止解除したいと考えています。シーンの実行中に「一時停止」ボタンを表示したい。シーンが一時停止している間、「一時停止」ボタンを非表示にして「再生」ボタンを表示したいと考えています。self.scene.view.pausedSpriteKitでは、SpriteKit で定義されているものを使用できます。

私のコード:

@implementation MyScene {

SKSpriteNode *PauseButton;
SKSpriteNode *PlayButton;

}

-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {

[self Pause];

}
return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */

UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];

SKNode * Node = [self nodeAtPoint:location];

if([Node.name isEqualToString:@"PauseButton"]){

    self.scene.view.paused = YES;

    [PauseButton removeFromParent];
    [self Resume];
}

if([Node.name isEqualToString:@"PlayButton"]){

    self.scene.view.paused = NO;

    [PlayButton removeFromParent];
    [self Pause];
}
}

-(void)Pause{

PauseButton = [SKSpriteNode spriteNodeWithImageNamed:@"Pause.png"];
PauseButton.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 1.04);
PauseButton.zPosition = 3;
PauseButton.size = CGSizeMake(40, 40);
PauseButton.name = @"PauseButton";

[self addChild:PauseButton];

}

-(void)Resume{

PlayButton = [SKSpriteNode spriteNodeWithImageNamed:@"Play.png"];
PlayButton.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 1.04);
PlayButton.zPosition = 3;
PlayButton.size = CGSizeMake(60, 60);
PlayButton.name = @"PlayButton";
[self addChild:PlayButton];

}

シーンを一時停止しますが、一時停止ボタンがまだあり、もう一度一時停止ボタンをタッチすると、シーンが再開されます。したがって、画像だけが変更されることはありません。どうすればこれを修正できますか?

4

1 に答える 1

6

SKView が一時停止している間は、ボタン (またはシーン内の他のもの) を更新することはできません。メソッドでは、touchesBeganボタンを更新する前にビューを一時停止しています (順序の変更は機能しません)。ゲームを一時停止する前にボタンが更新されるように、実行ループに戻る必要があります。これを行う1つの方法は次のとおりです。

これにより、少し遅れてビューを一時停止するメソッドが呼び出されます。[self Resume]これを のステートメントの後に追加しtouchesBegan、 を削除しself.scene.view.paused = YESます。

    [self performSelector:@selector(pauseGame) withObject:nil afterDelay:1/60.0];

このメソッドは、SKView を一時停止します。これを MyScene.m に追加します

- (void) pauseGame
{
    self.scene.view.paused = YES;
}
于 2014-09-01T20:29:55.970 に答える