ScreenSharedPtr screenNode = getScreen();//获取屏幕单例
turnleftcontrolNode_ = screenNode->lookupNode<EmptyNode2D>(
"#turnleftcontrol");//lookupNode获取节点,其中模板参数是节点类型,函数的实参是节点的别名
经过测试,节点名不能和节点别名一样...
十六、如何通过代码获取自定义属性
以bool属性为例,自定义的bool属性需要通过类模板DynamicPropertyType来生成对应的类并获取
示例
using BoolDynamicPropertyTypeSharedPtr = shared_ptr<DynamicPropertyType<bool>>;
using BoolDynamicPropertyType = DynamicPropertyType<bool>; BoolDynamicPropertyTypeSharedPtr turnleft_;
turnleft_ = make_shared<BoolDynamicPropertyType>("turnleft");//"turnleft"是kanzi工程中自定义属性的属性名
十七、如何通过代码获取自定义的消息
自定义消息需要通过模板类DynamicMessageType<MessageArguments>来获取
using MessageDynamicMessageTypeSharedPtr =shared_ptr<DynamicMessageType<MessageArguments>>;
using MessageDynamicMessageType = DynamicMessageType<MessageArguments>; MessageDynamicMessageTypeSharedPtr turnleftmessage_;
turnleftmessage_=make_shared<MessageDynamicMessageType("turnleftmessage");//"turnleftmessage"是kanzi工程中自定义消息的消息名
十八、如何通过代码实现自定义消息的触发
首先需要将消息和触发函数进行一个绑定,消息类似于Qt中的信号,触发函数类似于Qt中的槽函数,与Qt稍微不同的是,添加消息触发需要指定节点
turnleftcontrolNode_->addMessageHandler(*turnleftmessage_,
bind(&Class::onTurnLeftMessageReceived, this));
addMessageHandler的第一个参数是消息类型,第二个参数是成员函数对象,该成员函数对象通过bind生成
上述代码就表示节点turnleftcontrolNode_会接收消息turnleftmessage_,当收到消息的时候,会触发成员函数&Class::onTurnLeftMessageReceived
bool leftflag_ = turnleftcontrolNode_->getProperty(*turnleft_);
上述代码的意义就是获取节点turnleftcontrolNode_上的自定义bool属性*turnleft_的值,并初始化leftflag_
二十、如何通过代码设置属性值
turnright3DNode_->setProperty(Node::VisibleProperty, true);
上述代码的意义就是设置节点turnright3DNode_上的非自定义的visible属性为true;
vec4 color = mix(startcolor, endcolor, vTexCoord.x * coef);
其中,startcolor和endcolor是插值的起止颜色,vTexCoord.x纹理横坐标,作为横向插值系数,coef是一个因子,调整插值系数的大小,控制渐变程度
当滑动scroll view 2d时,改变stack layout的y方向的平移属性,如下图
此外,还要设置scroll view 2d的滑动范围以及滑动轴