项目移植手记

前端之家收集整理的这篇文章主要介绍了项目移植手记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.CCNotificationCenter废弃了,建议用EventListnerCustom

  1. layer._listener1 = cc.EventListenerCustom:create("component game over",onEvent)
  2. local eventDispatcher = cc.Director:getInstance():getEventDispatcher()
  3. eventDispatcher:addEventListenerWithFixedPriority(layer._listener1,1)

2.UILabel -------> Text

3. Node节点监听

  1. local function onNodeEvent(event)
  2. if "exit" == event then
  3. ccexp.AudioEngine:stopAll()
  4. end
  5. end
  6.  
  7. layer:registerScriptHandler(onNodeEvent)

4. 声效

  1. ccexp.AudioEngine:stopAll()

5 LayerColor

  1. local bgLayer = cc.LayerColor:create(cc.c4b(0,128,255,255));

6 ccui.TextField

  1. local function textFieldEvent(sender,eventType)
  2. if eventType == ccui.TextFiledEventType.attach_with_ime then
  3. local textField = sender
  4. textField:runAction(cc.MoveBy:create(0.225,cc.p(0,20)))
  5. self._displayValueLabel:setString("attach with IME")
  6. elseif eventType == ccui.TextFiledEventType.detach_with_ime then
  7. local textField = sender
  8. textField:runAction(cc.MoveBy:create(0.175,-20)))
  9. self._displayValueLabel:setString("detach with IME")
  10. elseif eventType == ccui.TextFiledEventType.insert_text then
  11. self._displayValueLabel:setString("insert words")
  12. elseif eventType == ccui.TextFiledEventType.delete_backward then
  13. self._displayValueLabel:setString("delete word")
  14. end
  15. end
  16.  
  17. local textField = ccui.TextField:create()
  18. textField:setTouchEnabled(true)
  19. textField:setFontName(font_TextName)
  20. textField:setFontSize(30)
  21. textField:setPlaceHolder("input words here")
  22. textField:setPosition(cc.p(widgetSize.width / 2.0,widgetSize.height / 2.0))
  23. textField:addEventListener(textFieldEvent)
  24. self._uiLayer:addChild(textField)

7 .PageView getPages():count() -----------> table.getn(cc.PageView:getItems())

8 注册监听返回键

  1. local function touch_key_back(keycode,event)
  2.  
  3. if keyCode == cc.KeyCode.KEY_BACK then
  4.  
  5. end
  6. end
  7.  
  8. local listener = cc.EventListenerKeyboard:create()
  9. listener:registerScriptHandler(touch_key_back,cc.Handler.EVENT_KEYBOARD_RELEASED )
  10.  
  11. local eventDispatcher = clayer:getEventDispatcher()
  12. eventDispatcher:addEventListenerWithSceneGraPHPriority(listener,clayer)

9自定义消息EventCustom

  1. -- 发送消息 post message
  2. -- event将会被传递给消息接收函数,所以所有需要传递的数据都可放到event
  3. local event = cc.EventCustom:new("MSG_TEST")
  4. event._usedata = {["state"]=self.curState,["actionId"]=self.actionId}
  5. cc.Director:getInstance():getEventDispatcher():dispatchEvent(event)

----

  1. -- listener
  2. local ActorSprite = class("ActorSprite",cc.Node)
  3.  
  4. function ActorSprite:initEventListener()
  5. self:enableNodeEvents() -- cc.Node
  6. self.eventListeners = {} -- user to delete when dtor
  7.  
  8. local listener = cc.EventListenerCustom:create(MSG_TEST,handler(self,self.onChangeState))
  9. local eventDispatcher = self:getEventDispatcher()
  10. eventDispatcher:addEventListenerWithFixedPriority(listener,1)
  11. table.insert(self.eventListeners,listener)
  12. end
  13.  
  14. function DogSprite:onChangeState(event)
  15. local dogId = event._usedata["dogId"]
  16. local actionId = event._usedata["actionId"]
  17. local eventName = event:getEventName()
  18. end
  1. cc.Director:getInstance():getEventDispatcher():removeEventListener(var)

10 ListView

  1. -- 让单个Item ListView 水平居中
  2. listView:setGravity(ccui.ListViewGravity.centerHorizontal)

11

  1. cc.SpriteFrameCache:getInstance():addSpriteFrames("zwoptex/grossini.plist")

12 eventlistener

