Kigs框架介绍 (8/8) - 数据驱动应用程序






1.44/5 (2投票s)
一个多用途、跨平台、免费且开源的 C++ 框架。数据驱动型应用
目录
引言
Kigs 框架为数据驱动型应用提供了一个模板。数据驱动型应用允许您主要使用 XML 和/或 Lua 文件在不同的屏幕(称为序列)之间导航。然而,Kigs 框架仍然是一个 C++ 框架,开发一个完整而复杂的应用可能需要用 C++ 编写一部分代码。
以下是基于 Kigs 框架的一个更复杂的数据驱动型应用的示例
玩转 YouTube Data API v3(公共数据)和 Kigs 框架
使用模板
有关详细信息,请参阅 Kigs 框架 GitHub 入门 Wiki 页面。
要生成一个新的数据驱动型应用,请转到 kigs/projects 文件夹并启动(双击)CreateNewDDProject.vbs 脚本。在对话框中输入项目名称,然后单击 OK。将您的项目添加到 CMakeFile.txt 中,然后转到 kigs/scripts 并运行其中一个脚本来生成所需的平台解决方案。
数据驱动型应用概述
使用 CreateNewDDProject.vbs 创建的默认新数据驱动型应用在 kigs/projects/YourProjectName/Ressources 文件夹中包含一些资源文件(数据)。构建时调用的资源管理器将根据 AssetManagerRules.json 文件中的规则处理此文件夹中的资源。
主要文件是
- AppInit.xml:包含主窗口/屏幕信息
- LaunchScreen.xml:包含首次启动的屏幕(默认为带有淡入/淡出效果的 Kigs Logo)
- Screen_Main.xml:包含第二次启动的屏幕(默认为蓝色屏幕)
kigs/projects/YourProjectName/Headers 文件夹包含两个头文件
- KigsApplication.h:一些通常无需编辑的定义
- YourProjectName.h:应用程序类的声明
kigs/projects/YourProjectName/Sources 文件夹只包含一个文件
- YourProjectName.cpp:应用程序类的定义
在向 Headers 或 Sources 文件夹添加新文件后,使用 kigs/scripts 中的脚本重新生成所需的平台解决方案。
如果您想为您的应用程序添加一些资源,您可能想将它们添加到 Ressources/toPack 文件夹中,以便将它们打包成 kpkg 存档文件并移动到资源文件夹。
全局配置文件
应用程序启动时,会搜索 GlobalConfig 文件,如果存在,则导入。全局配置文件名首先根据当前平台进行搜索,使用:GlobalConfig + 平台名称 + .xml。
例如:GlobalConfigWin32.xml、GlobalConfigAndroid.xml 等。
如果未找到,则搜索“GlobalConfig.xml”。
此文件可用于创建应用程序范围的实例。此文件不是必需的。Sample8 示例中没有 GlobalConfig 文件。
应用初始化文件
AppInit.xml 文件是必需的。它用于初始化 Window
和 RenderingScreen
。
这是 Sample8
使用的 AppInit.xml 文件
<?xml version="1.0"?>
<!-- create application window -->
<Inst N="Sample8" Type="Window">
<!-- Position.x is from screen left side if positive, centered if -1 and from right side if negative ( and not -1 )
Position.y is from screen upper side if positive, centered if -1 and from lower side if negative ( and not -1 ) -->
<Attr N="Position" V="[-1,-1]"/>
<Attr N="Size" V="[1280,800]"/>
<Attr N="FullScreen" V="false"/>
<Attr N="ShowMouseCursor" V="true"/>
<!-- create global rendering screen ( <=> rendering surface ) -->
<Inst N="theRenderingScreen" Type="RenderingScreen">
<Attr N="Size" V="[0,0]"/>
<!-- virtual screen size if 1280*800 -->
<Attr N="DesignSize" V="[1280,800]"/>
<Attr N="BitsPerZ" V="32"/>
<Attr N="Brightness" V="0"/>
<Attr N="BackDropColor" V="[0.0,0.0,0.0]"/>
<Attr N="VSync" V="true"/>
</Inst>
<!-- initialize localizations -->
<Attr T="string" N="LocalizationInitFile" V="InitLoc.json" Dyn="true"/>
</Inst>
可以通过 Window
实例上的动态属性设置一些选项
第一个序列文件
<Attr T="string" N="FirstSequenceFile" V="FirstSequence.xml" Dyn="true"/>
包含要启动的第一个序列的 XML 文件(默认为“LaunchScreen.xml”)。
包文件名
包文件可用于通过文件名指示文件的路径(此处未详述)。
<Attr T="string" N="BundleFileName" V="files.bundle" Dyn="true"/>
文件路径管理器初始化文件
用于初始化 FilePathManager
的文件(此处未详述)。
<Attr T="string" N="FilePathManagerInitFile" V="FilePathManager.json" Dyn="true"/>
本地化初始化文件
本地化管理器的初始化文件(此处未详述,但 Sample8
管理了一些本地化)。
<Attr T="string" N="LocalizationInitFile" V="Localization.json" Dyn="true"/>
包文件名
加载给定的包文件(此处未详述)。
<Attr T="string" N="PackageFileName" V="package.kpkg" Dyn="true"/>
序列
序列可以看作是应用程序的不同部分。例如,一个视频游戏应用可以有一个闪屏,然后一个介绍屏幕,然后是一个菜单屏幕,该屏幕可以访问参数屏幕、游戏本身和制作人员名单屏幕...。 在Kigs 数据驱动型应用中,这些每一个都将是一个序列(或几个序列)。
简单的序列只能由 UI2DLayer
定义。这是默认的闪屏
<?xml version="1.0"?>
<Inst N="UILayer" T="UI2DLayer">
<Attr N="Size" V="[1280,800]"/>
<Attr N="Priority" V="0"/>
<Attr N="RenderingScreen" V="RenderingScreen:theRenderingScreen"/>
<Inst N="Interface" T="UIItem">
<Attr N="Size" V="[1280,800]"/>
<Attr N="Opacity" V="0.0"/>
<Attr N="Dock" V="[0.500000,0.50000]"/>
<Attr N="Anchor" V="[0.500000,0.50000]"/>
<Inst N="Logo" T="UIImage">
<Attr N="TextureName" V="Logo.png"/>
<Attr N="Size" V="[1280,800]"/>
<Attr N="Priority" V="50"/>
<Attr N="Dock" V="[0.500000,0.50000]"/>
<Attr N="Anchor" V="[0.500000,0.50000]"/>
<Attr N="KeepRatio" V="false"/>
</Inst>
</Inst>
<Inst N="FadeIn_Launcher" T="CoreSequenceLauncher">
<Attr N="StartOnFirstUpdate" V="true"/>
<Attr N="Sequence">
<![CDATA[{
"Fade":[
{"Linear1D":[0.5,-16,0,"/theRenderingScreen->Brightness",0]},
{ "Wait" : [ 0.1 ] },
{ "Notification" : [ 0 , "StackSequence", "Screen_Main.xml" ] }
]
}
]]>
</Attr>
</Inst>
</Inst>
更复杂的序列通常定义为 DataDrivenSequence
。
DataDrivenSequence
可以有多个 UI2DLayer
和/或 Scene3D
子项,并管理序列之间的过渡。
这是 Sample8
的第一个序列(闪屏后) Screen_Main.xml。
过渡
可以向 DataDrivenSequence
添加 DataDrivenTransition
来确定从一个序列到另一个序列时的过渡效果。
这是一个简单的“淡出当前序列到黑色,然后从黑色淡入到当前序列的过渡”
<Inst N="transition" T="DataDrivenTransition">
<Attr N="PreviousAnim">
<![CDATA[{
"Fade":[
{"Linear1D":[0.5,0,-16,"/theRenderingScreen->Brightness",0]},
{ "SetValue1D" : [0.0,0.0,"Show" ]}
]
}
]]>
</Attr>
<Attr N="NextAnim">
<![CDATA[{
"Fade":[
{ "SetValue1D" : [0.0,0.0,"Show" ]},
{ "Wait" : [ 0.5 ] },
{ "SetValue1D" : [0.0,1.0,"Show" ]},
{"Linear1D":[0.5,-16,0,"/theRenderingScreen->Brightness",0]},
{ "Notification" : [ 0 , "InitScreen" ] }
]
}
]]>
</Attr>
</Inst>
Sample8 数据驱动型应用
Sample8 数据驱动型应用的C++ 代码与模板数据驱动型应用的完全相同。所有内容都在assets文件夹的XML / JSON / Lua文件中完成。
闪屏后,第一个序列由一个 3D 场景和一个带有某些按钮的 UI2DLayer
组成。
带有聚光灯的节点正在动画
<Ref P="Node3D:Light" DontAddAsSon="true">
<!-- Ask this Node3D to be "pivot" controled -->
<Upgrd N="PivotUp"/>
<!-- the pivot is set in global coordinates -->
<Attr N="IsGlobal" V="true"/>
<!-- around z axis -->
<Attr N="PivotAxis" V="[0.000000,0.000000,1.000000]"/>
<!-- animate pivot angle with an infinite loop -->
<Inst Name="animateLightPos" Type="CoreSequenceLauncher">
<Attr N="Sequence"><![CDATA[
{"animateLightPos":[
{"DoWhile":[1,
{"Linear1D":[4,0,6.28,"Angle"]} ]}
]}
]]>
</Attr>
<!-- animation sequence starts directly -->
<Attr N="StartOnFirstUpdate" V="true" />
</Inst>
</Ref>
通过按下本地化的“Next”按钮可以启动第二个序列
Kigs 工具嵌入式检查器和编辑器
当在Debug或ReleaseTools模式下编译时,可以通过按 CTRL + F1 键访问嵌入式实例检查器/编辑器。
您可以检查应用程序中的所有 CoreModifiable
实例,并使用Hierarchy / Filter文本输入框搜索它们。
例如,访问在线 Sample8 版本,按 CTRL+F1,然后在Filter输入框中键入“button”,然后从列表中单击“camup_btn
”,并在“Attributes
”窗口中查看按钮的所有属性。然后,您可以调整按钮的大小、位置、颜色……。
在此 Wiki 部分查找所有示例代码,请参阅 Sample8 项目(浏览代码)。
已在此系列中发布
- Kigs框架介绍 (1/8) - 概述
- Kigs框架介绍 (2/8) - CoreModifiable
- Kigs框架介绍 (3/8) - 属性
- Kigs框架介绍 (4/8) - 方法
- Kigs框架介绍 (5/8) - CoreItem
- Kigs框架介绍 (6/8) - 信号,槽,通知
- Kigs框架介绍 (7/8) - Lua绑定
- Kigs框架介绍 (8/8) - 数据驱动应用程序
历史
- 2020年6月17日:初始版本
- 2023年3月1日:框架重构后文章更新