`
tank2308635
  • 浏览: 188875 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

"learn iPhone and iPad cocos2d Game Development" 学习(Tips 3)

 
阅读更多


tips 1:任何时候你都应该避免使用固定的位置。如果你只是简单的把主角精灵的位置设为(160, 32)的话,你做了两个其实应该避免的假设。第一个假设:你假设屏幕尺寸是320像素,但是实际上并不是每个iOS设备屏幕都是这个尺寸。第 二个假设:你假设图片的高度是64像素,但是这个高度可能会改变。一旦你开始做出类似的假设,你会习惯于在整个项目里做出这样的假设。


tips 2:CGPoint pos = player.position; pos.x += acceleration.x * 10; player.position = pos;

注意到上述代码中奇怪的地方了吗?本来可能一行代码就足够的地方,我却用了三行。

player.position.x += acceleration.x * 10;

不过,不像其它编程语言如Java,C++和C#,上面的代码不能够改变Objective- C的属性。player.position.x实际上调用的是位置的获取方法(getter method):[player position]。这个方法会获取当前主角精灵的临时位置信息,上述一行代码实际上是在尝试着改变这个临时CGPoint中成员变量x的值。不过这个临时的CGPoint是要被丢弃的。在这种情况下,精灵位置的设置方法(setter method): [player setPosition]根本不会被调用。


tips 3:在计算imageWidthHalved时,我们将contentSize乘以0.5,而不是用它除以2。这是一个有意的选择,因为除法可以用乘法来代替以得到同样的计算结果.因为上述更新方法在每一帧都会被调用,所以所有代码必须在每一帧的时间里 以最快的速度运行。因为iOS设备使用的ARM CPU不支持直接在硬件上做除法,乘法一般会快一些。虽然在我们的例子里效果并不明显,但是养成这个习惯对我们很有好处.


tips 4:如果不是绝对必要,不要在for或者其它循环里的条件判断中调用方法,这样可以节省几个CPU循环。在我们的例子中,我使用了一个名为 numSpiders 的变量,用于存放[spiders count]的计算结果。然后在for循环的条件判断中使用 numSpiders 而不是[spiders count]。因为spiders数组并没有在for循环里面被修改,所以此数组的元素个数在循环过程中是不会改变的。这也是为什么我可以将此计算结果保存在变量中,而不至于在for循环的条件判断中反复调用[spiders count]


tips 5:我提到更新CCLabel的文字速度会很慢,因为上面的文字实际上是张贴图,它需要通过iOS的字体渲染方法来生成,同时还要兼顾分配一个新的贴图和释放旧的贴图,这些都很花时间.CCBitmapFontAtlas类可以让标签文字更新速度加快.

scoreLabel = [CCBitmapFontAtlas bitmapFontAtlasWithString:@"0" fntFile:@"bitmapfont.fnt"];

自己创建bitmap字体文件,我们就来讨论一下如何创建这些文件。 我们使用的工具叫Hiero,开发者是Kevin James Glass。它是一个免费的Java Web程序,你可以在这里找到它:http://slick.cokeandcode.com/demos/hiero.jnlp

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics