跳到主要内容

应用开发概述

开发应用使用 .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 来包含外部文本。