quick组件模块的使用以及简单案例
来源:互联网 发布:有什么手机短信软件 编辑:程序博客网 时间:2024/05/05 22:48
案例一 通知中心
在quick 中 通知中心的功能是通过组件来实现的
我们要想实现观察者的监听事件的功能,就需要添加一个组建,并导入相关方法
cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods()
cocos组建模块在 framework.cc.components.hehacior中
addEventListener, dispatchEvent, removeEventListener, removeEventListenersByTag, removeEventListenersByEvent, removeAllEventListenersForEvent, removeAllEventListeners, hasEventListener", dumpAllEventListeners,
添加监听者 function EventProtocol:addEventListener(eventName, listener, tag)
删除监听者 function EventProtocol:removeEventListener(handleToRemove)
删除所有监听者 function EventProtocol:removeAllEventListeners()
发送监听 function EventProtocol:dispatchEvent(event)
代码示例
-- [[EXNode.lua ]]local EXNode = class("EXNode", function ( ) return display.newNode()end)function EXNode:ctor( ) -- 添加一个通知的组建,并导入相关方法 cc.GameObject.extend(self):addComponent("components.behavior.EventProtocol"):exportMethods() --添加一个按钮,并在点击按钮时发送一个事件 或者消息 cc.ui.UIPushButton.new({normal ="caozuodian1.png"}) :align(display.CENTER, display.cx, display.cy) :onButtonRelease(function ( ) print("点击了子节点") self:dispatchEvent({name = "myEvent"}) end) :addTo(self) :pos(display.cx, display.cy)endfunction EXNode:onEnter( ) self:setTouchEnabled(true)endfunction EXNode:onExit( ) self:removeAllEventListeners()endreturn EXNode-- 主场景的使用 self.exNode = EXNode.new() self.exNode:addEventListener("myEvent", handler(self, self.onMyNews)) self:addChild(self.exNode)-- 添加一个监听者,并在出现相应事件时,执行onMyNews的方法function MainScene:onMyNews( ) print("有人点击了 exNode")end
案例二、 状态机的使用
什么是状态机:
1、状态机是通过状态变量来描述不同状态 2、状态机变量是互斥的 3、状态机的分割是状态机好坏的标准
状态机的好处:
1、降低整个系统的复杂性 2、容易扩展
3、容易维护
如何实现状态机:
1、通过不同的状态分割逻辑
2、通过面向对象思想来扩展和分割逻辑
Quick状态机的源码位于framework/cc/components/ behavior/StateMachine下
---如果让一个类拥有状态机,主要有两步: 1.创建状态机对象 2.初始化状态机,主要包括事件和回调函数local Player = class("Player", function ( ) return display.newSprite("caozuodian1.png")end) function Player:ctor( ) self:addStateMachine()endfunction Player:doEvent( event ) if self.fsm:canDoEvent(event) then self.fsm:doEvent(event) endendfunction Player:addStateMachine( ) self.fsm ={} cc.GameObject.extend(self.fsm):addComponent("components.behavior.StateMachine"):exportMethods() self.fsm:setupState({ initial = "idle", events = { {name ="move",from ={"idle","jump"},to="walk"}, {name ="attack",from ={"idle","walk"},to="jump"}, {name ="normal",from ={"walk","jump"},to="idle"}, }, callbacks = { onenterwalk = function ( ) print("move") end, onenterjump = function ( ) print("jump") end, onenteridle = function ( ) print("normal") end }, })end``return Player-- 主场景local MainScene = class("MainScene", function() return display.newScene("MainScene")end)EXNode = require("app.scenes.EXNode")function MainScene:ctor() cc.ui.UILabel.new({ UILabelType = 2, text = "Hello, World", size = 64}) :align(display.CENTER, display.cx, display.cy) :addTo(self) self.exNode = EXNode.new() self.exNode:addEventListener("myEvent", handler(self, self.onMyNews)) self:addChild(self.exNode) local bt1 = cc.ui.UIPushButton.new({normal ="caozuodian1.png"}) bt1:onButtonClicked(function ( ) player:doEvent("normal") end) bt1:pos(200, 60) self:addChild(bt1) Player = require("app.scenes.Player").new() player:setPosition(cc.p(100,150)) player:addTo(self) local bt2 = cc.ui.UIPushButton.new({normal ="caozuodian1.png"}) bt2:onButtonClicked(function ( ) player:doEvent("move") end) bt2:pos(200, 180) self:addChild(bt2) local bt3 = cc.ui.UIPushButton.new({normal ="caozuodian1.png"}) bt3:onButtonClicked(function ( ) player:doEvent("attack") end) bt3:pos(200, 300) self:addChild(bt3)endfunction MainScene:onEnter()endfunction MainScene:onExit()endfunction MainScene:onMyNews( ) print("有人点击了 exNode")endreturn MainScene
0 0
- quick组件模块的使用以及简单案例
- ActiveMQ的入门案例以及整合Spring的简单使用
- Quick-Lua TabelView的简单使用
- quick cocos2dx 组件使用要领
- vue组件简单案例
- nova组件中子模块简介以及简单功能理解
- nova组件中子模块简介以及简单功能理解
- 10、组件的使用 案例【swiper】
- 使用ireport设计jasperreport报表模板,以及简单的设计使用案例
- Applet的简单使用案例
- hashmap使用的简单案例
- libevent使用的简单案例
- uedit的简单使用案例
- Elasticsearch的简单使用案例
- dom4j的简单使用案例
- 过滤器的简单使用案例
- logging模块的简单使用以及tornado中的log简单介绍
- 委托、组件以及表面上的简单性
- 编程学习之装饰者模式
- server2012 vpn
- 《Linux内核设计与实现》——第3章(进程管理)
- innodb存储引擎的体系结构
- QXmlStreamReader与QXmlStreamWriter的使用
- quick组件模块的使用以及简单案例
- CodeForces 6B President's Office
- [Java] 组合与继承的区别
- 1005. Spell It Right (20)
- QLineEdit类
- C++ 二维动态数组创建及越界问题
- POJ-2503 Babelfish
- 2016-4-6--C#泛型变体(协变与抗变)
- Xen-Server 6.5 创建一个存储库(CIFS)