- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return (interfaceOrientation==UIInterfaceOrientationLandscapeLeft)||(interfaceOrientation==UIInterfaceOrientationLandscapeRight);
}
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("栏目内容")
.setContent(new TabContentFactory() {
List<Content> items;
{
items = new ArrayList<Content>();
Content content = new Content();
content.setTitle("阿童木");
content
.setComment("因意外痛失爱子的天才科学家天马博士悲痛欲绝,萌生了复制爱子的想法并成功创造了机器人阿童木,他和人类一样拥有喜怒哀乐,而且还有博士儿子残余的情感与记忆。但阿童木却无法令抑郁的博士重展欢颜,博士狠心决定将他遗弃…");
content.setImageUrl("" + R.drawable.c1);
items.add(content);
content = new Content();
content.setTitle("三枪拍案惊奇");
content
.setComment("故事发生于古代某大漠之中,一家面馆老板名为王五麻子,为人阴险吝啬,如此人品,老婆自然不待见。恰好伙计李四长得很帅又有幽默感,两人一拍即合,有了私情。王五发现两人私情后…");
content.setImageUrl("" + R.drawable.c2);
items.add(content);
content = new Content();
content.setTitle("花木兰");
content
.setComment("在古老的中国,有一位个性爽朗,性情善良的好女孩,名字叫作「花木兰」,身为花家的大女儿,花木兰在父母开明的教悔下,一直很期待自己能花家带来荣耀。不过就在北方匈奴来犯…");
content.setImageUrl("" + R.drawable.c3);
items.add(content);
content = new Content();
content.setTitle("达芬奇密码");
content
.setComment("本片讲述了哈佛大学的符号学专家罗伯特·兰登在法国巴黎出差期间的一个午夜接到一个紧急电话,得知卢浮宫博物馆年迈的馆长被人杀害在卢浮宫的博物馆里,人们在他的尸体旁边发现了一个难以捉摸的密码…");
content.setImageUrl("" + R.drawable.c4);
items.add(content);
}
@Override
public View createTabContent(String tag) {
ListView listView = new ListView(CustomerPlayer.this);
listView.setAdapter(new ContentAdapter(
CustomerPlayer.this, 0, items));
return listView;
}
}));
BOX2D越来越火了,基本上已经稳固了自己在游戏开发者心目中的地位。其实很早之前就在关注BOX2D了,原本在flash游戏中应用非常普遍,近两年移动平台的兴起才再IOS和Android中崭露头角。我个人觉得,愤怒的小鸟成功只是一个偶然,不信就去逛逛flash游戏网站,你会发现很多精致、有创意又耐玩的游戏。(不过Rovio对游戏事业的专注和热情是值得大家学习的)
目前我知道的Android平台使用BOX2D有三种方式,官方的JBOX2D,libgdx封装的JNI版BOX2D,还有微云SDK里的JNI版BOX2D。
1)JBOX2D。纯正、稳定、跨平台、官方支持,唯一的缺点是速度慢,这跟JAVA的虚拟机有关,大量的临时对象和数据运算不能像C/C++那样被及时free掉是主要原因。比起JNI版的确实速度略逊一筹,但也没有网上传言的那么夸张,现在的Android手机CPU动不动就1GHZ,内存动不动就几百M,跑JBOX2D还是绰绰有余的(勿信PC上的模拟器)。如果你的游戏跑起来卡,主要问题就在程序上,是不是时间步设置得太小了?是不是迭代设置得太多了?手机上的休闲游戏,每秒12~20帧足够了。还有就是图象是不是即时旋转的,不要相信Matrix效率有多高,不要动态地旋转图片,推荐预先生成0~90°的图片,精度不用那么高,每5°或10°生成一张,然后翻转+镜像贴出0~360°的图片,这样的速度比即时翻转快出n倍。
2)libgdx。Angle、LGame等很多开源引擎都选择了它封装的box2d,可见对它的可用性是充分肯定的。libgdx的作者估计内流满面,大家貌似只看上他的box2d部分了,其实libgdx整体都很优秀。libgdx box2d的JNI代码写得非常清晰,运行速度非常快,使用方法也很接近原生的JBOX2D,我就是看c++版的文档来开发JAVA的,差别不大,毫无鸭梨。不过据不少人反映,libgdx封装的box2d存在bug,我也遇到莫名其妙报错退出的问题,至今没找到原因,调试起来比较困难。
3)微云SDK(http://www.wiyun.com/web/wiengine,我依然不是枪手)。这个2D游戏框架目前很高调,对它了解不多,略微看了一下,BOX2D、LUA、粒子系统、XML都做了封装,甚至场景元素,地图图素都做了细致地封装,人性化程度可见一斑!不过它似乎忽略了一点,独立游戏人之所以做独立游戏人,因为他们什么都喜欢自己动手,封装得越细致就说明约束越大,自由发挥余地就越小。或许你把饭盛好,用勺子送到独立游戏人的嘴边,换回的却是一个“呸!”,呵呵开个玩笑,我也是独立游戏人。有点偏题了,回头说BOX2D,微云同样是JNI封装的C代码,粗略看了下文档以及JNI代码,不像是直接用的libgdx的,它再一次封装到了嘴边,框架结构让我匪夷所思,习惯了BOX2D的朋友可能要花点时间熟悉一下。
介绍就到这里,附件里附上Jbox2D、libgdx的box2d以及一篇c++的BOX2D教程,下篇文章或将介绍Android中使用box2d的例子。