疯狂ios讲义之疯狂打飞机(1)-创新互联

疯狂打飞机游戏

  本次我们将带领大家手动完成一个简单但功能完整的打飞机游戏,实现飞机飞行、飞机碰撞、发射×××、敌机发射大×××、背景音乐、×××音效、分数统计、菜单管理等功能。它虽然不会为你赢得什么奖项,但是可以总结前面所学的所有知识,帮助大家更好地掌握cocos2d基本对象的使用,同时体验cocos2d的强大以及易用性。

成都创新互联公司专业为企业提供固安网站建设、固安做网站、固安网站设计、固安网站制作等企业网站建设、网页设计与制作、固安企业网站模板建站服务,十多年固安做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

1开始前的准备工作

首先打开Xcode,使用cocos2d iOS模板新建一个项目,命名为“AirfightGame”,然后选择一个目录,单击“Create”按钮。为cocos2d项目的源代码添加-fno-objc-arc选项让项目支持ARC。

接下来,将所需要的资源文件,包括图片和声音拖到项目的“Resources”组。在游戏开发当中,通常都会使用精灵表单来优化游戏性能,在这个小游戏当中,虽然这种性能优化并不会有特别明显的效果,但是建议大家以后开发游戏时都使用精灵表单来提高游戏性能。使用Zwoptex将所有图片制作成精灵表单,生成对应的airfightSheet.png和airfightSheet.plist文件,并将这两个文件拖到项目的“Resources”组。

2添加游戏菜单项功能

现在,我们来为游戏添加一个菜单设置功能,在这里可以完成开始游戏、游戏设置、退出游戏等操作。步骤如下。

①选择“AirfightGame”组并单击右键,选择“New File”,在左边栏中选择“cocos2d v2.x”模板,在右边的模板类中选择“CCNode class”模板类,“Subclass of”选择“CCLayer”,然后单击“Next”按钮。命名为“MenuLayer”,然后单击“Create”按钮。

MenuLayer继承自CCLayer,提供一个类方法scene供CCDirector对象调用。该类的作用是显示一个菜单场景,让用户选择。

打开MenuLayer.m文件,实现代码如下。

程序清单:codes/13/13.14/AirfightGame/AirfightGame/MenuLayer.m

-(id) init
{
    if( (self=[super init]) ) {
        CGSize winSize = [[CCDirector sharedDirector] winSize];
        // 创建“开始游戏”标签,当触碰该标签时,调用startGame:方法
        CCMenuItemFont* startItem = [CCMenuItemFont itemWithString:@"开始游戏"
            target:self selector:@selector(startGame:)];
        startItem.position=ccp(winSize.width/2, winSize.height*0.6);
        // 创建“游戏设置”标签,当触碰该标签时,调用setting:方法
        CCMenuItemFont* settingItem = [CCMenuItemFont itemWithString:@"游戏设置"
            target:self selector:@selector(setting:)];
        // 设置“游戏设置”标签位置
        settingItem.position=ccp(winSize.width/2, winSize.height*0.4);
        // 创建控制菜单,并将两个标签添加进去
        CCMenu* menu = [CCMenu menuWithItems:startItem,settingItem, nil];
        menu.position = CGPointZero;
        [self addChild:menu];
    }
    return self;
}

init方法比较简单,创建了两个CCMenuItemFont,选择标签时会调用对应的startGame:和setting:方法,并将它们添加到CCMenu当中,再将CCMenu添加为当前层的子节点。

②添加startGame:和setting:两个方法,实现代码如下(程序清单同上):

-(void) startGame:(id)sender{
    // 切换到PreloadLayer场景
    CCTransitionSlideInL* transitionScene = [CCTransitionSlideInL
        transitionWithDuration:2.0 scene:[PreloadLayer scene]];
    [[CCDirector sharedDirector] replaceScene:transitionScene];
}

startGame:方法非常简单,当用户选择“开始游戏”标签时,场景切换到PreloadLayer,在下一节中将重点介绍PreloadLayer(程序清单同上)。

-(void) setting:(id)sender{
    // 切换到SettingLayer场景
    CCTransitionSlideInL* transitionScene = [CCTransitionSlideInL
        transitionWithDuration:2.0 scene:[SettingLayer scene]];
    [[CCDirector sharedDirector] replaceScene:transitionScene];
}

当用户选择“游戏设置”标签时,场景切换到SettingLayer,进行游戏设置。

③同上面的步骤一样,使用“cocos2d v2.x”模板创建一个类并命名为“SettingLayer”,继承自CCLayer。该类的实现代码如下。

程序清单:codes/13/13.14/AirfightGame/AirfightGame/SettingLayer.m

