1. 程式人生 > >quick cocos 的螢幕適配

quick cocos 的螢幕適配

        按照之前做cocos2dx的做法,是做了2套圖,一套是4:3的,一套是16:9的,對於iphone來說,就是對應5以前的短臉,和對應5以後的長臉。對於其他機器,小於等於4:3的按4:3拉伸鋪滿,大於4:3的按16:9拉伸鋪滿。

        但是初識quick,發現有點不一樣。這篇文章是廖大寫的關於適配的。文中推薦是按照寬度適配。

        但是我還是覺得以前的做法更科學,而且各方面配合起來也更順利。然後問題來了,我居然不知道在quick裡面怎麼改他。

        此處略去大量測試方案和測試資料和測試結果和測試時間(當然我不光是找這個東西,順帶測了下其他的。。。)

        最後結論如下:

        在quick的display初始化的時候,會根據config裡面的設定,比較重要的是這幾個:

CONFIG_AUTOSCALE_CALLBACK 

CONFIG_SCREEN_WIDTH 
CONFIG_SCREEN_HEIGHT

CONFIG_SCREEN_AUTOSCALE 
        最初始化,具體涉及到的如下:
if CONFIG_SCREEN_WIDTH == nil or CONFIG_SCREEN_HEIGHT == nil then
    CONFIG_SCREEN_WIDTH = w
    CONFIG_SCREEN_HEIGHT = h
end

if not CONFIG_SCREEN_AUTOSCALE then
    if w > h then
        CONFIG_SCREEN_AUTOSCALE = "FIXED_HEIGHT"
    else
        CONFIG_SCREEN_AUTOSCALE = "FIXED_WIDTH"
    end
else
    CONFIG_SCREEN_AUTOSCALE = string.upper(CONFIG_SCREEN_AUTOSCALE)
end

local scale, scaleX, scaleY

if CONFIG_SCREEN_AUTOSCALE and CONFIG_SCREEN_AUTOSCALE ~="NONE" then
    if type(CONFIG_SCREEN_AUTOSCALE_CALLBACK) == "function" then
        scaleX, scaleY = CONFIG_SCREEN_AUTOSCALE_CALLBACK(w, h, device.model)
    end

    if CONFIG_SCREEN_AUTOSCALE == "FILL_ALL" then
        CONFIG_SCREEN_WIDTH = w
        CONFIG_SCREEN_HEIGHT = h
        scale = 1.0
        glview:setDesignResolutionSize(CONFIG_SCREEN_WIDTH, CONFIG_SCREEN_HEIGHT, cc.ResolutionPolicy.NO_BORDER)
    else
        if not scaleX or not scaleY then
            scaleX, scaleY = w / CONFIG_SCREEN_WIDTH, h / CONFIG_SCREEN_HEIGHT
        end

        if CONFIG_SCREEN_AUTOSCALE == "FIXED_WIDTH" then
            scale = scaleX
            CONFIG_SCREEN_HEIGHT = h / scale
        elseif CONFIG_SCREEN_AUTOSCALE == "FIXED_HEIGHT" then
            scale = scaleY
            CONFIG_SCREEN_WIDTH = w / scale
        else
            scale = 1.0
            printError(string.format("display - invalid CONFIG_SCREEN_AUTOSCALE \"%s\"", CONFIG_SCREEN_AUTOSCALE))
        end
        glview:setDesignResolutionSize(CONFIG_SCREEN_WIDTH, CONFIG_SCREEN_HEIGHT, cc.ResolutionPolicy.NO_BORDER)
    end
else
    CONFIG_SCREEN_WIDTH = w
    CONFIG_SCREEN_HEIGHT = h
    scale = 1.0
end
        注意出現了cc.ResolutionPolicy.NO_BORDER 的地方,然後從這裡附近開始,根據判斷條件,自己改回以前那種習慣的方式。。。