Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用spritebuilder创建简单的开始屏幕?_Ios_Objective C_Cocos2d Iphone_Spritebuilder - Fatal编程技术网

Ios 如何使用spritebuilder创建简单的开始屏幕?

Ios 如何使用spritebuilder创建简单的开始屏幕?,ios,objective-c,cocos2d-iphone,spritebuilder,Ios,Objective C,Cocos2d Iphone,Spritebuilder,在撰写本文时,我正在使用最新版本的XCode和SpriteBuilder 我有两个游戏,其中一个在XCode上使用纯Objective-C构建,另一个在XCode上使用Objective-C以及SpriteBuilder。非SpriteBuilder游戏有一个点击播放屏幕,其背景看起来与游戏中的背景相同。在你点击屏幕的那一刻,你就直接进入了游戏 Sprite Builder游戏是我尝试在其上实现开始屏幕的游戏。我读了一些教程,但对我没有帮助。我不想使用不同的背景图像从一个屏幕过渡到另一个屏幕 这

在撰写本文时,我正在使用最新版本的XCode和SpriteBuilder

我有两个游戏,其中一个在XCode上使用纯Objective-C构建,另一个在XCode上使用Objective-C以及SpriteBuilder。非SpriteBuilder游戏有一个点击播放屏幕,其背景看起来与游戏中的背景相同。在你点击屏幕的那一刻,你就直接进入了游戏

Sprite Builder游戏是我尝试在其上实现开始屏幕的游戏。我读了一些教程,但对我没有帮助。我不想使用不同的背景图像从一个屏幕过渡到另一个屏幕

这是我的非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"];


}
基本上,所有障碍物都是在随机位置加载和生成的,物体随着u轻触屏幕而移动,如果你不轻触屏幕,物体就会掉落。介绍标签是隐藏的

以下是我的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语句,这样人们就可以从点击屏幕开始玩游戏,而不是立即开始玩游戏


我可以将viewDidLoad语句添加到SpriteBuilder游戏中,但我想知道它是否会与didLoadfromCCB语句冲突。我需要有开始屏幕过渡到游戏屏幕使用相同的背景。唯一的区别是,“开始”屏幕将隐藏障碍物并显示“立即玩”标签,然后标签将隐藏,障碍物将在游戏屏幕中可见。

我建议按照spritebuilder教程进行操作。这可能需要您重新调整代码。下面的教程还帮助您将spritebuilder链接到后端代码,以及如何在场景之间转换

我不是100%确定你为什么在你的问题中包含这么多细节,我不明白什么是游戏逻辑,什么是其他逻辑。。。因此,如果我的回答不正确,请告诉我,我会更新我的答案


我觉得闻起来有点像飞鸟

无论哪种方式,我都会用一个gameState变量和一个带有菜单的层来实现它

打开游戏(viewDidLoad)时,将游戏状态设置为0,例如菜单

然后在触摸法中,我会有如下开关:

switch(gameState){
    case 0: //Menu
        menuLayer.hidden = YES;
        gameState = 1 //IN_GAME
        break;
    case 1: //In game
        //Do your game tap code
        break;
    case 2: //Game Over
        gameOverLayer.hidden = NO;
        break;
}
或者你可以复制CCb,删除游戏代码,在touch上加载游戏CCb,但我认为前者是最好的选择