精華區beta WOW 關於我們 聯絡資訊
夜半三更睡不著 把故事說完好了.. 前情提要: 目前大家所看到的遊戲畫面 = 遊戲預設解析度 X 放大倍率 所以再把放大的倍率除回來就可以得到1:1精確的顯示 BUT, 放大倍率算法就是就是就是 目前畫面解析度的高度÷遊戲原始解析度的高度(768) 幹..高亮好刺眼 恩... 到此看起來推理很正確 但其實在這邊遇到了一個問題 甚麼時候遊戲的原始解析度會改變? 4.0.X前 當 選項>進階>使用者介面縮放 這欄沒有打勾時 遊戲會顯示預設的解析度(高=768) 4.0.X後 (也就是我回鍋之前orz...) 當 選項>進階>使用者介面縮放 這欄沒有打勾時 遊戲會顯示 選項>影像>解析度 的設定值 這代表著4.0.X以後 你只要不勾介面縮放 就會是精確的顯示 什麼? 上篇故事看那麼久白看的 還看沒有 巨集也白打了 我只要不打勾就好了嘛! 這麼想是正確的 顆顆 但不是所有玩家都不打勾不縮放吧!! 同樣的 細心的UI開發者 也會想盡辦法讓UI在各種解析度之下都不會變形 所以下面來介紹4.0.X之後怎麼寫scaleFix (拖走 首先依照上篇的原理算出縮放修正值 local scaleFix = 768/string.match(GetCVar("gxResolution","%d+x(%d+)") 再來要檢查玩家"那邊"有沒有打勾 (這邊順便加入修正值 最後function比較好看) local m -- 設個變數放計算結果 if GetCVar("useUiScale") == "1" then -- 如果"那邊"有打勾 m = scaleFix / GetCVar("uiScale") -- 就把玩家設定的縮放值除回來 else -- 不然有打勾的話 m = 1 -- 就不動 end -- 以上 變數都OK了 最後把function寫出來 local scale = function(value) -- 新增一個叫scale的function, 變數叫做value return m * value -- 給value就計算 m * value 然後丟回去 end -- end 好了之後我們就能在ui中以scale()來取得精確值 舉例來說, 我想要某Frame 在1600x900 與1440x900 與1920x1080 三種解析度下 位置距離螢幕中間+10px <<有單位喔 我們就可以這樣寫 Frame:SetPoint("CENTER", UIParent, "CENTER", 0, scale(10)) 同樣的我們也可以精確設定他的大小 Frame:SetHeight(scale(20)) Frame:SetWidth(scale(100)) 以上大概就這樣 反正能精確做設計就能自由發揮想像力了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.231.32
incKevin:就那個那個嘛!! 09/08 03:34
凱文醫生早啊 你一定直接end 你給我300p
incKevin:降都被發現END了...嗚嗚 09/08 03:43
我壞壞啊
andy30093:我看不懂T_T 09/08 03:57
不懂沒差啦...0學分的選修
dlikeayu:跟網頁設計抓使用者者解析度來決定釋放哪種tpl一樣 09/08 05:06
一樣是為了呈現最好的視覺效果沒錯拉 不過這邊是修正單位大小 網頁是直接放出整個版型
dito99:哦 原來如此 09/08 05:10
就這麼簡單
Unbreak:斬擊可以帶我拿裝嗎?(大誤)(遮臉)(逃跑) 09/08 12:43
ak147:Go! 09/08 12:47
sleepybaby:真的 那個那個啦(亂指 09/09 04:13
/指/指/指 ※ 編輯: ak147 來自: 114.25.146.251 (09/09 10:30)