1.CCNotificationCenter废弃了,建议用EventListnerCustom
layer._listener1 = cc.EventListenerCustom:create("component game over", onEvent)
local eventDispatcher = cc.Director:getInstance():getEventDispatcher()
eventDispatcher:addEventListenerWithFixedPriority(layer._listener1, 1)
2.UILabel -------> Text
3. Node节点监听
local function onNodeEvent(event)
if "exit" == event then
ccexp.AudioEngine:stopAll()
end
end
layer:registerScriptHandler(onNodeEvent)
4. 声效
ccexp.AudioEngine:stopAll()
5 LayerColor
local bgLayer = cc.LayerColor:create(cc.c4b(0, 128, 255, 255));
6 ccui.TextField
local function textFieldEvent(sender, eventType)
if eventType == ccui.TextFiledEventType.attach_with_ime then
local textField = sender
textField:runAction(cc.MoveBy:create(0.225,cc.p(0, 20)))
self._displayValueLabel:setString("attach with IME")
elseif eventType == ccui.TextFiledEventType.detach_with_ime then
local textField = sender
textField:runAction(cc.MoveBy:create(0.175, cc.p(0, -20)))
self._displayValueLabel:setString("detach with IME")
elseif eventType == ccui.TextFiledEventType.insert_text then
self._displayValueLabel:setString("insert words")
elseif eventType == ccui.TextFiledEventType.delete_backward then
self._displayValueLabel:setString("delete word")
end
end
local textField = ccui.TextField:create()
textField:setTouchEnabled(true)
textField:setFontName(font_TextName)
textField:setFontSize(30)
textField:setPlaceHolder("input words here")
textField:setPosition(cc.p(widgetSize.width / 2.0, widgetSize.height / 2.0))
textField:addEventListener(textFieldEvent)
self._uiLayer:addChild(textField)
7 .PageView getPages():count() -----------> table.getn(cc.PageView:getItems())
8 注册监听返回键
local function touch_key_back(keycode,event)
if keyCode == cc.KeyCode.KEY_BACK then
end
end
local listener = cc.EventListenerKeyboard:create()
listener:registerScriptHandler(touch_key_back, cc.Handler.EVENT_KEYBOARD_RELEASED )
local eventDispatcher = clayer:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, clayer)
9 自定义消息EventCustom
-- 发送消息 post message
-- event将会被传递给消息接收函数,所以所有需要传递的数据都可放到event中
local event = cc.EventCustom:new("MSG_TEST")
event._usedata = {["state"]=self.curState, ["actionId"]=self.actionId}
cc.Director:getInstance():getEventDispatcher():dispatchEvent(event)
----
-- listener
local ActorSprite = class("ActorSprite", cc.Node)
function ActorSprite:initEventListener()
self:enableNodeEvents() -- cc.Node
self.eventListeners = {} -- user to delete when dtor
local listener = cc.EventListenerCustom:create(MSG_TEST, handler(self, self.onChangeState))
local eventDispatcher = self:getEventDispatcher()
eventDispatcher:addEventListenerWithFixedPriority(listener, 1)
table.insert(self.eventListeners, listener)
end
function DogSprite:onChangeState(event)
local dogId = event._usedata["dogId"]
local actionId = event._usedata["actionId"]
local eventName = event:getEventName()
end
cc.Director:getInstance():getEventDispatcher():removeEventListener(var)
10 ListView
-- 让单个Item 在ListView 水平居中
listView:setGravity(ccui.ListViewGravity.centerHorizontal)
11
cc.SpriteFrameCache:getInstance():addSpriteFrames("zwoptex/grossini.plist")
12 eventlistener
注意 前置层是否有layout,layout默认阻挡触摸
local function onTouchEvent(touch, event)
if eventType == "began" then
return self:onTouchBegan(touch, event)
elseif eventType == "moved" then
self:onTouchMoved(touch, event)
elseif eventType == "ended" then
self:onTouchEnded(touch, event)
elseif eventType == "cancelled" then
self:onTouchCancelled(touch, event)
end
end
self._touchListener = nil
local listener = cc.EventListenerTouchOneByOne:create()
listener:setSwallowTouches(true)
listener:registerScriptHandler(self.onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
listener:registerScriptHandler(self.onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
listener:registerScriptHandler(self.onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
listener:registerScriptHandler(self.onTouchCancelled,cc.Handler.EVENT_TOUCH_CANCELLED )
local eventDispatcher = self:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)
13 scheduler
scheduleScriptFunc
self.timer_schedulehandler = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(matchroom_ui.timefunction,1,false)
14 帧事件
local node = cc.CSLoader:createNode("Node.csb")
node:setPosition(cc.p(100,100))
self.parent:addChild(node)
local action = cc.CSLoader:createTimeline("Node.csb")
node:runAction(action)
action:gotoFrameAndPlay(0,false)
local function onFrameEvent(frame)
if nil == frame then
return
end
local str = frame:getEvent()
cclog("frame event:" .. str)
if str == "end" then
node:removeFromParentAndCleanup(true)
end
end
action:setFrameEventCallFunc(onFrameEvent)
end
15. c 与 c++ 混合编程
#if __cplusplus
extern "C" {
#endif
/*
....
*/
#if __cplusplus
}
#endif
16 平台判断
local targetPlatform = cc.Application:getInstance():getTargetPlatform()
17 android uuid
//获得独一无二的Psuedo ID
public static String getUniquePsuedoID() {
String serial = null;
String m_szDevIDShort = "35" +
Build.BOARD.length()%10+ Build.BRAND.length()%10 +
Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
Build.TAGS.length()%10 + Build.TYPE.length()%10 +
Build.USER.length()%10 ; //13 位
try {
serial = android.os.Build.class.getField("SERIAL").get(null).toString();
//API>=9 使用serial号
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一个初始化
serial = "serial"; // 随便一个初始化
}
//使用硬件信息拼凑出来的15位号码
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
18.javah 使用
//进入到 src 目录
// -d -- 输出目录
javah -d ../jni [com.xxxx.xxx (packagename)].ClassName
19 cocos Ref
Ref::~Ref()
{
#if CC_ENABLE_SCRIPT_BINDING && !CC_ENABLE_GC_FOR_NATIVE_OBJECTS
// if the object is referenced by Lua engine, remove it
if (_luaID)
{
// add follow 2 lines
ScriptEngineProtocol* pEngine = ScriptEngineManager::getInstance()->getScriptEngine();
if (pEngine)
ScriptEngineManager::getInstance()->getScriptEngine()->removeScriptObjectByObject(this);
}
else
{
ScriptEngineProtocol* pEngine = ScriptEngineManager::getInstance()->getScriptEngine();
if (pEngine != nullptr && pEngine->getScriptType() == kScriptTypeJavascript)
{
pEngine->removeScriptObjectByObject(this);
}
}
#endif
#if CC_REF_LEAK_DETECTION
if (_referenceCount != 0)
untrackRef(this);
#endif
}





