kanzi API案例

背景:kanzi的帮助文档都是api简单含义,很少有案例的说明。每一次使用API都是一个摸索的过程。记录一下用到的API案例。

1. 按钮事件

界面有一个按钮,点击后C++处理对应的事件

void MyKanzi::onProjectLoaded() {
Button2DSharedPtr button2D_switch= getScreen()->lookupNode<Button2D>("/RootPage/Grid Layout 2D/Stack Layout 2D/Button");
button2D_switch->addMessageHandler(Button2D::PressedMessage, bind(&MyKanzi::onBtnSwitchClicked, this, std::placeholders::_1));
}

void MyKanzi::onBtnSwitchClicked(ButtonConcept::PressedMessageArguments& messageArguments)
{
    (void)messageArguments;
    std::cout << __FUNCTION__ << "\n";
}

说明:

  1. onProjectLoaded里找到按钮对象,添加消息处理,可以把按钮路径换成别名
  2. 在处理函数onBtnSwitchClicke里添加业务逻辑

2. 查找节点

  1. getScreen()对应根节点Screen
  2. getRoot()对应根节点Screen/RootPage
Node2DSharedPtr test = getScreen()->lookupNode<Node2D>("/RootPage/Empty Node 2D");
Node2DSharedPtr test = getRoot()->lookupNode<Node2D>("/RootPage/Empty Node 2D");
Node2DSharedPtr test2 = getScreen()->lookupNode<Node2D>("/#Empty Node 2D_1");

说明:
3. lookupNode会递归查找子节点对象

3. 动态创建图片节点

  1. 找到一个父节点
Node2DSharedPtr test = getRoot()->lookupNode<Node2D>("/RootPage/Empty Node 2D");
  1. 创建图片节点
Image2DSharedPtr img = Image2D::create(getDomain(), "img");
  1. 创建纹理资源
TextureSharedPtr t = dynamic_pointer_cast<Texture>(getResourceManager()->acquireResource("kzb://untitledkanzisimulate/Textures/Default Texture"));         
  1. 为图片节点设置纹理
img->setImage(t);
  1. 添加子节点
test->addChild(img);

4. kanzi导出kza,kza转kzb

kanzi->edit->User Preferences
勾选kza选项
在这里插入图片描述
正常导出kzb时候,会同时生成kza
在这里插入图片描述
kza是xml结构,可以读写。
kza2kzb.exe命令可以把kza转为kzb

"D:\Program Files\Rightware\Kanzi 3_6_10_170\Studio\Bin\kza2kzb.exe" untitledkanzisimulate.kza untitled.kzb

5. 定时器

kanzi 3.6.10

创建定时器
kanzi::TimerSubscriptionToken timerid = addTimerHandler(this->getMessageDispatcher(), kanzi::chrono::milliseconds(500), KZU_TIMER_MESSAGE_MODE_REPEAT, bind(&MyClass::onTimeOutEventHandler, this));

删除定时器
removeTimerHandler(this->getMessageDispatcher(), timerid);

处理定时器
void MyClass::onTimeOutEventHandler()
{

}

kanzi 3.9.8

创建定时器
kanzi::MainLoopTimerToken mainLoopTimerToken = getMainLoopScheduler()->appendTimer(UserStage,
        kzMakeFixedString("updateTimer"),
        MainLoopScheduler::TimerRecurrence::Recurring,
        kanzi::chrono::nanoseconds(1000000000),//1s
        [this](kanzi::chrono::nanoseconds elapsedDuration, unsigned int repeatCount) {
            this->onTimeOutEventHandler(elapsedDuration, repeatCount); });

删除定时器
getMainLoopScheduler()->removeTimer(mainLoopTimerToken);

处理定时器
void MyClass::onTimeOutEventHandler(kanzi::chrono::nanoseconds elapsedDuration, unsigned int repeatCount)
{
    kzLogDebug(("onTimeOutEventHandler={}:{}", elapsedDuration.count(), repeatCount));
}

6. 动态属性

mKzPropertyTypeSpeed = new DynamicPropertyType<float>("speed_move");
float speed = node->getProperty(*mKzPropertyTypeSpeed);
node->setProperty(*mKzPropertyTypeSpeed, (float)speed);
or
node->setProperty(DynamicPropertyType<float>("speed_move"), (float)speed);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值