65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.44/5 (2投票s)

2020年6月17日

MIT

5分钟阅读

viewsIcon

10917

downloadIcon

27

一个多用途、跨平台、免费且开源的 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:应用程序类的定义

在向 HeadersSources 文件夹添加新文件后,使用 kigs/scripts 中的脚本重新生成所需的平台解决方案。

如果您想为您的应用程序添加一些资源,您可能想将它们添加到 Ressources/toPack 文件夹中,以便将它们打包成 kpkg 存档文件并移动到资源文件夹。

全局配置文件

应用程序启动时,会搜索 GlobalConfig 文件,如果存在,则导入。全局配置文件名首先根据当前平台进行搜索,使用:GlobalConfig + 平台名称 + .xml

例如:GlobalConfigWin32.xmlGlobalConfigAndroid.xml 等。

如果未找到,则搜索“GlobalConfig.xml”。

此文件可用于创建应用程序范围的实例。此文件不是必需的。Sample8 示例中没有 GlobalConfig 文件。

应用初始化文件

AppInit.xml 文件是必需的。它用于初始化 WindowRenderingScreen

这是 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 组成。

Sample 8 first sequence snapshot

带有聚光灯的节点正在动画

<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”按钮可以启动第二个序列

Sample 8 second sequence snapshot

Kigs 工具嵌入式检查器和编辑器

当在DebugReleaseTools模式下编译时,可以通过按 CTRL + F1 键访问嵌入式实例检查器/编辑器。

Sample 8 kigs tools

您可以检查应用程序中的所有 CoreModifiable 实例,并使用Hierarchy / Filter文本输入框搜索它们。

例如,访问在线 Sample8 版本,按 CTRL+F1,然后在Filter输入框中键入“button”,然后从列表中单击“camup_btn”,并在“Attributes”窗口中查看按钮的所有属性。然后,您可以调整按钮的大小、位置、颜色……。

在此 Wiki 部分查找所有示例代码,请参阅 Sample8 项目(浏览代码)。

已在此系列中发布

  1. Kigs框架介绍 (1/8) - 概述
  2. Kigs框架介绍 (2/8) - CoreModifiable
  3. Kigs框架介绍 (3/8) - 属性
  4. Kigs框架介绍 (4/8) - 方法
  5. Kigs框架介绍 (5/8) - CoreItem
  6. Kigs框架介绍 (6/8) - 信号,槽,通知
  7. Kigs框架介绍 (7/8) - Lua绑定
  8. Kigs框架介绍 (8/8) - 数据驱动应用程序

历史

  • 2020年6月17日:初始版本
  • 2023年3月1日:框架重构后文章更新
© . All rights reserved.