Cocos2d-x lua 封裝的一個簡單彈出框

來源:互聯網
上載者:User

標籤:des   blog   io   color   ar   os   sp   on   2014   

。。有2種類型:只有確定按鈕、有確定和取消按鈕

確定和取消按鈕中的確定可以執行回呼函數,標籤可以自動換行,前提是在IOS模擬器上運行,mac下的模擬器看不出效果,功能比較簡單,準系統是實現了,互動上不是很好,還得改進,點擊對話方塊外面的地區,對話方塊也會消失,可自行修改實現自己的需求。

繼承於Layer,用類的方式寫的,寫的不是很好,望大神們多多指教。

代碼奉上,比較簡單:

require "Cocos2d"require "Cocos2dConstants"-- 按鈕類型-- 1代表只有確定按鈕的對話方塊-- 2代表有確定和取消按鈕的對話方塊local MSG_BOX_OK = 1local MSG_BOX_OK_CANCEL =2local msgBoxLayer = class("msgBoxLayer",function()    return cc.Layer:create()end)function msgBoxLayer:create(dtype, text, callbackfunc)    local layer = msgBoxLayer.new(dtype,text,callbackfunc)    return layerend--初始化function msgBoxLayer:ctor(dtype,text,callbackfunc)    print("MsgBox:ctor_dtype=",dtype,"MsgBox:ctor_text=",text,"MsgBox:ctor_callback",callbackfunc)    self.dtype = dtype    self.text = text    self.callbackfunc = callbackfunc    self.winSize = cc.Director:getInstance():getWinSize()    self:setVisible(true)    self:setLocalZOrder(999)    self:setContentSize(self.winSize)    local listener = cc.EventListenerTouchOneByOne:create()    local function onTouchBegan(touch, event)        return self:onTouchBegan(touch,event)    end    local function onTouchMoved(touch,event)    self:onTouchMoved(touch,event)    end    local function onTouchEnded(touch,event)    self:onTouchEnded(touch,event)    end    listener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)    listener:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED)    listener:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED)    listener:setSwallowTouches(true)    local eventDispatcher = self:getEventDispatcher()    eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)    self:createMsgBox()endfunction msgBoxLayer:createMsgBox()    local background = cc.Scale9Sprite:create("trans_yellow.png")    self.bg = background      local label = ccui.Text:create()    label:setTextAreaSize(cc.size(350,0))    label:setFontName("Helvetica")    label:setColor(cc.c3b(0,255,255))    label:setFontSize(20)    label:setTextHorizontalAlignment(cc.TEXT_ALIGNMENT_LEFT)    label:setTextVerticalAlignment(cc.VERTICAL_TEXT_ALIGNMENT_CENTER)    label:setString(self.text)    local labelContentSize = label:getTextAreaSize();    local msgBoxHeight = labelContentSize.height + 200    background:setContentSize(cc.size(400,msgBoxHeight))    background:setPosition(cc.p(self.winSize.width/2,self.winSize.height/2))    self:addChild(background)        local contentSize = background:getContentSize()    label:setPosition(cc.p(labelContentSize.width-150,msgBoxHeight-50))    background:addChild(label,1)        --關閉彈出框    local function cancelMsgBoxEvent(sender, eventType)        if eventType == ccui.TouchEventType.ended then            self:removeFromParent(true)        end    end    --執行回呼函數,並關閉彈出框    local function okMsgBoxEvent(sender, eventType)        if eventType == ccui.TouchEventType.ended then            if self.callbackfunc then                self.callbackfunc()            end            self:removeFromParent(true)        end    end        --建立只有確定按鈕的彈出框    if self.dtype == MSG_BOX_OK then                local okButton = ccui.Button:create()        background:addChild(okButton)        okButton:loadTextures("public_btn_1_000.png","","")        okButton:setPosition(cc.p(contentSize.width/2,50))        okButton:setTouchEnabled(true)        okButton:addTouchEventListener(cancelMsgBoxEvent)        local okButtonSize = okButton:getContentSize()        local okButtonLabel = cc.Sprite:create()        okButtonLabel:setTexture("confirm.png")        okButtonLabel:setPosition(cc.p(okButtonSize.width/2,okButtonSize.height/2))        okButton:addChild(okButtonLabel)            --建立具有確定和取消按鈕的彈出框        elseif self.dtype == MSG_BOX_OK_CANCEL then        local okButton = ccui.Button:create()        background:addChild(okButton)        okButton:loadTextures("public_btn_1_000.png","","")        okButton:setTouchEnabled(true)        okButton:setPosition(cc.p(contentSize.width/2-100,50))        okButton:addTouchEventListener(okMsgBoxEvent)        local okButtonSize = okButton:getContentSize()        local okButtonLabel = cc.Sprite:create()        okButtonLabel:setTexture("confirm.png")        okButtonLabel:setPosition(cc.p(okButtonSize.width/2,okButtonSize.height/2))        okButton:addChild(okButtonLabel)                local cancelButton = ccui.Button:create()        background:addChild(cancelButton)        cancelButton:loadTextures("public_btn_2_000.png","","")        cancelButton:setTouchEnabled(true)        cancelButton:setPosition(cc.p(contentSize.width/2+100,50))        cancelButton:addTouchEventListener(cancelMsgBoxEvent)        local cancelButtonSize = cancelButton:getContentSize()        local cancelButtonLabel = cc.Sprite:create()        cancelButtonLabel:setTexture("cancel.png")        cancelButtonLabel:setPosition(cc.p(cancelButtonSize.width/2,cancelButtonSize.height/2))        cancelButton:addChild(cancelButtonLabel)    endendfunction msgBoxLayer:onTouchBegan(touch, event)    return trueendfunction msgBoxLayer:onTouchEnded(touch, event)    local curLocation = self:convertToNodeSpace(touch:getLocation())local rect = self.bg:getBoundingBox()if cc.rectContainsPoint(rect, curLocation) then   print("point in rect")else   self:removeFromParent(true)endendfunction msgBoxLayer:onTouchMoved(touch, event)endreturn msgBoxLayer


Cocos2d-x lua 封裝的一個簡單彈出框

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.