一、HelloWorld

使用VS打开kanzi工程,然后编辑代码

class Helloworld : public ExampleApplication
{
public:

    virtual void onConfigure(ApplicationProperties& configuration) KZ_OVERRIDE
    {
        configuration.binaryName = "helloworld.kzb.cfg";
//这行代码的作用是设置kzb文件所在的配置文件,如果不加,kzb中的资源也会生成,但是不会加载到显示界面,显示界面就是黑的
    }

    virtual void onProjectLoaded() KZ_OVERRIDE
    {
        // Project file has been loaded from .kzb file.
		kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("hello world"));
        // Add initialization code here.
    }
};

Application* createApplication()
{
    return new Helloworld;
}

其中

kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("hello world"));

表示在Debug模式下在控制台输出对应的message,message必须用括号括起来,因为kzLogInfo是个宏,该宏在Release模式下无效

其中,onConfigure函数作用是设置配置文件并在读取配置文件之前进行调用

其中,helloworld.kzb.cfg中包含了具体读取的文件名

而该文件名中包含了工程中的各种资源的路径和节点对象,通过该文件可以对节点对象进行操控和对资源进行加载

 

onProjectLoaded是一个回调函数,调用时机是在加载kzb文件并对kzb数据进行初始化完成后。所以,当执行到onProjectLoaded时,所有的资源就已经可用了

 

二、使用Kanzi API进行节点操作

接着在上述工程中创建一个2D文本,并重命名

重命名可以随便

然后再onProjectLoaded函数中添加如下代码

virtual void onProjectLoaded() KZ_OVERRIDE
{
    cout << __func__ << endl;
        // Project file has been loaded from .kzb file.
    kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("hello world"));
    ScreenSharedPtr screenNode = getScreen();//获取屏幕单例
    TextBlock2DSharedPtr text2dNode = screenNode->lookupNode<TextBlock2D>("#helloworld");//遍历TextBlock2D节点,查找别名为helloworld的TextBlock2D的节点
    //#helloworld,猜测该函数中会使用宏链接,通过前面的#将字符串转化为类名,从而生成对象
    text2dNode->setText("helloworld");//set接口
        // Add initialization code here.
}

注意:每次对kanzi工程重新编辑时,都要重新导出kzb文件,否则kzb文件和代码不一致,会访问非法内存

 

整体代码如下

// Use kanzi.hpp only when you are learning to develop Kanzi applications.
// To improve compilation time in production projects, include only the header files of the Kanzi functionality you are using.
#include <kanzi/kanzi.hpp>
#include <iostream>

using namespace kanzi;
using namespace std;

class Helloworld : public ExampleApplication
{
public:

    virtual void onConfigure(ApplicationProperties& configuration) KZ_OVERRIDE
    {
        configuration.binaryName = "helloworld.kzb.cfg";
    }

    virtual void onProjectLoaded() KZ_OVERRIDE
    {
		cout << __func__ << endl;
        // Project file has been loaded from .kzb file.
		kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("hello world"));
		ScreenSharedPtr screenNode = getScreen();
		TextBlock2DSharedPtr text2dNode = screenNode->lookupNode<TextBlock2D>("#helloworld");
		text2dNode->setText("helloworld");
        // Add initialization code here.
    }
};

Application* createApplication()
{
    return new Helloworld;
}

 

参考

《Kanzi官方文档》

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