一位大神的石器时代手游ios版开发计划

2018-05-11 13:11:37 石器技术 石器时代TV

    我作为《石器时代》早期的忠实玩家,对那段网游时光灰常留念,这也是我想把《石器时代》移植到ios的一个主要原因。

目前正在做的是写这个游戏的引擎,这几天一直在学习OpenGL ES 1.1,在阅读了苹果公司对ES1.1的一个包装器Texture2D的源代码后,果断对它进行了修改,本来里面有个方法可以把文字制作成一个texture(纹理,opengl的一个对象),然后通过纹理贴图显示文字,但是好像并不支持设置文字颜色,最致命的是,文字的背景不是透明的。经过我的修改后,终于实现了颜色和透明的功能。


这个过程也让我开始对OpenGL ES有了进一步的认识,至于OpenGL ES 2.0,还是等以后再来研究吧,因为有了贴图和文字显示功能,以及一些画点,线,三角形的功能后,我就可以把他们糅合在一起,写出一个可以开发“石器时代”这个2d游戏的引擎了。

石器时代游戏引擎的开发

主角player类别已经有了可以测试的原型,刚开始是在player类别的实例里创建一个NSTimer来做动画效果,后来发现动画效果由主渲染函数调用比较合理,起码不会出现跳帧的情况。


接着一个问题出来了,主角的移动实际上是移动背景画面,而不是主角自己移动,除非主角到背景边缘的距离小于屏幕的宽度或者高度的一半才需要实际地移动主角。然而,多个角色共同游戏的时候,其他玩家的移动则要实际根据他在背景的坐标系里渲染出来,这个很有趣,跟物理学里面的参照物一个道理,不同的参照物需要不同的坐标转换。


到这里,才发现实际上遇到很多游戏开发领域里的问题,不过,我也不打算拿这个游戏来赚钱,只是兴趣而已,没什么压力。但是,如果能提交到app store的话,应该起码也会有国人购买吧,如果将来这个游戏玩的人多,也不会收取太多费用,而是以“插播”广告的形式来收取商家的钱。


IOS 渲染自定義字體及關閉antialias

一 出于iphone自带字体的局限性,在游戏想自定义自己的字体,方法如下:


1)拷貝字體到項目的resource目錄下,記得要打上拷貝的勾。

2)在項目的plist文件上面加上一行:Fonts provided by application,幷在下面新建key为Item 0,值为xxxx.ttf

3)用下面的代碼找出加入的字體的名字:

NSArray *familyNames =[[NSArray alloc]initWithArray:[UIFont familyNames]];

NSArray *fontNames;

NSInteger indFamily, indFont;

for(indFamily=0;indFamily<[familyNames count];++indFamily)

{

NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);

fontNames =[[NSArray alloc]initWithArray:[UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];

for(indFont=0; indFont<[fontNames count]; ++indFont)

{

NSLog(@" Font name: %@",[fontNames objectAtIndex:indFont]);

}

[fontNames release];

}

[familyNames release];

*要使用字体的Family name,而不是字体的文件名

4)跟平常一样调用字体,比如:

UIFont *font = [UIFont fontWithName:@"Gill Sans", size:14.0];

二 想讓遊戲的字體渲染比較清晰,可以關閉抗鋸齒功能


CGContextSetShouldAntialias(context, FALSE);


45度地图编辑器Mac OS X beta版

1.png

非常简单的2维45度地图编辑器,不支持背景透明,只是用于测试游戏的角色移动ai而已。

设置方面只有3个参数,地图块的边长,块在y轴的个数,以及块在x轴的块数。

做ELSA_MAP这个地图类的时候,调用了Texture2D里面的函数drawInRect,出现了几个问题:


首先,图片会被拉伸。

然后,图片又时候会被放大几个像素。


还好类里面还有一个绘图函数,drawAtPoint,这个就没有问题,所以决定用这个函数了。

注意的地方,drawInRect的参数是一个CGRect,用于定位图像的坐标。drawAtPoint的参数是一个CGPoint,用于定位图片中心的坐标。


Yeah,差点就放弃Texture2D做游戏的念头了,还好找到了突破点。

至于drawInRect这个函数的bug,以后又机会阅读一下Texture2D的源代码再来修改看能不能bug fixed!




石器时代ios地图类设计手稿

1.jpg


发表评论: