2015-1-23 00:43 /
懒得码废话,直接说重点。
Maisakura是为2D AVG专门设计的跨平台的引擎。
支持多线程脚本和类似于SiglusEngine的omv的效果视频。
在硬件垃圾的情况下,也有比较好的运行速度。

API List:
================================================
说明:string都是utf8 string,坐标为UI坐标系计算方式(即窗口左上角为0,0)。
所有的API变量(除了FloatToInt都是整形)

ColorSet(uchar r, uchar g, uchar b, uchar a, int index)
设定颜色表。
index范围从0到63,非范围内的index都不会被添加。


ExecSubScript(string filename)
*未公开的API
执行一个副脚本。每个线程只能执行一个副脚本。
作为跨平台插件

CursorShow(int flag)
设定鼠标指针显示
Flag – 1显示鼠标指针 flag-0 隐藏鼠标指针
在台式平台上,默认显示鼠标指针
在移动平台上,默认隐藏鼠标指针

GraphTransfer
*未公开的API

MessageInfo(string info, string title, string bstr1, string bstr2)
弹出一个消息窗口
四个参数都可以设定成空字符串,空字符串的位置将会用预设文本代替
Info-消息文字
Title-消息窗口的标题文字
Bstr1-按键1的文字
Bstr2-按键2的文字
返回值:0--按键1被点击 1—按键2被点击

ExitMode()
退出Maisakura Engine,自动保存全局变量

FloatToInt(real val)
从一个浮点类型的值转换成一个整型值
返回值:转换后的整型值

GraphLoad(uint index, string filename)
用图片初始化一个Sprite

GraphRGBLoad()
SetWindowSize(uint w, uint h)
设定窗口大小
在调用该API之前,使用所有的图形API都不会成功。
同时这个API也是引擎窗口创建的函数,这个API只能被调用一次

HistoryTextGet(uint index)
获取指定编号的文字

InputGetCursX()
获取鼠标x坐标
返回值:鼠标当前的x坐标

InputGetCursY()
获取鼠标y坐标
返回值:鼠标当前的y坐标

InputGetCtrl()
获取ctrl按键状态
返回值:0-ctrl没被按下 1-ctrl被按下

InputGetRightClick()
获取鼠标右键状态
返回值:0-右键没被按下 1-右键被按下

InputGetLeftClick()
获取鼠标左键状态/获取触屏点击状态
返回值:0-左键没被按下 1-左键被按下

Load(unit index)
读取存档,index 0-999
说明:存档0的话,会被保存成save000.sav的格式

注释:Motion类的详见Motion注释
MotionAlpha(loop, type, time, srcAlpha, dstAlpha, index)
Type 0—绝对位置 1—相对位置

MotionAlphaStop(uint index)
停止这个Sprite的alpha动画

MotionAlphaTest(uint index)
返回:1—正在执行Alpha动画,0—没有

MotionAnim(uint time, uint index)
前期是这个SpriteNode是用SpriteNode的方式初始化的
Time-每帧显示的时间

MotionAnimStop(uint index)
停止这个Sprite的帧序动画

MotionAnimTest(uint index)
返回:1—正在执行帧序动画,0—没有

MotionMove(int loop, int type, Uint time, int srcx, int srcy, int dstx, int dsty, uint index)
Type 0—绝对位置 1—相对位置

MotionMoveStop(uint index)
停止这个Sprite的平移动画

MotionMoveTest(uint index)
返回:1—正在执行平移动画,0—没有

MotionRotation(loop, type, time, srcAngle, dstAngle, index)
Type 0—绝对位置 1—相对位置

MotionRotationStop(uint index)
停止这个Sprite的旋转动画

MotionRotationTest(uint index)
返回:1—正在执行旋转动画 0—没有

MotionScale(loop, type, time, srcFactorX, srcFactorY, dstFactorX, dstFactorY, index)
Type 0—绝对位置 1—相对位置

MotionScaleStop(uint index)
停止这个Sprite的Scale动画

MotionScaleTest(uint index)
返回:1—正在执行缩放动画,0—没有

MotionZoom(loop, type, time, srcFactor, dstFactor, index)
Type 0—绝对位置 1—相对位置

MotionZoomStop(uint index)
停止这个Sprite的Scale动画

MotionZoomTest(uint index)
返回该对象是否在执行zoom动画,是—1,否—0
如果zoom被暂停了