注意 前置层是否有layout,layout默认阻挡触摸

  1. local function onTouchEvent(touch,event)
  2. if eventType == "began" then
  3. return self:onTouchBegan(touch,event)
  4. elseif eventType == "moved" then
  5. self:onTouchMoved(touch,event)
  6. elseif eventType == "ended" then
  7. self:onTouchEnded(touch,event)
  8. elseif eventType == "cancelled" then
  9. self:onTouchCancelled(touch,event)
  10. end
  11. end
  12. self._touchListener = nil
  13. local listener = cc.EventListenerTouchOneByOne:create()
  14. listener:setSwallowTouches(true)
  15. listener:registerScriptHandler(self.onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
  16. listener:registerScriptHandler(self.onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
  17. listener:registerScriptHandler(self.onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
  18. listener:registerScriptHandler(self.onTouchCancelled,cc.Handler.EVENT_TOUCH_CANCELLED )
  19. local eventDispatcher = self:getEventDispatcher()
  20. eventDispatcher:addEventListenerWithSceneGraPHPriority(listener,self)

13 scheduler

scheduleScriptFunc

  1. self.timer_schedulehandler = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(matchroom_ui.timefunction,1,false)

14 帧事件

  1. local node = cc.CSLoader:createNode("Node.csb")
  2. node:setPosition(cc.p(100,100))
  3. self.parent:addChild(node)
  4. local action = cc.CSLoader:createTimeline("Node.csb")
  5. node:runAction(action)
  6. action:gotoFrameAndPlay(0,false)
  7.  
  8. local function onFrameEvent(frame)
  9. if nil == frame then
  10. return
  11. end
  12.  
  13. local str = frame:getEvent()
  14.  
  15. cclog("frame event:" .. str)
  16. if str == "end" then
  17. node:removeFromParentAndCleanup(true)
  18. end
  19. end
  20.  
  21. action:setFrameEventCallFunc(onFrameEvent)
  22.  
  23. end

15. c 与 c++ 混合编程

  1. #if __cplusplus
  2. extern "C" {
  3. #endif
  4.  
  5. /*
  6. ....
  7. */
  8.  
  9.  
  10. #if __cplusplus
  11. }
  12. #endif

16 平台判断

  1. local targetPlatform = cc.Application:getInstance():getTargetPlatform()

17 android uuid

  1. //获得独一无二的Psuedo ID
  2. public static String getUniquePsuedoID() {
  3. String serial = null;
  4.  
  5. String m_szDevIDShort = "35" +
  6. Build.BOARD.length()%10+ Build.BRAND.length()%10 +
  7.  
  8. Build.cpu_ABI.length()%10 + Build.DEVICE.length()%10 +
  9.  
  10. Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
  11.  
  12. Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
  13.  
  14. Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
  15.  
  16. Build.TAGS.length()%10 + Build.TYPE.length()%10 +
  17.  
  18. Build.USER.length()%10 ; //13 位
  19.  
  20. try {
  21. serial = android.os.Build.class.getField("SERIAL").get(null).toString();
  22. //API>=9 使用serial号
  23. return new UUID(m_szDevIDShort.hashCode(),serial.hashCode()).toString();
  24. } catch (Exception exception) {
  25. //serial需要一个初始化
  26. serial = "serial"; // 随便一个初始化
  27. }
  28. //使用硬件信息拼凑出来的15位号码
  29. return new UUID(m_szDevIDShort.hashCode(),serial.hashCode()).toString();

18.javah 使用

  1. //进入到 src 目录
  2. // -d -- 输出目录
  3. javah -d ../jni [com.xxxx.xxx (packagename)].ClassName

19 cocos Ref

  1. Ref::~Ref()
  2. {
  3. #if CC_ENABLE_SCRIPT_BINDING && !CC_ENABLE_GC_FOR_NATIVE_OBJECTS
  4. // if the object is referenced by Lua engine,remove it
  5. if (_luaID)
  6. {
  7. // add follow 2 lines
  8. ScriptEngineProtocol* pEngine = ScriptEngineManager::getInstance()->getScriptEngine();
  9. if (pEngine)
  10. ScriptEngineManager::getInstance()->getScriptEngine()->removeScriptObjectByObject(this);
  11. }
  12. else
  13. {
  14. ScriptEngineProtocol* pEngine = ScriptEngineManager::getInstance()->getScriptEngine();
  15. if (pEngine != nullptr && pEngine->getScriptType() == kScriptTypeJavascript)
  16. {
  17. pEngine->removeScriptObjectByObject(this);
  18. }
  19. }
  20. #endif
  21.  
  22.  
  23. #if CC_REF_LEAK_DETECTION
  24. if (_referenceCount != 0)
  25. untrackRef(this);
  26. #endif
  27. }

猜你在找的Cocos2d-x相关文章