应用开发概述
开发应用使用 .clx 为扩展名的文本程序,程序包含规格/脚本/数据。在主机上运行调试,并自动生成二进制格式的文件用来部署到设备上。
名词
- bios : 系统组件,用来切换cartridge和做配置
- cartridge : 磁带盒,功能盒子,用来表示一个应用
- setting : 配置功能
BIOS
- 控制所有硬件驱动
- 操作cartridge间的切换
- 控制cartridge的生命周期和状态
- 控制后台服务: 生命周期,数据访问
后台服务
- 系统内建多种服务
- cartridge可以注册后台服务
- 可以通过key来访问后台服务的数据和对后台服务发起请求
- 只有后台服务和当前使用的cartridge能获得运行,其他cartridge会被挂起或者释放
应用开发文件格式
一个标准文件例子:
coloX-4
version 1
style:game
name:test001
author:tester
desc:this is a demo
__lua__
function _draw()
cls()
print('this is a demo',10,50,red)
end
__gfx__
__gff__
__map__
__sfx__
__music__
coloX-4 表示应用对应的设备规格,不同规格对应不同的分辨率/颜色数目
version 表示应用需要的设备规格的最小版本
style/name/author/desc 是文本信息
__?__ 表示各种数据区段
__lua__
代码区,里面是lua脚本,可以使用 #include filename 来包含外部脚本文件,方便用外部编辑器编辑,或者包含公共函数文件。
可以使用 #blob filename 来定义lua字符串变量,表示把文件内容直接转换为lua的字符串。
可以使用 #blob :z:1 filename 来定义lua字符串变量,表示把文件内容做压缩后直接转换为lua的字符串。
可以使用 #blob :za:2048 filename 来定义lua字符串变量数组,表示把文件内容做2048字节分割,然后单独压缩后直接转换为lua的字符串数组。
- z可以替换为e/g 表示不同的压缩算法,e表示adpcm音频压缩,g表示g711a音频压缩 ,e/g用于方便的给wave接口提供音频数据。
下面例子把temp.png图像内容定义为一个lua字符串变量,并加载为图像:
local tempimg=
#blob temp.png
local png=img_load(tempimg)
function _draw()
cls(dark_green)
img_draw(png,0,0,1)
--img_drawex(png,0,0,1,100,100,40,40)
end
下面例子把audio.pcm音频拆分为数组,并用adpcm压缩:
local tempimg={
#blob :ea:22050: audio.pcm
}
应用运行时,会查找特定的函数在特定的阶段运行.
function _init() end -- 应用加载后运行一次
function _update() end -- 应用激活状态下,每帧运行一次
function _draw() end -- 应用激活状态下,需要刷新画布时运行一次(基本上每帧一次)
function _idle_update() end -- 应用idle状态下,每帧运行一次
function _idle_draw() end -- 应用idle状态下,需要刷新画布时运行一次(基本上每帧一次)
function _svcind(seq,name,path) end --监听服务数据通知
__gfx__
精灵图像数据区,使用16进制字符串表示的图像数据,最大数据长度不超过规格定义的数据长度。
也可以用 #include filename 来包含外部文本。
可以使用 #png filename 来直接倒入png图片,注意,使用#png后,其它gfx数据都会丢弃。
例子:
__gfx__
#png png/bg.png
__gff__
精灵标志数据,使用16进制字符串表示,最大长度不超过规格定义的精灵数量。
也可以用 #include filename 来包含外部文本。
__map__
地图数据,使用16进制字符串表示,最大长度不超过规格定义的地图大小. 由于每个地图元素是2字节数据,所以数据要用小字节优先的方式放置。
也可以用 #include filename 来包含外部文本。
__sfx__
音效数据,使用特定格式的16进制字符串表示,每行一个音效定义,最多64行。
例子: 002800001a0551c055180550c05513055000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005000050000500005
也可以用 #include filename 来包含外部文本。
__music__
音乐数据,使用特定格式的16进制字符串表示。
例子:
__music__
00 00044208
00 00044108
00 00010304
00 00010304
01 00010203
00 00010203
00 00010305
00 00010306
00 00010305
00 00010306
00 00010245
02 00010243
也可以用 #include filename 来包含外部文本。
__sfxd__ / __musicd__
音效数据的另外一种格式,使用16进制字符串表示,按照内存块直接存放。
也可以用 #include filename 来包含外部文本。