MotionPause(int flag, uint index)
暂停/恢复 该Sprite的全部动画动作(暂停—0,恢复—1)

Motion类API的注释:
Type已经说明
Loop 重复次数,-1表示无限循环, 0表示不执行。


Movie(string filename)
视频播放期间,引擎其他活动都会暂停,直到视频播放结束

MovieState()
*未公开的API

MovieStop()
停止播放视频

GraphSetParts(uint x, uint y, uint w, uint h, string filename, uint index)
将Sprite的一部分用指定图片更新。
X,y,w,h就是原始图片被更新的区域
Filename指定了用于更新的图片名
一般我们用于立绘和表情的合成

GraphUnLoadParts(uint index)
取消区域更新,还原图片

GraphSubTextCore(uchar R, uchar G, uchar B, uint shadow, uint outline, uchar outR, uchar outG, uchar outB, uint w, uint h, uint index)
设定文字列的各种属性。
RBG就是文字列本来的颜色。
Shadow就是阴影大小,建议值为0-5
Outline就是描边的大小,建议值为0-3
OutR OutB outB为描边的颜色,如果outline为0,那么这三个值可以随便填

GraphSetMovie(string filename, uint w, uint h, uint index)
加载一个效果视频(效果视频的格式在下面说)
W,h指定播放的大小
类似于SiglusEngine的omv

GraphHit(int flag, uint index)
图片是否被点击/鼠标箭头掠过Sprite。
Flag—0 检查鼠标是否点击
Flag—1 检查鼠标是否略过

GraphSetAlpha(uchar val, uint index)
设定图形的alpha:0-255

GraphSetBlend(int flag, uint index)
设定图形的blend方式.
Flag-1,原始图片带alpha,如32bit
Flag-0,原始图片不带alpha,直接copy,如24bit

GraphSetDraw(int flag, uint index)
Flag-1 显示Sprite
Flag-0 隐藏Sprite

GraphSetNull(uint index)
销毁一个Sprite,并且释放内存

GraphSetOperation(int x, int y)
设定旋转中心(屏幕的坐标)

GraphSetCopyTexture(uint index)
拷贝一个Sprite但是,被拷贝对象的动画,缩放状态,坐标将不会被拷贝。
同时也不能拷贝使用视频、文字方式初始化的Sprite

GraphSetText(string text, uint index)
用文字初始化一个Sprite

GraphSetTile(uint w, uint h, uint colorIndex, uint index)
指定纯色图来初始化一个Sprite
W和H就是图片的大小
colorIndex就是之前ColorSet中所添加的。如果引用一个未定义的Color值,该API将会调用失败。

GraphSetClip(uint x, uint y, uint w, uint h, uint index)
设定裁剪区域
比如,一个1280*720的图,我设定成(0,0,100,100)
那么就只会显示这个区域的图片数据
裁剪区域可以随时更改

GraphSetXY(uint x, uint y)
设定图片显示的坐标

GraphSetZ(uint factor)
设定Zoom(就是Scale,不过factorx = factory)

Rand()
返回一个随机整数

SaveThumbSize(uint w, uint h);
设定存档截屏图片的大小

SaveData(uint index)
Index : 0-999
返回该存档是否存在

SaveWrite(uint index)
Index : 0-999
保存存档

SoundUnLoad(uint index)
释放一个音频对象,index从0-255

SoundLoad(string filename, uint index)
加载一个音频文件
Index从0-255

SoundSilentOn(uint flag)
全部暂停播放
Flag-1 恢复播放 flag-2 重新开始

SoundStop(uint index)
停止播放音频,但是还在占用内存中

SoundType(uint type, uint index)
将index编号设定成一个用户自定义类型
有啥用?自己看下一个API

SoundTypeVol(uint vol, uint type)
将这个type的声音全部用设定成指定音量大小(0-100)
用于CV语音音量控制

SoundVol(uint vol, uint index)
单独设定一个index的音量(0-100)

GraphTextColor(uchar R, uchar G, uchar B, uint index)
如果你想拥有更复杂的效果,你可以调用GraphSubTextCore API
设定文字列的颜色

GraphTextCore(int flag, uint index)
*未公开的API

GraphTextOutline(uchar R, uchar G, uchar B, uint size, uint index)
单独设定文字描边大小及其颜色
建议size为0-3