-(id) init
{
    if( (self=[super init]) ) {
        CGSize winSize = [[CCDirector sharedDirector] winSize];
        // 提示菜单项
        CCMenuItemFont* musicItem = [CCMenuItemFont itemWithString:@"背景音乐:"];
        musicItem.position = ccp(winSize.width*0.4, winSize.height*0.6);
        // 创建“开”和“关”菜单项
        CCMenuItemFont* musicOn = [CCMenuItemFont itemWithString:@"开"];
        CCMenuItemFont* musicOff = [CCMenuItemFont itemWithString:@"关"];
        // CCMenuItemToggle,默认显示“开”。开=0,关=1
        CCMenuItemToggle* musicToggle = [CCMenuItemToggle itemWithTarget:self
            selector:@selector(change:) items:musicOff,musicOn, nil];
        musicToggle.position = ccp(winSize.width*0.6, winSize.height*0.6);
        // 创建“返回主菜单“菜单项
        CCMenuItemFont* returnItem = [CCMenuItemFont itemWithString:@"返回主菜单"
            target:self selector:@selector(backToMainLayer:)];
        returnItem.position = ccp(winSize.width/2, winSize.height*0.4);
        // 创建控制菜单,并将3个标签添加进去
        CCMenu* menu = [CCMenu menuWithItems:musicItem,musicToggle,returnItem, nil];
        menu.position = CGPointZero;
        [self addChild:menu];
        // NSUserDefaults用户选项可以用来保存用户在操作应用的过程中设置的选项。
        NSUserDefaults* userDef = [NSUserDefaults standardUserDefaults];
        // 如果Bool为No,则显示1=关
        if(![userDef boolForKey:@"music"]){
            musicToggle.selectedIndex = 1;
        }
    }
    return self;
}
-(void) change:(id)sender{
    // 判断mute(静音)属性,根据属性状态进行切换
    if([CDAudioManager sharedManager].mute == TRUE){
        [CDAudioManager sharedManager].mute = FALSE;
    }else{
        [CDAudioManager sharedManager].mute = TRUE;
    }
    NSUserDefaults* userDef = [NSUserDefaults standardUserDefaults];
    CCMenuItemToggle* tooggle = (CCMenuItemToggle*)sender;
    // 关=1,设置Bool为NO
    if(tooggle.selectedIndex == 1){
        [userDef setBool:NO forKey:@"music"];
    }else{
        [userDef setBool:YES forKey:@"music"];
    }
}
// 定义一个CCTransitionSlideInL场景切换效果,并使用CCDirector单例对象来切换场景
-(void) backToMainLayer:(id)sender{
    CCTransitionSlideInL* transitionScene =
        [CCTransitionSlideInL transitionWithDuration:2.0 scene:[MenuLayer scene]];
    [[CCDirector sharedDirector] replaceScene:transitionScene];
}

SettingLayer类代码在13.13.2节中已经详细介绍过,这里不再赘述。

④修改IntroLayer.m文件

IntroLayer默认加载HelloWorldLayer,但此时我们不再使用HelloWorldLayer作为应用的第一个场景,而是使用MenuLayer作为应用的第一个场景,因此需要修改IntroLayer,将IntroLayer改为加载MenuLayer场景修改如下。

在IntroLayer.m文件的顶部添加所包含的头文件:

#import "MenuLayer.h"

修改-(void) makeTransition:(ccTime)dt方法,将该方法改成下面的代码。

程序清单:codes/13/13.14/AirfightGame/AirfightGame/IntroLayer.m

-(void) makeTransition:(ccTime)dt
{
    [[CCDirector sharedDirector] replaceScene:
        [CCTransitionFade transitionWithDuration:1.0
        scene:[MenuLayer scene] withColor:ccWHITE]];
}

ios讲义之疯狂打飞机(1)

疯狂打飞机游戏

  本次我们将带领大家手动完成一个简单但功能完整的打飞机游戏,实现飞机飞行、飞机碰撞、发射×××、敌机发射大×××、背景音乐、×××音效、分数统计、菜单管理等功能。它虽然不会为你赢得什么奖项,但是可以总结前面所学的所有知识,帮助大家更好地掌握cocos2d基本对象的使用,同时体验cocos2d的强大以及易用性。

1开始前的准备工作

首先打开Xcode,使用cocos2d iOS模板新建一个项目,命名为“AirfightGame”,然后选择一个目录,单击“Create”按钮。为cocos2d项目的源代码添加-fno-objc-arc选项让项目支持ARC。

接下来,将所需要的资源文件,包括图片和声音拖到项目的“Resources”组。在游戏开发当中,通常都会使用精灵表单来优化游戏性能,在这个小游戏当中,虽然这种性能优化并不会有特别明显的效果,但是建议大家以后开发游戏时都使用精灵表单来提高游戏性能。使用Zwoptex将所有图片制作成精灵表单,生成对应的airfightSheet.png和airfightSheet.plist文件,并将这两个文件拖到项目的“Resources”组。

2添加游戏菜单项功能

现在,我们来为游戏添加一个菜单设置功能,在这里可以完成开始游戏、游戏设置、退出游戏等操作。步骤如下。

①选择“AirfightGame”组并单击右键,选择“New File”,在左边栏中选择“cocos2d v2.x”模板,在右边的模板类中选择“CCNode class”模板类,“Subclass of”选择“CCLayer”,然后单击“Next”按钮。命名为“MenuLayer”,然后单击“Create”按钮。

MenuLayer继承自CCLayer,提供一个类方法scene供CCDirector对象调用。该类的作用是显示一个菜单场景,让用户选择。

打开MenuLayer.m文件,实现代码如下。

程序清单:codes/13/13.14/AirfightGame/AirfightGame/MenuLayer.m

01-(id) init

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前题目:疯狂ios讲义之疯狂打飞机(1)-创新互联
文章URL:http://ybzwz.com/article/dedccp.html