打开工程目录painterengine/project
PainterEngine_Startup PainterEngine运行时框架,在当中定义了内存池大小,运行平台,窗体大小等应用的基本参数.
PainterEngine_Application 为功能逻辑运行框架,是编写用户代码的主要地方.
打开PainterEngine_Application.c,你可以看到三个函数
px_bool PX_ApplicationInitialize(PX_Application *pApp,px_int screen_width,px_int screen_height)
PainterEngine初始化函数,在该函数中,完成应用的一系列初始化操作,例如,在这个函数中将会先初始化PainterEngine的运行时环境,创建的PainterEngine应用的窗口,或者如果你有对音频播放的需求你可以你加上对音频的支持。
其中
pApp 是应用的描述结构
Screen_width 是当前屏幕的像素宽度
Screen_height是当前屏幕的像素高度
当然为了减少PainterEngine部署难度,你可以看到在这个函数已经调用了一个默认的初始化函数
PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height);
这个函数将初始化一个最初默认的运行时环境,并依据当前的屏幕创建了一个窗口。你可以在PainterEngine_Startup.c找到这个函数的详细实现,但在入门阶段和之后开发应用的大部分情况,你都可以直接使用这个默认的初始化函数或对其进行少量的修改,这个部分将在之后的章节详细介绍。
px_void PX_ApplicationUpdate(PX_Application *pApp,px_dword elpased)
PainterEngine的更新函数,在大部分的情况下,PainterEngine的运行环境会循环调用这个函数。
其中
pApp 是应用的描述结构
elapsed 是上次更新后经历的时间,单位是毫秒
对于其详细应用将在之后详细介绍
px_void PX_ApplicationRender(PX_Application *pApp,px_dword elpased)
PainterEngine的渲染函数,在大部分的情况下,PainterEngine的运行环境会循环调用这个函数(实时渲染),这个函数的主要作用是绘制图像,当然,为了让显示和动画看起来尽可能流畅,你应该保证这个函数在每秒钟能被执行60次以上。但如果你对渲染没有非常高的实时性要求,你可以降低其帧率以实现更低的渲染功耗。
在这个函数中,你可以看到两行已经写好的代码
px_surface *pRenderSurface=&pApp->runtime.RenderSurface;
PX_RuntimeRenderClear(&pApp->runtime,PX_COLOR(255,255,255,255));
其中,第一句中的pRenderSurface表示渲染表面
PX_RuntimeRenderClear表示用某种颜色清空当前的渲染表面(或者绘制背景色),在上面PX_COLOR是一个颜色生成函数,四个参数分别表示a,r,g,b颜色分量
简单来说,PainterEngine的绘制流程是,先将surface成背景色,然后在上面绘制图像,在下一帧,再将这个surface重新刷成背景色,再画下一帧的图像。
其中
pApp 是应用的描述结构
elapsed 是上次更新后经历的时间,单位是毫秒
对于其详细应用将在之后详细介绍
这个函数用户响应用户输入事件,最常见的是鼠标移动,键盘按键,触摸屏按键等事件
px_void PX_ApplicationPostEvent(PX_Application *pApp,PX_Object_Event e)
其中:
pApp是应用的描述结构
e是事件类型,
e.event有以下几种常用事件类型
#define PX_OBJECT_EVENT_ANY 0 //任意类型
#define PX_OBJECT_EVENT_CURSORMOVE 1 //光标移动
#define PX_OBJECT_EVENT_CURSORUP 2 //光标抬起
#define PX_OBJECT_EVENT_CURSORRDOWN 3 //光有右键按下
#define PX_OBJECT_EVENT_CURSORDOWN 4 //光标按下(触摸屏按下)
#define PX_OBJECT_EVENT_CURSORRUP 5 //光标抬起(触摸屏抬起)
#define PX_OBJECT_EVENT_CURSOROVER 6 //光标移动到区域*
#define PX_OBJECT_EVENT_CURSOROUT 7 //光标移出区域*
#define PX_OBJECT_EVENT_CURSORWHEEL 8 //光标滚轮*
#define PX_OBJECT_EVENT_STRING 9 //输入法字符串*
#define PX_OBJECT_EVENT_EXECUTE 10 //按钮按下
#define PX_OBJECT_EVENT_CURSORCLICK 11 //光标单击*
#define PX_OBJECT_EVENT_CURSORDRAG 12 //光标拖拽(触摸屏手指滑动)
#define PX_OBJECT_EVENT_VALUECHANGED 13 //值改变*
#define PX_OBJECT_EVENT_DRAGFILE 14 //文件拖进
#define PX_OBJECT_EVENT_KEYDOWN 15 //键盘按键按下
#define PX_OBJECT_EVENT_IMPACT 16 //对象碰撞(PX_World事件)
#define PX_OBJECT_EVENT_ONFOCUSCHANGED 17 //焦点改变
#define PX_OBJECT_EVENT_SCALE 18 //缩放
#define PX_OBJECT_EVENT_WINDOWRESIZE 19 //窗体尺寸改变
详细内容将在之后讨论
PainterEngine的所有绘制是基于px_surface(渲染表面)的
在PX_ApplicationRender中pApp->runtime.RenderSurface是默认的渲染表面,在这个渲染表面绘制的图像会被直接显示在渲染结果中
因为显示设备的不一样,或者用户调整显示窗口的大小,默认渲染表面的长度和宽度可能会发生变化
你可以使用
pApp->runtime.surface_width 来获取当前渲染表面的像素宽度
pApp->runtime.surface_height来获取当前渲染表面的像素高度