0

この投稿の時点では、XCode と SpriteBuilder の最新バージョンを使用しています。

私は 2 つのゲームを持っています。そのうちの 1 つは XCode で純粋に Objective-C を使用して構築され、もう 1 つは XCode と SpriteBuilder で Objective-C を使用して構築されています。SpriteBuilder 以外のゲームには、背景がゲーム内の背景と同じように見えるタップ トゥ プレイ画面があります。画面をタップするとすぐにゲームに入ります。

Sprite Builder ゲームは、スタート画面を実装しようとしているゲームです。http://www.reigndesign.com/blog/creating-a-simple-menu-with-scene-transition-in-cocos2d/のチュートリアルをいくつか読みましたが、役に立ちませんでした。異なる背景画像を使用して、ある画面から別の画面に移行したくありません。

これは、SpriteBuilder 以外のゲームで使用する開始画面です。

-(void)NewGame{
Bottom1.hidden = YES;
Bottom2.hidden = YES;
Bottom3.hidden = YES;
Bottom4.hidden = YES;
Bottom5.hidden = YES;
Bottom6.hidden = YES;
Bottom7.hidden = YES;
Top1.hidden = YES;
Top2.hidden = YES;
Top3.hidden = YES;
Top4.hidden = YES;
Top5.hidden = YES;
Top6.hidden = YES;
Top7.hidden = YES;
Obstacle.hidden = YES;
Obstacle2.hidden = YES;

Intro1.hidden = NO;
Intro2.hidden = NO;
Intro3.hidden = NO;

Heli.hidden = NO;
Heli.center = CGPointMake(31, 74);
Heli.image = [UIImage imageNamed:@"HeliUp.png"];

Start = YES;
ScoreNumber = 0;
Score.text = [NSString stringWithFormat:@"Score: 0"];
Intro3.text = [NSString stringWithFormat:@"High Score: %i", HighScore];

背景とイントロ ラベルを除いて、すべての障害物が非表示になります。ハイスコ​​アとタップして再生ボタンも表示されます。

画面をタップすると、これが次のコードです。

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

if (Start == YES) {

    Intro1.hidden = YES;
    Intro2.hidden = YES;
    Intro3.hidden = YES;

    timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(HeliMove) userInfo:nil repeats:YES];



    Scorer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(Scoring) userInfo:nil repeats:YES];

    Start = NO;

    Bottom1.hidden = NO;
    Bottom2.hidden = NO;
    Bottom3.hidden = NO;
    Bottom4.hidden = NO;
    Bottom5.hidden = NO;
    Bottom6.hidden = NO;
    Bottom7.hidden = NO;
    Top1.hidden = NO;
    Top2.hidden = NO;
    Top3.hidden = NO;
    Top4.hidden = NO;
    Top5.hidden = NO;
    Top6.hidden = NO;
    Top7.hidden = NO;
    Obstacle.hidden = NO;
    Obstacle2.hidden = NO;


    RandomPosition = arc4random() %75;
    RandomPosition = RandomPosition + 110;
    Obstacle.center = CGPointMake(570,RandomPosition);

    RandomPosition = arc4random() %75;
    RandomPosition = RandomPosition + 110;
    Obstacle2.center = CGPointMake(855,RandomPosition);

    RandomPosition = arc4random() %55;
    Top1.center = CGPointMake(560, RandomPosition);
    RandomPosition = RandomPosition +265;
    Bottom1.center = CGPointMake(560, RandomPosition);

    RandomPosition = arc4random() %55;
    Top2.center = CGPointMake(640, RandomPosition);
    RandomPosition = RandomPosition +265;
    Bottom2.center = CGPointMake(640, RandomPosition);

    RandomPosition = arc4random() %55;
    Top3.center = CGPointMake(720, RandomPosition);
    RandomPosition = RandomPosition +265;
    Bottom3.center = CGPointMake(720, RandomPosition);

    RandomPosition = arc4random() %55;
    Top4.center = CGPointMake(800, RandomPosition);
    RandomPosition = RandomPosition +265;
    Bottom4.center = CGPointMake(800, RandomPosition);

    RandomPosition = arc4random() %55;
    Top5.center = CGPointMake(880, RandomPosition);
    RandomPosition = RandomPosition +265;
    Bottom5.center = CGPointMake(880, RandomPosition);

    RandomPosition = arc4random() %55;
    Top6.center = CGPointMake(960, RandomPosition);
    RandomPosition = RandomPosition +265;
    Bottom6.center = CGPointMake(960, RandomPosition);

    RandomPosition = arc4random() %55;
    Top7.center = CGPointMake(1040, RandomPosition);
    RandomPosition = RandomPosition +265;
    Bottom7.center = CGPointMake(1040, RandomPosition);


}

Y = -7;
Heli.image = [UIImage imageNamed:@"HeliUp.png"];

}

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

Y = 7;
Heli.image = [UIImage imageNamed:@"HeliDown.png"];


}

基本的に、すべての障害物がロードされ、ランダムな位置に生成されます。オブジェクトは、画面をタップすると移動し、画面をタップしないとドロップします。イントロ ラベルは非表示です。

SpriteBuilder ゲームのコードは次のとおりです。

- (void)didLoadFromCCB {
self.userInteractionEnabled = TRUE;
_grounds = @[_ground1, _ground2];
for (CCNode *ground in _grounds) {
    // set collision txpe
    ground.physicsBody.collisionType = @"level";
    ground.zOrder = DrawingOrderGround;
_scrollSpeed = 80.f;
}
// set this class as delegate
_physicsNode.collisionDelegate = self;
// set collision txpe
_hero.physicsBody.collisionType = @"hero";
_hero.zOrder = DrawingOrdeHero;
_obstacles = [NSMutableArray array];
[self spawnNewObstacle];
[self spawnNewObstacle];
[self spawnNewObstacle];
}
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
if (!_gameOver) {
    [_hero.physicsBody applyImpulse:ccp(0, 400.f)];
    [_hero.physicsBody applyAngularImpulse:10000.f];
    _sinceTouch = 0.f;
}
}    

本当に短いコード。基本的にはロゴ画面が消えた後、スタート画面もなくすぐにゲームが始まります。ゲームが終了すると再起動し、すぐに再びプレイを開始します。

SpriteBuilder ゲームに別の void ステートメントを追加して、すぐにゲームをプレイするのではなく、画面をタップしてからゲームをプレイする方法を見つけようとしています。

SpriteBuilder ゲームに viewDidLoad ステートメントを追加することはできますが、didLoadfromCCB ステートメントと競合するのではないかと思います。同じ背景を使用して、開始画面をゲーム画面に遷移させる必要があります。唯一の違いは、開始画面で障害物が非表示になり、今すぐプレイ ラベルが表示され、その後、ラベルが非表示になり、障害物がゲーム画面に表示されることです。

4

2 に答える 2

1

spritebuilder チュートリアルに従って実行することをお勧めします。これには、おそらくコードを再調整する必要があります。次のチュートリアルは、spritebuilder をバックエンド コードにリンクする方法や、シーン間の遷移方法にも役立ちます。

なぜあなたの質問にそんなに詳細が含まれているのか、100% 確信が持てません。ゲーム ロジックとは何か、その他のロジックとは何かについて混乱しています。私の答えを更新します。

https://www.makegameswith.us/tutorials/getting-started-with-spritebuilder/menus/

于 2014-03-03T01:49:34.893 に答える