做了一周的智力开发小游戏,就简单说一点儿Xcode中开发2D游戏的东西吧。
Xcode中开发的2D游戏,目前大部分人使用的是cocos2d,其简单、高效、易于使用,更关键的是免费的,所以很是流行。有人称之为开发框架,也有人称之为游戏引擎,我倒是倾向于后一种说法,因为听起来更酷一些。但就实际使用来看,可以理解为一组库函数,就是一组对OpenGL部分片段的封装。既然是封装,就不必你看到电脑如何用点累积一条直线,如何切换几张图片来做一个动画之类的。下面就使用过的一点功能做个分享。
首先说明一下精灵(Sprites)的概念,它是可以作为单个处理的对象,可以移动,可以转动,也可以设置其位置之类的属性。可能有些难理解,简单比方一下:如果小游戏里有个人要去打怪,那么人就可以用精灵来表示,怪也可以用一个精灵来表示。你可以控制表示人的精灵从左移动到右,也可以让表示怪的精灵见了人就跑。当然,要在精灵上设置图片,不然你什么也看不到的。
举个创建精灵的例子:
NSString *picName = [NSString stringWithFormat:@"my_picture.png"];
CCSprite *bigSprite = [CCSprite spriteWithFile:picName];
bigSprite.position = ccp(size.width / 2, size.height * 3 / 4);
bigSprite.tag = TAG_MY_SPRITE;
接下来说一下图层(layer),图层的概念相信大部分人熟悉,用过photoshop和flash的人都有这个概念,就像是透明的玻璃纸,上面可以画画,摞起来时没画画的部分可以看到下面的一层。精灵实际上是在图层(layer)上活动的,一个简单的2D游戏只要一个Layer,加几个精灵在动基本就可以成形了。
CCLayer *layer = [CCLayer node];
[layeraddChild:bigSprite];
[layeraddChild: ……]; // 可以多次调用;
这样就完成了将精灵加到图层上的工作。 那么图层如何显示呢?
实际上我们还需要一个场景(scenes)。这个就可以理解成唱戏的一幕,根据字面也不难理解。就是精灵加到layer上,layer加到scene里。一般场景创建完后操作的次数很少,更多的时直接使用layer,所以有种很方便的方法来处理再layer类中实现创建场景的静态方法:
+(CCScene *) scene
{
// ‘scene’ is an autorelease object.
CCScene *scene = [CCScene node];
// ‘layer’ is an autorelease object.
CCLayer *layer = [CCLayer node];
// add layer as a child to scene
[scene addChild: layer];
// return the scene
return scene;
}
这样一来,只需要在使用该场景的地方直接调用:
[[CCDirector sharedDirector]replaceScene:[layer scene]]; 就OK了。
至于CCDirector是什么,暂时就不细说了,因为我也不是很明白。大概是控制器之类的东西,反正一般直接这么用就好了。sharedDirector相当于是获取一个全局共享CCDirector实例的方法,因为这东西只有一个。其他细节,以后再说了。
时常会看到游戏中又很多选项和按钮,这个部分在cocos2d中更是不在话下,不是简单,而是相当的简单。如下:
CCMenuItemImage *sub = [CCMenuItemImage itemFromNormalImage:@"subtract.png" selectedImage:@"subtract_press.png" target:self selector:@selector(buttonPressed:)];
sub.tag = TAG_SYMBOL_SUB;
sub.position = CGPointMake(50, 50);
CCMenu *menu = [CCMenu menuWithItems: sub, nil];
menu.tag = TAG_SYMBOL_ID;
menu.position = CGPointMake(160, 200);
[self addChild:menu];
就不用多说细节了,大体流程是用两张图片创建了一个按钮,将按钮加到菜单上,菜单显示到layer上。按钮按下时,触发动作buttonPressed
几个使用最多的元件已经简介了一下,剩下的任务是什么时候让一个精灵出现,然后怎么移动,怎么消失。比如:开始有人有怪,人走到怪的面前,怪就死亡消失了。这些东西需要把情景抽象成物理模型就可以了。