鸿蒙开源第三方组件——游戏框架JustWeEngine 精华
JustWeEngine
本项目是基于开源项目JustWeEngine进行ohos化的移植和开发的,可以通过项目标签以及github地址(https://github.com/lfkdsk/JustWeEngine )追踪到原项目版本
项目介绍
- 项目名称:JustWeEngine
- 所属系列:ohos的第三方组件适配移植
- 功能:JustWeEngine是托管在Gitee 的一个开源的Ohos原生开发框架,可以让Ohos的开发人员非常便捷,无需切换语言和编译器的制作Ohos原生游戏
- 项目移植状态:完成
- 调用差异:无
- 原项目基线版本:v1.13
- 编程语言:Java
效果展示
安装教程
方法1.
- 编译har包JustWeEngine.har。
- 启动 DevEco Studio,将编译的har包,导入工程目录“entry->libs”下。
- 在moudle级别下的build.gradle文件中添加依赖,在dependences标签中增加对libs目录下har包的引用。
- 在导入的har包上点击右键,选择“Add as Library”对包进行引用,选择需要引用的模块,并点击“OK”即引用成功。
方法2.
- 在工程的build.gradle的allprojects中,添加HAR所在的Maven仓地址(等maven发布后进行修改)
- 在应用模块的build.gradle的dependencies闭包中,添加如下代码:(等maven发布后进行修改)
使用说明
进阶应用
1.基础功能
1.1继承引擎核心类:
由于框架全部使用SurfaceView进行绘制,不使用诸如Button、Layout等原生控件,所以应该首先新建类继承引擎核心类Engine,负责游戏的流程,注释中已有明确的标明功能。
1.2绘制文字:
使用GamePrinter进行文字绘制,除此以外还有多种方法绘制:
1.3绘制图片:
建议图片存放在Resources中:
另外也可使用loadFromAssetStripFrame
从一个大的图片中取出对应位置的图片。
PicUtils中提供了在Bitmap处理中很有用的各种特效和压缩方法,大家可以一试。
1.4使用精灵:
使用精灵可以使用BaseSprite也可以继承该类使用,BaseSprite封装了很多方法供各种动画使用,这些功能很多都是需要结合动画系统来使用的,动画系统会在后面介绍。
新建精灵:
1.简单初始化:
2.初始化连续帧动画:
连续帧的初始化需要连续的帧图片。
3.使用从大图取出的多帧图片:
4.一些重要的其他设定:
1.5使用按钮:
使用的按钮可以继承BaseButton进行拓展,也可以直接使用TextureButton和TextButton进行使用。
Button设定功能的方式和原生一样,通过设定接口回调的方式进行:
1.TextureButton:
结合PicUtil中的各种Bitmap处理方法可以很容易的做出各种样式的Button。
2.TextButton:
2.动画系统
目前的动画系统可以使用已经封装好的继承了BaseAnimation的动画,也可以继承BaseAnim进行自我定义动画类进行使用。
2.1绑定在BaseSub物品及精灵基类上的动画类
AnimType中保存了Animation的应用类型。
Animation | method | function |
---|---|---|
AliveAnimation | adjustAlive(boolean ori) | 碰撞检测的时候进行判断存活状态 |
AlphaAnimation | adjustAlpha(int ori) | 修改物体透明度 |
CircleMoveAnimation | adjustPosition(Float2 ori) | 沿某一圆心进行圆周运动 |
FenceAnimation | adjustPosition(Float2 ori) | 使用围栏动画防止出界 |
FrameAnimation | adjustFrame(int ori) | 逐帧动画 |
MoveAnimation | adjustPosition(Float2 ori) | 位移动画 |
SpinAnimation | adjustRotation(float ori) | 旋转动画 |
ThrobAnimation | adjustScale(Float2 ori) | 跳跃动画 |
VelocityAnimation | adjustPosition/adjustAlive | 线性加速度计 |
WrapMoveAnimation | adjustPosition(Float2 ori) | 围栏动画防止出界 |
ZoomAnimation | adjustScale(Float2 ori) | 放大缩小动画 |
待续 | … | … |
绑定动画分为两类,ListAnimation和FixedAnimation,ListAnimation将动画存储到固定的一个List中,用于重复更新的动画,
而FixedAnimation存储在Map中,使用名字进行调用,用于点击或者非自动更新的动画。
比如前面精灵类动画的就是添加到ListAnimation。
下面的这种写法就是FixedAnimation,这个动画是飞机入场,因为只使用了一次,所以使用了FixedAnimation。
2.2绑定在Button上的动画类
BaseButtonAnimation是BaseButton的动画类继承了BaseAnim的动画基类,通过提供Button的状态,设定Button的动画。
Animation | method | function |
---|---|---|
ZoomCenterButtonAnim | adjustButtonRect(Rect ori,boolean touchType) | 按钮放缩动画 |
ColorAnimation | adjustButtonBackGround(int ori,boolean type) | TextButton点击变色 |
待续 | … | … |
为Button设定放缩动画:
为Button设定颜色动画:
3.物体分组碰撞检测和死亡判定
使用设置ID和Name进行物体分组,通过物体分组,框架核心类会对对象进行分类处理。
只要使用了addToSpriteGroup(sprite)
的精灵对象就会自动进行碰撞检测,而对碰撞检测的结果会从
collision
中进行发回。
其中getOffender()
获得与之碰撞的对象,通过getIdentifier()
获取设定的对象分组,实行逻辑判断。
开启Debug模式会看见碰撞线。
4.屏幕扫描模式
屏幕扫描模式是用来优先响应屏幕点击、Button点击、和多点触控而设的,放置在不同情况下都能优化屏幕的刷新。
并且通过如下方式进行设置:
5.工具类
NetUtils
网络状态工具类PicUtils
图片处理工具类ServiceUtils
服务工具类ImageHelper
图型处理类DisplayUtils
数据转换类SpUtils
Sp简化工具类(可存储list和map
)ValidatorsUtils
正则表达式处理类
6.音频系统
6.1播放短音效
播放短音效,首先初始化SoundManager
用以加载音效。
完成以上步骤就可以播放了,当然尽量只向其中放置较短的音效,如背景音乐的长音频,请见播放音频。
6.2播放音频
播放音频适合例如背景音乐一样的音乐。
以上的就能实现播放了,下面还有一些其他的方法。
6.3通过短音效编曲
从SoundManager
中导入多段音频,快速播放达成音效的效果。
使用player.play();
进行播放。
7.使用网络
网络的使用可参考JustWe-WebServer中的介绍。
按照介绍操作就可以通过:
这样的简单方式绑定路由,而get/post数据可以直接使用http协议的get和post进行。
8.使用状态机精灵
可以通过上述的addState方法为状态机精灵添加一个任务,只有当第一个参数接口回调的返回值为真的时候,
才会去运行第二个参数提供的指令,如果返回为假则会运行第二项状态的判断。
状态的优先级由加入顺序提供。
9.CrashHandler崩溃守护
CrashHandler用于处理游戏的意外崩溃事件,初始化推荐在Application中进行。
CrashHandler可以自动保存机型和异常日志,以便让开发者找到问题所在。
使用以上语句即可自动保存错误日志。
还可以:
10.使用蓝牙
10.1开启、关闭服务
使用蓝牙需要新建BlueToothServer
对象,传入上下文和MessageBack接口。
服务初始化之后如未打开蓝牙,系统会自动提示应用要求蓝牙开启。
通过MessageBack接口可以接收到发送、接收、以及扫描设备信息,采取对应操作就可以获得数据。
关闭服务时请使用blueToothServer.unBindService();
关闭服务。
10.2扫描设备
使用blueToothServer.doDiscovery();
进行设备扫描,返回结果在OnMessageBack()接口的
getDevice()方法接收。
使用blueToothServer.ensureDiscoverable();
允许被扫描。
使用blueToothServer.getPairedDevices();
返回已配对的设备列表。
10.3发送消息
在配对成功之后就可以使用blueToothServer.sendMessage(String msg);
发送消息了。
同时,消息的接收也可以从getMessage()接口中获得。
11.SQLite数据库
SQLite使用了IOC的模式。
11.1创建表
新建的创建表需要继承Node并且写出注解类。
11.2增删查改
12.相关资料
项目地址:https://gitee.com/openneusoft/just-we-engine
IDE官方下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio
感谢分享。
感谢分享