require "luaScript/ExtensionTest/CocosBuilderTest" require "luaScript/ExtensionTest/WebProxyTest" local LINE_SPACE = 40 local kItemTagBasic = 1000 local ExtensionTestEnum = { TEST_NOTIFICATIONCENTER = 0, TEST_CCCONTROLBUTTON = 1, TEST_COCOSBUILDER = 2, TEST_WEBSOCKET = 3, TEST_EDITBOX = 4, TEST_MAX_COUNT = 5, } local testsName = { "NotificationCenterTest", "CCControlButtonTest", "CocosBuilderTest", "WebSocketTest", "EditBoxTest", } --Create toMainLayr MenuItem function CreateExtensionsBasicLayerMenu(pMenu) if nil == pMenu then return end local function toMainLayer() local pScene = ExtensionsTestMain() if pScene ~= nil then cc.Director:getInstance():replaceScene(pScene) end end --Create BackMneu cc.MenuItemFont:setFontName("Arial") cc.MenuItemFont:setFontSize(24) local pMenuItemFont = cc.MenuItemFont:create("Back") pMenuItemFont:setPosition(cc.p(VisibleRect:rightBottom().x - 50, VisibleRect:rightBottom().y + 25)) pMenuItemFont:registerScriptTapHandler(toMainLayer) pMenu:addChild(pMenuItemFont) end ------------------------------------- --Notification Center Test ------------------------------------- local NotificationCenterParam = { kTagLight = 100, kTagConnect = 200, MSG_SWITCH_STATE = "SwitchState" } local function runNotificationCenterTest() local pNewScene = cc.Scene:create() local pNewLayer = cc.Layer:create() local function BaseInitSceneLayer(pLayer) if nil == pLayer then return end local s = cc.Director:getInstance():getWinSize() local function toggleSwitch(tag,menuItem) local toggleItem = tolua.cast(menuItem,"MenuItemToggle") local nIndex = toggleItem:getSelectedIndex() local selectedItem = toggleItem:getSelectedItem() if 0 == nIndex then selectedItem = nil end cc.NotificationCenter:getInstance():postNotification(NotificationCenterParam.MSG_SWITCH_STATE,selectedItem) end local switchlabel1 = cc.LabelTTF:create("switch off", "Marker Felt", 26) local switchlabel2 = cc.LabelTTF:create("switch on", "Marker Felt", 26) local switchitem1 = cc.MenuItemLabel:create(switchlabel1) local switchitem2 = cc.MenuItemLabel:create(switchlabel2) local switchitem = cc.MenuItemToggle:create(switchitem1) switchitem:addSubItem(switchitem2) switchitem:registerScriptTapHandler(toggleSwitch) --turn on switchitem:setSelectedIndex(1) local menu = cc.Menu:create() menu:addChild(switchitem) menu:setPosition(cc.p(s.width/2+100, s.height/2)) pLayer:addChild(menu) local menuConnect = cc.Menu:create() menuConnect:setPosition(cc.p(0,0)) pLayer:addChild(menuConnect) local i = 1 local bSwitchOn = false local bConnectArray = { false, false, false } local lightArray = {} local function updateLightState() for i = 1, 3 do if bSwitchOn and bConnectArray[i] then lightArray[i]:setOpacity(255) else lightArray[i]:setOpacity(50) end end end local function switchStateChanged() local nIndex = switchitem:getSelectedIndex() if 0 == nIndex then bSwitchOn = false else bSwitchOn = true end updateLightState() end local function setIsConnectToSwitch(pLight,bConnect,nIdx) bConnectArray[nIdx] = bConnect if bConnect then cc.NotificationCenter:getInstance():registerScriptObserver(pLight, switchStateChanged,NotificationCenterParam.MSG_SWITCH_STATE) else cc.NotificationCenter:getInstance():unregisterScriptObserver(pLight,NotificationCenterParam.MSG_SWITCH_STATE) end updateLightState() end for i = 1, 3 do lightArray[i] = cc.Sprite:create("Images/Pea.png") lightArray[i]:setTag(NotificationCenterParam.kTagLight + i) lightArray[i]:setPosition(cc.p(100, s.height / 4 * i) ) pLayer:addChild(lightArray[i]) local connectlabel1 = cc.LabelTTF:create("not connected", "Marker Felt", 26) local connectlabel2 = cc.LabelTTF:create("connected", "Marker Felt", 26) local connectitem1 = cc.MenuItemLabel:create(connectlabel1) local connectitem2 = cc.MenuItemLabel:create(connectlabel2) local connectitem = cc.MenuItemToggle:create(connectitem1) connectitem:addSubItem(connectitem2) connectitem:setTag(NotificationCenterParam.kTagConnect+i) local function connectToSwitch(tag,menuItem) local connectMenuitem = tolua.cast(menuItem,"MenuItemToggle") local bConnected = true if connectMenuitem:getSelectedIndex() == 0 then bConnected = false end local nIdx = connectMenuitem:getTag()-NotificationCenterParam.kTagConnect setIsConnectToSwitch(lightArray[nIdx],bConnected,nIdx) end connectitem:registerScriptTapHandler(connectToSwitch) local nX,nY = lightArray[i]:getPosition() connectitem:setPosition(cc.p(nX,nY+50)) menuConnect:addChild(connectitem, 0,connectitem:getTag()) if i == 2 then connectitem:setSelectedIndex(1) end bConnectArray[i] = false if 1 == connectitem:getSelectedIndex() then bConnectArray[i] = true end end for i = 1, 3 do setIsConnectToSwitch(lightArray[i],bConnectArray[i],i) end local toggleSelectIndex = switchitem:getSelectedIndex() local toggleSelectedItem = switchitem:getSelectedItem() if 0 == toggleSelectIndex then toggleSelectedItem = nil end cc.NotificationCenter:getInstance():postNotification(NotificationCenterParam.MSG_SWITCH_STATE, toggleSelectedItem) --for testing removeAllObservers */ local function doNothing() end cc.NotificationCenter:getInstance():registerScriptObserver(pNewLayer,doNothing, "random-observer1") cc.NotificationCenter:getInstance():registerScriptObserver(pNewLayer,doNothing, "random-observer2") cc.NotificationCenter:getInstance():registerScriptObserver(pNewLayer,doNothing, "random-observer3") local function CreateToMainMenu(pMenu) if nil == pMenu then return end local function toMainLayer() local numObserversRemoved = cc.NotificationCenter:getInstance():removeAllObservers(pNewLayer) if 3 ~= numObserversRemoved then print("All observers were not removed!") end for i = 1 , 3 do if bConnectArray[i] then cc.NotificationCenter:getInstance():unregisterScriptObserver(lightArray[i],NotificationCenterParam.MSG_SWITCH_STATE) end end local pScene = ExtensionsTestMain() if pScene ~= nil then cc.Director:getInstance():replaceScene(pScene) end end --Create BackMneu cc.MenuItemFont:setFontName("Arial") cc.MenuItemFont:setFontSize(24) local pMenuItemFont = cc.MenuItemFont:create("Back") pMenuItemFont:setPosition(cc.p(VisibleRect:rightBottom().x - 50, VisibleRect:rightBottom().y + 25)) pMenuItemFont:registerScriptTapHandler(toMainLayer) pMenu:addChild(pMenuItemFont) end --Add Menu local pToMainMenu = cc.Menu:create() CreateToMainMenu(pToMainMenu) pToMainMenu:setPosition(cc.p(0, 0)) pLayer:addChild(pToMainMenu,10) end BaseInitSceneLayer(pNewLayer) pNewScene:addChild(pNewLayer) return pNewScene end ------------------------------------- -- Control Extensions Test ------------------------------------- local ControlExtensionsTestEnum = { kCCControlSliderTest = 0, kCCControlColourPickerTest = 1, kCCControlSwitchTest = 2, kCCControlButtonTest_HelloVariableSize = 3, kCCControlButtonTest_Event = 4, kCCControlButtonTest_Styling = 5, kCCControlPotentiometerTest = 6, kCCControlStepperTest = 7, kCCControlTestMax = 8 } local ControlExtensionsTestArray = { "CCControlSliderTest", "ControlColourPickerTest", "ControlSwitchTest", "ControlButtonTest_HelloVariableSize", "ControlButtonTest_Event", "ControlButtonTest_Styling", "ControlPotentiometerTest", "CCControlStepperTest", } local function runCCControlTest() local nMaxCases = ControlExtensionsTestEnum.kCCControlTestMax --kCCControlSliderTest local nCurCase = ControlExtensionsTestEnum.kCCControlSliderTest local pSceneTitleLabel = nil local function GetSceneTitleLabel() return pSceneTitleLabel end local function SetSceneTitleLabel(pLabel) pSceneTitleLabel = pLabel end local function GetControlExtensionsTitle() return ControlExtensionsTestArray[nCurCase + 1] end local pNewScene = cc.Scene:create() local function CreateBasicMenu(pMenu) if nil == pMenu then return end local function backCallback() nCurCase = nCurCase - 1 if nCurCase < 0 then nCurCase = nCurCase + nMaxCases end CurrentControlScene() end local function restartCallback() CurrentControlScene() end local function nextCallback() nCurCase = nCurCase + 1 --No check nMaxCases nCurCase = nCurCase % nMaxCases CurrentControlScene() end local size = cc.Director:getInstance():getWinSize() local item1 = cc.MenuItemImage:create(s_pPathB1, s_pPathB2) item1:registerScriptTapHandler(backCallback) pMenu:addChild(item1,kItemTagBasic) local item2 = cc.MenuItemImage:create(s_pPathR1, s_pPathR2) item2:registerScriptTapHandler(restartCallback) pMenu:addChild(item2,kItemTagBasic) local item3 = cc.MenuItemImage:create(s_pPathF1, s_pPathF2) pMenu:addChild(item3,kItemTagBasic) item3:registerScriptTapHandler(nextCallback) local size = cc.Director:getInstance():getWinSize() item1:setPosition(cc.p(size.width / 2 - item2:getContentSize().width * 2, item2:getContentSize().height / 2)) item2:setPosition(cc.p(size.width / 2, item2:getContentSize().height / 2)) item3:setPosition(cc.p(size.width / 2 + item2:getContentSize().width * 2, item2:getContentSize().height / 2)) end local function BaseInitSceneLayer(pLayer,pStrTitle) if nil == pLayer then return end --Add Menu local pToMainMenu = cc.Menu:create() CreateExtensionsBasicLayerMenu(pToMainMenu) pToMainMenu:setPosition(cc.p(0, 0)) pLayer:addChild(pToMainMenu,10) --Add the generated background local pBackground = cc.Sprite:create("extensions/background.png") pBackground:setPosition(VisibleRect:center()) pLayer:addChild(pBackground) --Add the ribbon local pRibbon = cc.Scale9Sprite:create("extensions/ribbon.png", cc.rect(1, 1, 48, 55)) pRibbon:setContentSize(cc.size(VisibleRect:getVisibleRect().width, 57)) pRibbon:setPosition(cc.p(VisibleRect:center().x, VisibleRect:top().y - pRibbon:getContentSize().height / 2.0)) pLayer:addChild(pRibbon) --Add the title pSceneTitleLabel = cc.LabelTTF:create("Title", "Arial", 12) pSceneTitleLabel:setPosition(cc.p (VisibleRect:center().x, VisibleRect:top().y - pSceneTitleLabel:getContentSize().height / 2 - 5)) pLayer:addChild(pSceneTitleLabel, 1) pSceneTitleLabel:setString(pStrTitle) local pOperateMenu = cc.Menu:create() CreateBasicMenu(pOperateMenu) pOperateMenu:setPosition(cc.p(0, 0)) pLayer:addChild(pOperateMenu,1) end local function InitSliderTest(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() --Add a label in which the slider value will be displayed local pDisplayValueLabel = cc.LabelTTF:create("Move the slider thumb!\nThe lower slider is restricted." ,"Marker Felt", 32) pDisplayValueLabel:retain() pDisplayValueLabel:setAnchorPoint(cc.p(0.5, -1.0)) pDisplayValueLabel:setPosition(cc.p(screenSize.width / 1.7, screenSize.height / 2.0)) pLayer:addChild(pDisplayValueLabel) local function valueChanged(pSender) if nil == pSender or nil == pDisplayValueLabel then return end local pControl = tolua.cast(pSender,"ControlSlider") local strFmt = nil if pControl:getTag() == 1 then strFmt = string.format("Upper slider value = %.02f",pControl:getValue()) elseif pControl:getTag() == 2 then strFmt = string.format("Lower slider value = %.02f",pControl:getValue()) end if nil ~= strFmt then pDisplayValueLabel:setString(strFmt) end end --Add the slider local pSlider = cc.ControlSlider:create("extensions/sliderTrack.png","extensions/sliderProgress.png" ,"extensions/sliderThumb.png") pSlider:setAnchorPoint(cc.p(0.5, 1.0)) pSlider:setMinimumValue(0.0) pSlider:setMaximumValue(5.0) pSlider:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0 + 16)) pSlider:setTag(1) --When the value of the slider will change, the given selector will be call pSlider:registerControlEventHandler(valueChanged, cc.CONTROL_EVENTTYPE_VALUE_CHANGED) local pRestrictSlider = cc.ControlSlider:create("extensions/sliderTrack.png","extensions/sliderProgress.png" ,"extensions/sliderThumb.png") pRestrictSlider:setAnchorPoint(cc.p(0.5, 1.0)) pRestrictSlider:setMinimumValue(0.0) pRestrictSlider:setMaximumValue(5.0) pRestrictSlider:setMaximumAllowedValue(4.0) pRestrictSlider:setMinimumAllowedValue(1.5) pRestrictSlider:setValue(3.0) pRestrictSlider:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0 - 24)) pRestrictSlider:setTag(2) --same with restricted pRestrictSlider:registerControlEventHandler(valueChanged, cc.CONTROL_EVENTTYPE_VALUE_CHANGED) pLayer:addChild(pSlider) pLayer:addChild(pRestrictSlider) end --ColourPickerTest local function InitColourPickerTest(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() local pColorLabel = nil local pNode = cc.Node:create() pNode:setPosition(cc.p (screenSize.width / 2, screenSize.height / 2)) pLayer:addChild(pNode, 1) local dLayer_width = 0 --Create the colour picker,pStrEventName not use local function colourValueChanged(pSender) if nil == pSender or nil == pColorLabel then return end local pPicker = tolua.cast(pSender,"ControlColourPicker") local strFmt = string.format("#%02X%02X%02X",pPicker:getColor().r, pPicker:getColor().g, pPicker:getColor().b) pColorLabel:setString(strFmt) end local pColourPicker = cc.ControlColourPicker:create() pColourPicker:setColor(cc.c3b(37, 46, 252)) pColourPicker:setPosition(cc.p (pColourPicker:getContentSize().width / 2, 0)) pColourPicker:registerControlEventHandler(colourValueChanged, cc.CONTROL_EVENTTYPE_VALUE_CHANGED) pNode:addChild(pColourPicker) dLayer_width = dLayer_width + pColourPicker:getContentSize().width --Add the black background for the text local pBackground = cc.Scale9Sprite:create("extensions/buttonBackground.png") pBackground:setContentSize(cc.size(150, 50)) pBackground:setPosition(cc.p(dLayer_width + pBackground:getContentSize().width / 2.0, 0)) pNode:addChild(pBackground) dLayer_width = dLayer_width + pBackground:getContentSize().width pColorLabel = cc.LabelTTF:create("#color", "Marker Felt", 30) pColorLabel:retain() pColorLabel:setPosition(pBackground:getPosition()) pNode:addChild(pColorLabel) --Set the layer size pNode:setContentSize(cc.size(dLayer_width, 0)) pNode:setAnchorPoint(cc.p (0.5, 0.5)) --Update the color text colourValueChanged(pColourPicker) end --SwitchTest local function InitSwitchTest(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() local pNode = cc.Node:create() pNode:setPosition(cc.p (screenSize.width / 2, screenSize.height / 2)) pLayer:addChild(pNode, 1) local dLayer_width = 0 --Add the black background for the text local pBackground = cc.Scale9Sprite:create("extensions/buttonBackground.png") pBackground:setContentSize(cc.size(80, 50)) pBackground:setPosition(cc.p(dLayer_width + pBackground:getContentSize().width / 2.0, 0)) pNode:addChild(pBackground) dLayer_width = dLayer_width + pBackground:getContentSize().width local pDisplayValueLabel = cc.LabelTTF:create("#color" ,"Marker Felt" ,30) pDisplayValueLabel:retain() pDisplayValueLabel:setPosition(pBackground:getPosition()) pNode:addChild(pDisplayValueLabel) --Create the switch local function valueChanged(pSender) if nil == pDisplayValueLabel or nil == pSender then return end local pControl = tolua.cast(pSender,"ControlSwitch") if pControl:isOn() then pDisplayValueLabel:setString("On") else pDisplayValueLabel:setString("Off") end end local pSwitchControl = cc.ControlSwitch:create( cc.Sprite:create("extensions/switch-mask.png"), cc.Sprite:create("extensions/switch-on.png"), cc.Sprite:create("extensions/switch-off.png"), cc.Sprite:create("extensions/switch-thumb.png"), cc.LabelTTF:create("On", "Arial-BoldMT", 16), cc.LabelTTF:create("Off", "Arial-BoldMT", 16) ) pSwitchControl:setPosition(cc.p (dLayer_width + 10 + pSwitchControl:getContentSize().width / 2, 0)) pNode:addChild(pSwitchControl) pSwitchControl:registerControlEventHandler(valueChanged, cc.CONTROL_EVENTTYPE_VALUE_CHANGED) --Set the layer size pNode:setContentSize(cc.size(dLayer_width, 0)) pNode:setAnchorPoint(cc.p (0.5, 0.5)) --Update the value label valueChanged(pSwitchControl) end --Hvs:HelloVariableSize local function HvsStandardButtonWithTitle(pStrTitle) -- Creates and return a button with a default background and title color. local pBackgroundButton = cc.Scale9Sprite:create("extensions/button.png") local pBackgroundHighlightedButton = cc.Scale9Sprite:create("extensions/buttonHighlighted.png") pTitleButton = cc.LabelTTF:create(pStrTitle, "Marker Felt", 30) pTitleButton:setColor(cc.c3b(159, 168, 176)) local pButton = cc.ControlButton:create(pTitleButton, pBackgroundButton) pButton:setBackgroundSpriteForState(pBackgroundHighlightedButton, cc.CONTROL_STATE_HIGH_LIGHTED ) pButton:setTitleColorForState(cc.c3b(255,255,255), cc.CONTROL_STATE_HIGH_LIGHTED ) return pButton end local function InitHelloVariableSize(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() local strArray = {"Hello", "Variable", "Size", "!"} local pNode = cc.Node:create() pLayer:addChild(pNode,1) local dTotalWidth = 0 local dHeight = 0 local pObj = nil local i = 0 local nLen = table.getn(strArray) for i = 0, nLen - 1 do --Creates a button with pLayer string as title local pButton = HvsStandardButtonWithTitle(strArray[i + 1]) pButton:setPosition(cc.p (dTotalWidth + pButton:getContentSize().width / 2, pButton:getContentSize().height / 2)) pNode:addChild(pButton) --Compute the size of the layer dHeight = pButton:getContentSize().height dTotalWidth = dTotalWidth + pButton:getContentSize().width end pNode:setAnchorPoint(cc.p (0.5, 0.5)) pNode:setContentSize(cc.size(dTotalWidth, dHeight)) pNode:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0)) --Add the black background local pBackground = cc.Scale9Sprite:create("extensions/buttonBackground.png") pBackground:setContentSize(cc.size(dTotalWidth + 14, dHeight + 14)) pBackground:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0)) pLayer:addChild(pBackground) end local function StylingStandardButtonWithTitle(pStrTitle) local pBackgroundButton = cc.Scale9Sprite:create("extensions/button.png") pBackgroundButton:setPreferredSize(cc.size(45, 45)) local pBackgroundHighlightedButton = cc.Scale9Sprite:create("extensions/buttonHighlighted.png") pBackgroundHighlightedButton:setPreferredSize(cc.size(45, 45)) local pTitleButton = cc.LabelTTF:create(pStrTitle, "Marker Felt", 30) pTitleButton:setColor(cc.c3b(159, 168, 176)) local pButton = cc.ControlButton:create(pTitleButton, pBackgroundButton) pButton:setBackgroundSpriteForState(pBackgroundHighlightedButton, cc.CONTROL_STATE_HIGH_LIGHTED ) pButton:setTitleColorForState(cc.c3b(255,255,255), cc.CONTROL_STATE_HIGH_LIGHTED ) return pButton end local function InitStyling(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() local pNode = cc.Node:create() pLayer:addChild(pNode, 1) local nSpace = 10 local nMax_w = 0 local nMax_h = 0 local i = 0 local j = 0 for i = 0, 2 do for j = 0, 2 do --Add the buttons local strFmt = string.format("%d",math.random(0,32767) % 30) local pButton = StylingStandardButtonWithTitle(strFmt) pButton:setAdjustBackgroundImage(false) pButton:setPosition(cc.p (pButton:getContentSize().width / 2 + (pButton:getContentSize().width + nSpace) * i, pButton:getContentSize().height / 2 + (pButton:getContentSize().height + nSpace) * j)) pNode:addChild(pButton) nMax_w = math.max(pButton:getContentSize().width * (i + 1) + nSpace * i, nMax_w) nMax_h = math.max(pButton:getContentSize().height * (j + 1) + nSpace * j, nMax_h) end end pNode:setAnchorPoint(cc.p (0.5, 0.5)) pNode:setContentSize(cc.size(nMax_w, nMax_h)) pNode:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0)) --Add the black background local pBackgroundButton = cc.Scale9Sprite:create("extensions/buttonBackground.png") pBackgroundButton:setContentSize(cc.size(nMax_w + 14, nMax_h + 14)) pBackgroundButton:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0)) pLayer:addChild(pBackgroundButton) end local function InitButtonTestEvent(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() --Add a label in which the button events will be displayed local pDisplayValueLabel = nil pDisplayValueLabel = cc.LabelTTF:create("No Event", "Marker Felt", 32) pDisplayValueLabel:setAnchorPoint(cc.p(0.5, -1)) pDisplayValueLabel:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0)) pLayer:addChild(pDisplayValueLabel, 1) --Add the button local pBackgroundButton = cc.Scale9Sprite:create("extensions/button.png") local pBackgroundHighlightedButton = cc.Scale9Sprite:create("extensions/buttonHighlighted.png") local pTitleButtonLabel = cc.LabelTTF:create("Touch Me!", "Marker Felt", 30) pTitleButtonLabel:setColor(cc.c3b(159, 168, 176)) local pControlButton = cc.ControlButton:create(pTitleButtonLabel, pBackgroundButton) local function touchDownAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Touch Down" ) end local function touchDragInsideAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Drag Inside") end local function touchDragOutsideAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Drag Outside") end local function touchDragEnterAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Drag Enter") end local function touchDragExitAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Drag Exit") end local function touchUpInsideAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Touch Up Inside.") end local function touchUpOutsideAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Touch Up Outside.") end local function touchCancelAction() if nil == pDisplayValueLabel then return end pDisplayValueLabel:setString("Touch Cancel") end pControlButton:setBackgroundSpriteForState(pBackgroundHighlightedButton, cc.CONTROL_STATE_HIGH_LIGHTED ) pControlButton:setTitleColorForState(cc.c3b(255, 255, 255), cc.CONTROL_STATE_HIGH_LIGHTED ) pControlButton:setAnchorPoint(cc.p(0.5, 1)) pControlButton:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0)) pControlButton:registerControlEventHandler(touchDownAction,cc.CONTROL_EVENTTYPE_TOUCH_DOWN ) pControlButton:registerControlEventHandler(touchDragInsideAction,cc.CONTROL_EVENTTYPE_DRAG_INSIDE) pControlButton:registerControlEventHandler(touchDragOutsideAction,cc.CONTROL_EVENTTYPE_DRAG_OUTSIDE) pControlButton:registerControlEventHandler(touchDragEnterAction,cc.CONTROL_EVENTTYPE_DRAG_ENTER) pControlButton:registerControlEventHandler(touchDragExitAction,cc.CONTROL_EVENTTYPE_DRAG_EXIT) pControlButton:registerControlEventHandler(touchUpInsideAction,cc.CONTROL_EVENTTYPE_TOUCH_UP_INSIDE) pControlButton:registerControlEventHandler(touchUpOutsideAction,cc.CONTROL_EVENTTYPE_TOUCH_UP_OUTSIDE) pControlButton:registerControlEventHandler(touchCancelAction,cc.CONTROL_EVENTTYPE_TOUCH_CANCEL) pLayer:addChild(pControlButton, 1) --Add the black background local pBackgroundButton = cc.Scale9Sprite:create("extensions/buttonBackground.png") pBackgroundButton:setContentSize(cc.size(300, 170)) pBackgroundButton:setPosition(cc.p(screenSize.width / 2.0, screenSize.height / 2.0)) pLayer:addChild(pBackgroundButton) end --PotentiometerTest local function InitPotentiometerTest(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() local pNode = cc.Node:create() pNode:setPosition(cc.p (screenSize.width / 2, screenSize.height / 2)) pLayer:addChild(pNode, 1) local dLayer_width = 0 -- Add the black background for the text local pBackground = cc.Scale9Sprite:create("extensions/buttonBackground.png") pBackground:setContentSize(cc.size(80, 50)) pBackground:setPosition(cc.p(dLayer_width + pBackground:getContentSize().width / 2.0, 0)) pNode:addChild(pBackground) dLayer_width = dLayer_width + pBackground:getContentSize().width local pDisplayValueLabel = cc.LabelTTF:create("", "HelveticaNeue-Bold", 30) pDisplayValueLabel:setPosition(pBackground:getPosition()) pNode:addChild(pDisplayValueLabel) -- Add the slider local function valueChanged(pSender) if nil == pSender then return end local pControl = tolua.cast(pSender,"ControlPotentiometer") local strFmt = string.format("%0.2f",pControl:getValue()) pDisplayValueLabel:setString(strFmt ) end local pPotentiometer = cc.ControlPotentiometer:create("extensions/potentiometerTrack.png","extensions/potentiometerProgress.png" ,"extensions/potentiometerButton.png") pPotentiometer:setPosition(cc.p (dLayer_width + 10 + pPotentiometer:getContentSize().width / 2, 0)) -- When the value of the slider will change, the given selector will be call pPotentiometer:registerControlEventHandler(valueChanged, cc.CONTROL_EVENTTYPE_VALUE_CHANGED) pNode:addChild(pPotentiometer) dLayer_width = dLayer_width + pPotentiometer:getContentSize().width -- Set the layer size pNode:setContentSize(cc.size(dLayer_width, 0)) pNode:setAnchorPoint(cc.p (0.5, 0.5)) -- Update the value label valueChanged(pPotentiometer) end local function InitStepperTest(pLayer) if nil == pLayer then return end local screenSize = cc.Director:getInstance():getWinSize() local pNode = cc.Node:create() pNode:setPosition(cc.p (screenSize.width / 2, screenSize.height / 2)) pLayer:addChild(pNode, 1) local layer_width = 0 -- Add the black background for the text local background = cc.Scale9Sprite:create("extensions/buttonBackground.png") background:setContentSize(cc.size(100, 50)) background:setPosition(cc.p(layer_width + background:getContentSize().width / 2.0, 0)) pNode:addChild(background) local pDisplayValueLabel = cc.LabelTTF:create("0", "HelveticaNeue-Bold", 30) pDisplayValueLabel:setPosition(background:getPosition()) pNode:addChild(pDisplayValueLabel) layer_width = layer_width + background:getContentSize().width local minusSprite = cc.Sprite:create("extensions/stepper-minus.png") local plusSprite = cc.Sprite:create("extensions/stepper-plus.png") local function valueChanged(pSender) if nil == pDisplayValueLabel or nil == pSender then return end local pControl = tolua.cast(pSender,"ControlStepper") local strFmt = string.format("%0.02f",pControl:getValue() ) pDisplayValueLabel:setString(strFmt ) end local stepper = cc.ControlStepper:create(minusSprite, plusSprite) stepper:setPosition(cc.p (layer_width + 10 + stepper:getContentSize().width / 2, 0)) stepper:registerControlEventHandler(valueChanged, cc.CONTROL_EVENTTYPE_VALUE_CHANGED) pNode:addChild(stepper) layer_width = layer_width + stepper:getContentSize().width -- Set the layer size pNode:setContentSize(cc.size(layer_width, 0)) pNode:setAnchorPoint(cc.p (0.5, 0.5)) -- Update the value label valueChanged(stepper) end local function InitSpecialSceneLayer(pLayer) if ControlExtensionsTestEnum.kCCControlSliderTest == nCurCase then InitSliderTest(pLayer) elseif ControlExtensionsTestEnum.kCCControlColourPickerTest == nCurCase then InitColourPickerTest(pLayer) elseif ControlExtensionsTestEnum.kCCControlSwitchTest == nCurCase then InitSwitchTest(pLayer) elseif ControlExtensionsTestEnum.kCCControlButtonTest_HelloVariableSize == nCurCase then InitHelloVariableSize(pLayer) elseif ControlExtensionsTestEnum.kCCControlButtonTest_Event == nCurCase then InitButtonTestEvent(pLayer) elseif ControlExtensionsTestEnum.kCCControlButtonTest_Styling == nCurCase then InitStyling(pLayer) elseif ControlExtensionsTestEnum.kCCControlPotentiometerTest == nCurCase then InitPotentiometerTest(pLayer) elseif ControlExtensionsTestEnum.kCCControlStepperTest == nCurCase then InitStepperTest(pLayer) end end function CurrentControlScene() pNewScene = nil pNewScene = cc.Scene:create() local pNewLayer = cc.Layer:create() BaseInitSceneLayer(pNewLayer,GetControlExtensionsTitle()) InitSpecialSceneLayer(pNewLayer) pNewScene:addChild(pNewLayer) if nil ~= pNewScene then cc.Director:getInstance():replaceScene(pNewScene) end end local pNewLayer = cc.Layer:create() BaseInitSceneLayer(pNewLayer,GetControlExtensionsTitle()) InitSpecialSceneLayer(pNewLayer) pNewScene:addChild(pNewLayer) return pNewScene end local function runEditBoxTest() local newScene = cc.Scene:create() local newLayer = cc.Layer:create() local visibleOrigin = cc.Director:getInstance():getVisibleOrigin() local visibleSize = cc.Director:getInstance():getVisibleSize() local pBg = cc.Sprite:create("Images/HelloWorld.png") pBg:setPosition(cc.p(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/2)) newLayer:addChild(pBg) local TTFShowEditReturn = cc.LabelTTF:create("No edit control return!", "", 30) TTFShowEditReturn:setPosition(cc.p(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y + visibleSize.height - 50)) newLayer:addChild(TTFShowEditReturn) -- Back Menu local pToMainMenu = cc.Menu:create() CreateExtensionsBasicLayerMenu(pToMainMenu) pToMainMenu:setPosition(cc.p(0, 0)) newLayer:addChild(pToMainMenu,10) local editBoxSize = cc.size(visibleSize.width - 100, 60) local EditName = nil local EditPassword = nil local EditEmail = nil local function editBoxTextEventHandle(strEventName,pSender) local edit = tolua.cast(pSender,"EditBox") local strFmt if strEventName == "began" then strFmt = string.format("editBox %p DidBegin !", edit) print(strFmt) elseif strEventName == "ended" then strFmt = string.format("editBox %p DidEnd !", edit) print(strFmt) elseif strEventName == "return" then strFmt = string.format("editBox %p was returned !",edit) if edit == EditName then TTFShowEditReturn:setString("Name EditBox return !") elseif edit == EditPassword then TTFShowEditReturn:setString("Password EditBox return !") elseif edit == EditEmail then TTFShowEditReturn:setString("Email EditBox return !") end print(strFmt) elseif strEventName == "changed" then strFmt = string.format("editBox %p TextChanged, text: %s ", edit, edit:getText()) print(strFmt) end end -- top EditName = cc.EditBox:create(editBoxSize, cc.Scale9Sprite:create("extensions/green_edit.png")) EditName:setPosition(cc.p(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height*3/4)) local targetPlatform = cc.Application:getInstance():getTargetPlatform() if kTargetIphone == targetPlatform or kTargetIpad == targetPlatform then EditName:setFontName("Paint Boy") else EditName:setFontName("fonts/Paint Boy.ttf") end EditName:setFontSize(25) EditName:setFontColor(cc.c3b(255,0,0)) EditName:setPlaceHolder("Name:") EditName:setPlaceholderFontColor(cc.c3b(255,255,255)) EditName:setMaxLength(8) EditName:setReturnType(cc.KEYBOARD_RETURNTYPE_DONE ) --Handler EditName:registerScriptEditBoxHandler(editBoxTextEventHandle) newLayer:addChild(EditName) --middle EditPassword = cc.EditBox:create(editBoxSize, cc.Scale9Sprite:create("extensions/orange_edit.png")) EditPassword:setPosition(cc.p(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/2)) if kTargetIphone == targetPlatform or kTargetIpad == targetPlatform then EditPassword:setFont("American Typewriter", 30) else EditPassword:setFont("fonts/American Typewriter.ttf", 30) end EditPassword:setFontColor(cc.c3b(0,255,0)) EditPassword:setPlaceHolder("Password:") EditPassword:setMaxLength(6) EditPassword:setInputFlag(cc.EDITBOX_INPUT_FLAG_PASSWORD) EditPassword:setInputMode(cc.EDITBOX_INPUT_MODE_SINGLELINE) EditPassword:registerScriptEditBoxHandler(editBoxTextEventHandle) newLayer:addChild(EditPassword) --bottom EditEmail = cc.EditBox:create(cc.size(editBoxSize.width, editBoxSize.height), cc.Scale9Sprite:create("extensions/yellow_edit.png")) EditEmail:setPosition(cc.p(visibleOrigin.x+visibleSize.width/2, visibleOrigin.y+visibleSize.height/4)) EditEmail:setAnchorPoint(cc.p(0.5, 1.0)) EditEmail:setPlaceHolder("Email:") EditEmail:setInputMode(cc.EDITBOX_INPUT_MODE_EMAILADDR) EditEmail:registerScriptEditBoxHandler(editBoxTextEventHandle) newLayer:addChild(EditEmail) newLayer:setPosition(cc.p(10, 20)) newScene:addChild(newLayer) return newScene end local CreateExtensionsTestTable = { runNotificationCenterTest, runCCControlTest, runCocosBuilder, runWebSocketTest, runEditBoxTest, } local function ExtensionsMainLayer() local s = cc.Director:getInstance():getWinSize() local function CreateExtensionsTestScene(nPerformanceNo) local pNewscene = CreateExtensionsTestTable[nPerformanceNo]() return pNewscene end local function menuCallback(tag, pMenuItem) local scene = nil local nIdx = pMenuItem:getZOrder() - kItemTagBasic local ExtensionsTestScene = CreateExtensionsTestScene(nIdx) if nil ~= ExtensionsTestScene then cc.Director:getInstance():replaceScene(ExtensionsTestScene) end end local layer = cc.Layer:create() local menu = cc.Menu:create() menu:setPosition(cc.p(0, 0)) cc.MenuItemFont:setFontName("Arial") cc.MenuItemFont:setFontSize(24) local targetPlatform = cc.Application:getInstance():getTargetPlatform() local bSupportWebSocket = false if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) or (cc.PLATFORM_OS_WINDOWS == targetPlatform) then bSupportWebSocket = true end local bSupportEdit = false if (cc.PLATFORM_OS_IPHONE == targetPlatform) or (cc.PLATFORM_OS_IPAD == targetPlatform) or (cc.PLATFORM_OS_ANDROID == targetPlatform) or (cc.PLATFORM_OS_WINDOWS == targetPlatform) or (cc.PLATFORM_OS_MAC == targetPlatform) or (cc.PLATFORM_OS_TIZEN == targetPlatform) then bSupportEdit = true end for i = 1, ExtensionTestEnum.TEST_MAX_COUNT do local item = cc.MenuItemFont:create(testsName[i]) item:registerScriptTapHandler(menuCallback) item:setPosition(s.width / 2, s.height - i * LINE_SPACE) menu:addChild(item, kItemTagBasic + i) if ((i == ExtensionTestEnum.TEST_WEBSOCKET + 1) and (false == bSupportWebSocket)) or ((i == ExtensionTestEnum.TEST_EDITBOX + 1) and (false == bSupportEdit)) or (i == ExtensionTestEnum.TEST_NOTIFICATIONCENTER + 1)then item:setEnabled(false) end end layer:addChild(menu) -- handling touch events local beginPos = {x = 0, y = 0} local function onTouchBegan(x, y) beginPos = {x = x, y = y} return true end local function onTouchMoved(x, y) local nMoveY = y - beginPos.y local curPosx, curPosy = menu:getPosition() local nextPosy = curPosy + nMoveY local winSize = cc.Director:getInstance():getWinSize() if nextPosy < 0 then menu:setPosition(0, 0) return end if nextPosy > ((ExtensionTestEnum.TEST_MAX_COUNT + 1) * LINE_SPACE - winSize.height) then menu:setPosition(0, ((ExtensionTestEnum.TEST_MAX_COUNT + 1) * LINE_SPACE - winSize.height)) return end menu:setPosition(curPosx, nextPosy) beginPos = {x = x, y = y} end local function onTouch(eventType, x, y) if eventType == "began" then return onTouchBegan(x, y) elseif eventType == "moved" then return onTouchMoved(x, y) end end layer:setTouchEnabled(true) layer:registerScriptTouchHandler(onTouch) return layer end ------------------------------------- -- Extensions Test ------------------------------------- function ExtensionsTestMain() local scene = cc.Scene:create() scene:addChild(ExtensionsMainLayer()) scene:addChild(CreateBackMenuItem()) return scene end