GraphTextPrint(int type, uint index)
显示文字
Type—0 等同于普通图片的显示
Type—1 文字逐个显示

GraphTextShadowDist(uint val, uint index)
单独设定文字阴影大小
建议为0-5

GraphTextSize(uint w, uint h, uint index)
单独设定文字尺寸,目前来说,w一定等于h

GraphTextSpace(uint xs, uint ys, uint index)

GraphTextSpeed(uint val, uint index)
设定文字显示速度,为一个毫秒值,表示一个文字显示所需要的时间。

GraphTextTest(uint index)
如果文字显示使用了逐个显示效果,该API可以测试文字是否完成显示动画。
返回1—动画进行中
返回0—动画已经完成,或者这个Sprite当前没有执行文字显示动画

注释:和Thread有关的详见下面的简易教程
ThreadExit(uint index)
强行退出一个线程 index:1-39

ThreadRaise(uint index)
警告:不要轻易使用
唤醒一个线程index:1-39

ThreadSleep(uint index)
警告:不要轻易使用
暂停一个线程index:1-39

ThreadStart(uint index)
创建一个线程index:1-39

ThreadWait(uint index)
等待一个线程index:1-39

TimerGet(uint index)
获取这个计时器从创建开始,到现在走过的毫秒数。
最大计时范围大概是0-30天(普通的gal也不会运行这么久=。=)

TimerCreate(uint index)
创建一个计时器,并且开始计时
如果这个计时器已经存在,那么就重新初始化

TimerSuspend(uint index)
暂停一个计时器

WindowMode(int flag)
Flag—1全屏
Flag—0 窗口模式
移动设备上该API会自动无视
桌面平台默认是窗口模式

HistoryNameGet(uint index)
获取对应的index的名字string

GraphLoadNode(string filename, uint frame, uint index)
使用了这个API之后,这个Sprite将会被初始化成帧序图模式,用于MotionAnim
Frame就是内部的帧序号,序号是从0开始,一个Sprite的帧序图应该依次加载

GraphUnLoadNode(uint frame, uint index)
删除指定编号的帧序图,假设某Sprite加载了0-10 共11张帧序图,我删去了5号图。那么原来的6号图就变成现在的5号了,依次前置。
这个API应该尽量不用,用于动画播放的帧序图应该一次性加载好。

GraphClearNode(uint index)
删去帧序图的全部帧序图数据,但是这个Sprite还是帧序图模式,需要使用unload重置

GraphTextDrawArea(uint x, uint y, uint w, uint h, uint index)
设定这个Sprite的绘制区域,坐标和长宽对应原始图片。

PushHistory(string name, string text)
假设我的History记录被设定成100条,那么前面的早期记录,将会被弹出。
比如前面的第100条会在新纪录写入时被弹出。
更改History记录大小,详见相关API
如果你不理解History记录是啥,下面有说明。

GraphSetMaskAlpha(uchar val, uint index)
设定alpha mask的alpha值,如果该Sprite没有加载alpha mask,这个API将会调用失败

MotionMask(loop, type, time, srcAlpha, dstAlpha, index)
Alpha mask动画,一般用于过场

MotionMaskStop(index)
MotionMaskTest(index)
MotionMaskPause(index)

SetTitle(string title)
设定游戏标题

关于内置线程系统的说明:
脚本多线程应该用于这种情况:需要计算大量的数据,或者加载一个很庞大的数据(一般来,Gal是不会用到这么复杂的数据量的,应该相信引擎单线程的处理能力)
线程的暂停或恢复应该尽量(根本)不用,除非你很清楚线程机制。

关于效果视频的说明:
效果视频用于某些引擎的移植,或者是简化游戏开发时候使用。
视频的格式必须是H.264-8bit编码模式,、用h264封装(而不是mp4 mkv之类的)
Profile推荐为main。
视频的帧率是30fps,这个不能有变化。
建议:不要加载分辨率过高的视频,也不要同时加载多个效果视频。


History记录说明:
AVG系统中一般会有已读系统的。
一项历史记录包括名字列和文字列。其中文字列可以省略。
Maisakura为了提供后期的通用性,于是所有的文字显示都用Sprite来代替。
不会像其他AVG引擎一样,会自动添加历史记录。
Tags: Maisakura
#1 - 2019-9-1 11:02
请问是停止开发了吗?