`
836811384
  • 浏览: 548879 次
文章分类
社区版块
存档分类
最新评论

Android游戏引擎《Rokon》:常见问题汇总(2010.11.15更新)

 
阅读更多

懒骨头(http://blog.csdn.com/iamlazybone


0.添加自己的FPS统计类:

本来Rokon有自己的FPScounter类,可只能通过debug打印显示出来,而且由于包的访问权限,无法自由的调用。于是添加一个自己的FPS统计类:

用法是在你的Scene类的onGameLoog()方法里调用MyFPSCounter.onFrame()方法。MyFPSCounter.FPS即是当前的游戏帧数。

1.设置背景图片无法显示:(From:woohyuknrg)

setBackground(new FixedBackground(Textures.background));

有些时候在Scene的构造函数中调用setBackground,竟然不会显示背景图片,有人说是图片问题,其实不然,若该方法不起作用,试试:

2.本无法显示,也就是TextSprite不起作用,已有不少人提交了这个bug,不过目前作者还没改好,我写的代码如下:(From:woohyuknrg)

我的解决方法:activity里调用createEngine(true),看过源代码的应该知道传参数true创建的引擎还包括一个RelativeLayout实例,通过getInterface()方法获取

那我可以这么作:

其中score_text.xml就是一个AbsoluteLayout包含TextView,你可以设置这个TextView的坐标放置在界面任意地方,这样就解决了游戏中分数等文本的显示。

3.灵异bug:显示的图片发生“穿越”:(From:woohyuknrg)

至少我在开发过程中遇到不止一次了~~即使显示一个背景图,却发现这个背景图上多了一截其它图,估计跟TextureAtlas的使用有关。作者的示例教程中这样用的:

当然我添加的图片不止一张,其中有若干insert函数的调用,并且我有多少个图片需要添加,在TextureAtlas构造函数我是传了参数的,如:new TextureAtlas(11);
解决方法:直接background = new Texture("bg.png"));不把这个Texture插入到TextureAtlas

4.Scene构造函数或者onReady函数中初始化sprite后立即执行animate函数不起作用:(From:woohyuknrg)

这个bug我也提交了的,结果后来发现有个人跟我一样也提交了这个bug,只有寄希望于作者早日修改。这个bug很奇怪,我游戏运行起来黑屏,什么都没显示,但是背景音乐还在播放,logcat也没输出什么异常错误,说明游戏还在正常运行~~~~只是黑屏

这个问题的补充,我才发现:我附件的demo由于是一启动游戏就进入了游戏界面,游戏Scene类构造函数里执行animate会黑屏。 后来我用在其他正规游戏里,进入时先是菜单按钮界面,点击开始游戏按钮后进入游戏主界面,这时在scene的构造函数里执行animate就没有问题,sprite正常播放帧动画!

5.调用scene.clearLayer(0)不起作用:(From:woohyuknrg)

clearLayer函数是清除某一层上的所有sprites,我在游戏里调用不起作用!

不过改成执行getLayer(0).clear()却起作用了~~~~~~~查看源码,clearLayer其实就是去调用的layer.clear(),为什么clearLayer不起作用,相当古怪~~~~~~希望大家也试试,看是否和我一样的情况

6.box2d的FixtureDef.filter不起作用:(From:woohyuknrg)

用过或学过box2d的应该都知道FixtureDef的filter是用来精确控制游戏里哪些sprite可以碰撞,哪些不碰撞。可是我设置其groupIndex或categoryBits和maskBits均不起作用,我已提交了这个bug,有兴趣的朋友也可以自己试下验证是否有该bug

看了下World类源代码,这个函数是控制碰撞筛选的:

else里直接return true了,当然设置filter不起作用!我又把Libgdx引擎源代码从svn down下来,对比一看,实际函数体应该是这样的:

只是Rokon引擎作者个人把else的函数体去掉了。不过不用filter也罢,因为明显还可以实现contactFilter这个接口的shouldCollide方法来控制我游戏里哪些精灵碰撞和不碰撞~

从网上下载最新的2.1.0自己打包出来的jar很多人运行都会遇到黑屏,其实是VBO在作怪,因为貌似很多机型都不支持VBO,偏偏作者还专门写了利用VBO绘制,只要在你的子类activity的onCreate里加上setDrawPriority(DrawPriority.PRIORITY_NORMAL); 应该就可以了,如果还是没有背景图片显示,请参照问题1

问题3的灵异bug,图片穿越:任何灵异事件都有根有据,不可能平白无故发生,我debug找到问题所在,TextureAtlas类的findRightSpot函数126行:

if(checkX + texture.width > atlasWidth) 改成if(checkX + texture.width >= atlasWidth)即可,不要问我为什么,自己去钻研rokon这源代码并打出一些info你就明白了;顺便提一句:TextureAtlas的insert方法应该从最大尺寸图开始添加,作者的新手教程里也有说~~~

7.重力感应控制的问题:(From:woohyuknrg)

rokon里有Accelerometer类,其中的函数stopListening是用来停止感应事件监听的,我从游戏界面返回菜单界面调用了这个方法,再次进入游戏界面会又调用startListening函数启动监听,不过这是游戏却不响应重力感应了。最后找到问题解决:stopListening函数里解除监听后添加一句sensorEventListener = null;

8.背景音乐播放问题:(From:woohyuknrg)

第一次游戏没问题,退出游戏再次进入发现背景音乐没有播放! 解决办法:在RokonMusic类里添加一个函数:

退出游戏时调用下该函数即可

9.Layer的clear函数:(From:woohyuknrg)

删除某层中的全部sprite,这个问题我向作者反应过,他确实改过,不过我觉得还是不对,我就自己改成这样了:

后话:最初发文时已注明原作者woohyuknrg,见被推荐不敢抢功,再次声明,原帖传送带

===============您可以乘坐飞船到骨头的其他Rokon教程===============

Android游戏引擎《Rokon》学习笔记一:为你的项目添加Rokon框架

Android游戏引擎《Rokon》学习笔记二:HelloWorld

Android游戏引擎《Rokon》学习笔记三:精灵类Sprites的使用

Android游戏引擎《Rokon》学习笔记四:添加触摸控制

Android游戏引擎《Rokon》学习笔记五:Modifiers修饰类的使用

Android游戏引擎《Rokon》学习笔记六:一个使用Box2D的Rokon小例子:Rokon Donate

Android游戏引擎《Rokon》:主要类和方法的介绍文档

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics