BaseScene.lua 4.16 KB
local BaseScene = class("BaseScene", function() return display.newScene() end)

function BaseScene:ctor()
    self.nodes = {};
    self.nodeIndex = 1;
    self.selectedIndex = 1;
end 

function BaseScene:onButtonClick(ref, type,onComplete)
    if 0 == type then
--        MyAudio.playSound("BUTTON_CLICK")
    elseif 2 == type then
        onComplete(ref, type)
    end
end

--上键处理函数
function BaseScene:onKeypadUp(isBounce)
    if not self.nodes or #self.nodes == 0 then
        logE("该界面没有设置按键节点");
        return ;
    end
    if self.nodeIndex > 1 then
        local curNode = self.nodes[self.nodeIndex][self.selectedIndex];
        local curPos = curNode:getParent():convertToWorldSpace(cc.p(curNode:getPosition()));

        self.nodeIndex = self.nodeIndex - 1;

        local minDinstance = 9999;
        self.selectedIndex = 1;
        for i,v in ipairs(self.nodes[self.nodeIndex]) do
            if v:isVisible() then
                local _p = v:getParent():convertToWorldSpace(cc.p(v:getPosition()));
                local _distance = math.abs(_p.x-curPos.x);
                if _distance < minDinstance then
                    minDinstance = _distance;
                    self.selectedIndex = i;
                end
            end
        end
        self:updateSelectedState();
    end
end

--下键处理函数
function BaseScene:onKeypadDown(isBounce)
    if not self.nodes or #self.nodes == 0 then
        logE("该界面没有设置按键节点");
        return ;
    end
    if self.nodeIndex < #self.nodes then
        local curNode = self.nodes[self.nodeIndex][self.selectedIndex];
        local curPos = curNode:getParent():convertToWorldSpace(cc.p(curNode:getPosition()));

        self.nodeIndex = self.nodeIndex + 1;

        local minDinstance = 9999;
        self.selectedIndex = 1;
        for i,v in ipairs(self.nodes[self.nodeIndex]) do
            if v:isVisible() then
                local _p = v:getParent():convertToWorldSpace(cc.p(v:getPosition()));
                local _distance = math.abs(_p.x-curPos.x);
                if _distance < minDinstance then
                    minDinstance = _distance;
                    self.selectedIndex = i;
                end
            end
        end
        self:updateSelectedState(isBounce);
    end
end

--左键处理函数
function BaseScene:onKeypadLeft(isBounce)
    if not self.nodes or #self.nodes == 0 then
        logE("该界面没有设置按键节点");
        return ;
    end
    if self.selectedIndex > 1 then
        self.selectedIndex = self.selectedIndex - 1;
        
        self:updateSelectedState(isBounce);
    end
end

--右键处理函数
function BaseScene:onKeypadRight(isBounce)
    if not self.nodes or #self.nodes == 0 then
        logE("该界面没有设置按键节点");
        return ;
    end
    if self.selectedIndex < #self.nodes[self.nodeIndex] then
        self.selectedIndex = self.selectedIndex + 1;

        self:updateSelectedState(isBounce);
    end
end

--菜单键处理函数
function BaseScene:onKeypadMenu()
    
end

function BaseScene:updateSelectedState(isBounce)
    if IS_TV == 0 then
        return;
    end

    if isBounce == nil then
        isBounce = true;
    end
    if #self.nodes == 0 then
        logE("该界面没有设置按键节点");
        return ;
    end
    for i,v in ipairs(self.nodes) do
        for index,node in ipairs(v) do
            local selected = node:getChildByName("selected");
            if selected then
                selected:setVisible(false);
            end
            NodeManager.setHighlight(node,false);
        end
    end
    local node = self.nodes[self.nodeIndex][self.selectedIndex];
    local selected = node:getChildByName("selected");
    if selected then
        selected:setVisible(true);
    end
    NodeManager.setHighlight(node,true,isBounce);
end

function BaseScene:removeAllSelectedState()
    if #self.nodes == 0 then
        logE("该界面没有设置按键节点");
        return ;
    end
    for i,v in ipairs(self.nodes) do
        for index,node in ipairs(v) do
            local selected = node:getChildByName("selected");
            if selected then
                selected:setVisible(false);
            end
            NodeManager.setHighlight(node,false);
        end
    end
end

return BaseScene