Kanzi学习之路(5):使用API修改节点属性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010977122/article/details/60574333

前一节介绍了属性系统,但是我们只是仅仅通过kanzi studio来修改其属性,今天我们来看看如何使用API来修改节点属性。


想要通过API修改节点属性,就要分两步走,一找到节点,二修改属性。今天内容也分这两部分。


获取节点

获取节点有两种方法,一是使用相对路径,二是使用alias。

一、使用相对路径

使用相对路径较容易,从一个你已知的节点,设置相对路径,就可以找到目标节点,如下:

TextBlock2DSharedPtr textblock = getScreen()->lookupNode<TextBlock2D>("/RootPage/Viewport 2D/Text 2D")


二、使用alias

Alias使用范围比较广,它不仅可以在kanzi studio中帮助我们获取一个节点,在kanzi engine 和脚本里也都适用。而且它可以克服使用相对路径的弊端,比如,你已经根据UI设计师提供的.kzb文件开发好了App,下次突然他们修改了某个节点的相对位置,oh,悲剧了,你又要去修改你的代码,这样就很麻烦,但是使用alias的话,就算相对位置发生了改变,你依然可以索引到它。但是使用之前我们都要将alias添加到想要索引的节点的资源字典上(resource dictionary)。下面我们来看看alias的使用先。

当你为一个节点创建一个alias,kanzi studio 会把它添加到最近有资源字典的节点。比如,Scene节点有一个资源字典,而且它有一个Text Block 2D节点,当你直接为Camera创建一个alias,kanzi studio就会把指向Text Block 2D节点的alias自动加到Scene节点的资源字典,具体步骤如下:

1、在kanzi studio 中,在Scene节点上按住ALT键,然后右击,选择Resource Dictionary。我们在windows菜单栏选择Context Resources,就会弹出Context Resources窗口。

2、在Text Block 2D节点上按下ALT并右击选择Alias,命名为Text 2D。这个时候我们点击Screen,就可以在Context Resources窗口看到我们刚刚添加的alias了。

这样我们就可以在kanzi engine中使用如下API获取该节点:

TextBlock2DSharedPtr textblock = getScreen()->lookupNode<TextBlock2D>("#Text 2D")

修改属性

属性系统前面我们已经了解过了,修改属性也有两种方法,一是使用setProperty(),二是使用提供的一些辅助函数。

一、setProperty()。

1、使用kanzi::Object::setProperty(const PropertyType<DataType>& propertyType, typename PropertyType<DataType>::DataType value)函数,kanzi里所有节点都继承自Object,所有它们都可以通过该方法设定节点的属性值,我们要传入一个属性类型和一个属性的值。这个属性既可以是系统定义的,也可以是你自定义的。

textBlock->setProperty(TextBlock2D::WidthProperty,20.3)
float fWidth = textBlock->getProperty(TextBlock2D::WidthProperty);


对于自定义的属性,我们要根据属性的类型,使用kanzi engine API定义相应节点的类型,然后使用setProperty修改属性,具体如下:
DynamicPropertyType<float> test("testtype");
textBlock->setProperty(test,20.3);
float fWidth = textBlock->getProperty(test);

二、使用辅助函数修改属性。
kanzi针对一些常用的节点属性会提供修改获取的辅助方法,如setWidth()、getWidth()等,如下:

textBlock->setText("Hello world!");

猜你喜欢

转载自blog.csdn.net/u010977122/article/details/60574333