本文只是记录我在GDX开发时遇到的一些问题 记录下来
背景说明:GDX现在也是新上手.属于上手期,另外我个人不喜欢用框架自带的功能组件 就喜欢瞎折腾. 勿喷
1:actor添加了action发现没有反应 动作类根本没触发 看源码才发现 action是依靠stage类的act()通知去更新 在render重写中 添加
Stage.act();
2:游戏过程中 如果尺寸发生改变 会造成游戏事件的坐标发生混乱 解决 在resize重写中 添加
stage.getViewport().update(width, height);
3:截剪功能实现
private Rectangle _mScissorRec = new Rectangle();
private Rectangle _mTemp = new Rectangle(0, 0, 100, 30);
private Stage _mStage;
//在render重写中实现
_mStage.calculateScissors(_mTemp, _mScissorRec);
ScissorStack.pushScissors(_mScissorRec);
_mStage.act();
_mStage.draw();
ScissorStack.popScissors();
_mTemp属于要裁剪的区域 因为现实情况中 游戏内容都是经过了缩放处理 所以需要计算得出在当前缩放比例的情况下提供的源区域 对应的结果区域是多少
calculateScissors就是实现此功能(PS:resize时一定要更新视口 不然会出现截剪错误)
ScissorStack.pushScissors 添加一个截剪区域 调用openGL 的glScissor方法
ScissorStack.popScissors(); 删除最后添加的裁剪区域 跟上面的形成对应 类似数组一个添加 一个删除
4:图层混合
最开始我尝试在render中去添加openGL的glBlendFunc方法 发现没有效果 后面看了一下SpriteBatchr的源码 发现原来这里面已经有了实现
stage类中的SpriteBatch属性
SpriteBatch类中有一个方法 setBlendFunction 该方法可以实现 里面的参数具体参与openGL编程里的参数介绍 是一样的 例
_mStage.getBatch().setBlendFunction(GL20.GL_FUNC_ADD, GL20.GL_FUNC_ADD);
5:UI编辑器
最开始让我最纠结的就是GDX没有配套的工具 曾经无数在群里问别人 "你们用的是什么UI 及动画编辑器"
后面我也看了一下现有的一些其他框架的编辑器 例 COCOS IDE spine 发现都有一个共同点 就是编辑完了以后 输出通用的格式例Josn XML
通过这个思路 我发现只要找到一个成熟的UI编辑器 我将该UI编辑器的结果导出一定的数据结构 然后我在GDX里实现一次就行了
本人现在也在弄页游 发现flash绝对是这思路的首先
我在flash里将用到的图片导入 然后生成元件添加至舞台排版和编辑特效 falsh对于特效有很完善的特效编辑功能
剩下最关键的是 怎么样将SWF解析成我们能用的数据 我用的是AIR 因为本人以前是页游 SO.....
AIR的思路就是一帧一帧 将特效里的元素各状态属性导出来 属性包括(位置 旋转 缩放 缩放/旋转中心点 透明度 混合.) 取哪些属性 就看AS3 跟GDX有哪些相同的属性.及GDX中我们实现了哪些功能.
这里只是提供一个可行的解决思路 FLASH是我用过最爽的特效编辑器 没有之一. 它的引导层 它的补间......
难度系数3(必备技能 AS3)