bbframework
author: L
DATE: 08/04
更多內(nèi)容
-
固定步驟:
1.手動(dòng)替換 bb.bin,因?yàn)榭蚣軆?nèi)容經(jīng)常更新,為了避免本地調(diào)試時(shí)出錯(cuò),替換時(shí)順便把 box.bin悬襟、res/fnt苫纤、 res/img/(x4 and x2)/g 也替換掉。網(wǎng)頁(yè)打包時(shí)打包環(huán)境是將git上的源代碼拷貝出來(lái),再自動(dòng)替換這些文件,并沒(méi)有直接替換git上的資源惯裕。所以這些東西要自己手動(dòng)替換掉。
2.在項(xiàng)目的 config.lua 文件中添加 IS_FULL_SCREEN = true 铐维。
-
全屏比例計(jì)算:
Y_FACTOR = 16/9(display.height/display.width) -- 橫屏
X_FACTOR = 16/9(display.width/display.height) -- 其他
目前產(chǎn)品基本是橫屏使用 Y_FACTOR
-
場(chǎng)景適配:
1.背景:
全屏的背景大小為 1920*1440 懈词,一般靜態(tài)的背景都是把錨點(diǎn)設(shè)置到底部再添加:
D.img("xxx.png"):anchor(ccp(0,0)):to(self, -100)
也可以直接按最大屏幕的中點(diǎn)來(lái)添加:
D.img("xxx.png"):p(ccp(480,360)):to(self, -100)
在有些游戲中需要進(jìn)行移動(dòng)的動(dòng)態(tài)背景,最好根據(jù)情況設(shè)置成適合的位置。
2.動(dòng)態(tài)元素:
游戲中有些元素必須根據(jù)屏幕大小進(jìn)行上下移動(dòng)唇兑,比如按鈕酒朵、互推按鈕、天空飄下的粒子等扎附,這些東西需要跟屏幕最高點(diǎn)保持固定的距離:
屏幕最高點(diǎn)可以根據(jù)Y_FACTOR 計(jì)算: 540*Y_FACTOR
3.其他元素:
其他游戲內(nèi)的布局根據(jù)策劃蔫耽、美術(shù)的需求進(jìn)行調(diào)整,一般只要在模擬器中選擇 540960留夜、640960匙铡、768*1024 三種視圖進(jìn)行調(diào)整,可以好好利用不同屏幕的比例:
540是標(biāo)準(zhǔn)的 16比9 屏幕視圖:Y_FACTOR = 1
640 中等屏幕視圖:Y_FACTOR ≈ 1.185
768 全屏最大屏幕視圖: Y_FACTOR ≈ 1.333
大部分的元素調(diào)整到這三個(gè)視圖下都相對(duì)合適的位置就可以了(策劃美術(shù)沒(méi)意見(jiàn)就行)碍粥。
4.廣告:
目前框架添加廣告的方式是:除gameplay場(chǎng)景外默認(rèn)自動(dòng)添加鳖眼, 在gameplay需手動(dòng)移除,大小屏添加廣告根據(jù) 屏幕尺寸 和 Y_FACTOR 進(jìn)行判斷添加:
獲取屏幕物理尺寸: NV.getScreenSizeOfDevice()
ios 可以根據(jù): isiphone() / isipad() 判斷設(shè)備屏幕嚼摩。
Y_FACTOR :判斷游戲運(yùn)行視圖钦讳,是否可以加廣告(安卓設(shè)備廣告大小是固定的,屏幕越大枕面,廣告顯得越性缸洹)。
5.特殊情況:
① 場(chǎng)景上下進(jìn)入屏幕切換效果
參考這里
② 全屏遇到最糾結(jié)的問(wèn)題就是潮秘,一個(gè)精靈是有許多小部件拼湊而成琼开,需要對(duì)這個(gè)精靈進(jìn)行放大或縮小。這種情況下比較簡(jiǎn)潔的做法是 創(chuàng)建一個(gè)空 node 唇跨,再把這些元素都添加到node上稠通,再對(duì)node進(jìn)行縮放(大部分情況可以這么解決)。還有一些比較復(fù)雜的情況买猖,比如node縮放之后改橘,觸控的點(diǎn)都會(huì)產(chǎn)生變化。所以需要重新計(jì)算對(duì)應(yīng)的點(diǎn)在node上的位置這個(gè)可以參考小蝌蚪畫(huà)畫(huà)場(chǎng)景:
創(chuàng)建 640 屏幕大小的node玉控, 縮小之后精靈位置有點(diǎn)小偏離飞主,因?yàn)榫`不在屏幕中間,node錨點(diǎn)和精靈位置不重合高诺,這里因?yàn)橹豢s小一點(diǎn)點(diǎn)可以忽略碌识。縮小之后點(diǎn)的計(jì)算:
-- 坐標(biāo)轉(zhuǎn)換(640*960大惺)
function M:pointConversion(pt,scale)
local x,y = pt.x, pt.y
if pt.x <=480 then
x = 480 - (480-pt.x)*scale
else
x = 480 + (pt.x-480)*scale
end
if pt.y <= 320 then
y = 320 - (320 - pt.y)*scale
else
y = 320 + (pt.y- 320)*scale
end
return ccp(x, y)
end
鄙人拙見(jiàn)筏餐,歡迎各位大神的修正和補(bǔ)充