Files
CocosCreatorTutorial/ToggleOne/README.md
2018-12-23 11:19:34 +08:00

77 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ToggleOne
> 前言:如果在游戏中使用开关组件的话,一般会使用[Toggle](https://docs.cocos.com/creator/api/zh/classes/Toggle.html#toggle)。可是总有一些开关的两态是不重叠图片会有一大一小。这个时候还使用Toggle的话就会出现问题。那可以使用将要介绍的自定义控制ToggleOne。组件的功能跟Toggle一样只是在选中与未选中时只显示对应的图片另一张会隐藏。文章最后会给出一个Demo给大家参考。
### 效果
![normal.png](https://upload-images.jianshu.io/upload_images/2315803-1addc2013dfd338f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![checked.png](https://upload-images.jianshu.io/upload_images/2315803-5107912d7b1c6207.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
###代码实现
代码很简单,主要是查看[Toggle源码](https://github.com/cocos-creator/engine/blob/915ccf4e6e273f9003c14560ab1e48f9fa090132/cocos2d/core/components/CCToggle.js#L47),来进行实现的。感兴趣的朋友可以自己查看源码。
~~~
cc.Class({
extends: cc.Component,
properties: {
isChecked: {
default: true,
tooltip: CC_DEV && 'i18n:COMPONENT.toggle.isChecked',
notify: function () {
this._updateCheckMark();
}
},
background: cc.Sprite,
checkMark: cc.Sprite,
/**
* !#en If Button is clicked, it will trigger event's handler
* !#zh 按钮的点击事件列表。
* @property {Component.EventHandler[]} clickEvents
*/
checkEvents: {
default: [],
type: cc.Component.EventHandler,
tooltip: CC_DEV && 'i18n:COMPONENT.button.click_events',
}
},
onLoad() {
this._updateCheckMark();
},
onEnable() {
this.node.on(cc.Node.EventType.TOUCH_END, this.toggle, this);
},
onDisable() {
this.node.off(cc.Node.EventType.TOUCH_END, this.toggle, this);
},
toggle(event) {
console.log('ToggleOne');
this.isChecked = !this.isChecked;
this._updateCheckMark();
if (this.checkEvents) {
cc.Component.EventHandler.emitEvents(this.checkEvents, this, this.isChecked);
}
},
setChecked(isChecked) {
this.isChecked = isChecked;
this._updateCheckMark();
},
_updateCheckMark() {
if (this.checkMark) {
this.checkMark.node.active = !!this.isChecked;
}
if (this.background) {
this.background.node.active = !!!this.isChecked;
}
},
});
~~~
###最后