創作內容

7 GP

[RM RGSS] 優化的一些心得

作者:未来ずら│2017-04-22 01:21:48│巴幣:1,012│人氣:549
最近回頭看了下之前發的全按鍵,想將它優化下
總之先比較下 update 速度吧,畢竟是要每畫格用一次的東西,

以下是 全按鍵(Kboard.update) 內建(Input.update) 的比較結果:


...內建方法超爆幹快的有木有啊,不愧是內建


之前的版本是用 WIN32 API的 GetAsyncKeyState
但這方法一次只能判斷一個鍵,於是update就要一個鍵一個鍵去call API判斷
聽說RGSS去call API的過程很慢
所以想到的辦法就是控制一畫格call API的次數


總之上網找了下有沒有一次取得所有按鍵狀態的方法,這樣就能一畫格只call一次
最終找到了GetKeyboardState
排除一切萬難後(什麼上位下位啦、結構體啦、指針啦、byte數組等一堆從沒看過的東西)終於做出了 Kboard.update2

再來比較下速度:


比舊版快了一倍,這就是成長的證明啊!不過還是輸內建10倍

...

本來想說就這樣了,不過在敲這篇的同時又想到:
「其實我要用全按鍵腳本判斷的鍵也就20幾個,就不能只更新它們嗎」

修改之後得到以下結果:



(゚∀。)b  水啦!完全大幅成長!無敵了!!
我甚至在想內建腳本能用的按鍵這麼少是不是因為這個

好,就這樣,腳本也更新了,歡迎取用



其實就是有人問RM怎麼優化,但這不是一兩行能說明的,所以就打了這篇
優化的過程大概就是這麼個一回事


事件當然也可以優化,在有限的規範內榨取更多效能,不就是優化在做的事嗎

有摸過RM的都知道並列處理用多了會很卡,
像是玩那些小黃油常有那種紙娃娃角色在畫面右邊,有人就會用個定期處理去檢查換裝
或是什麼小時鐘,每畫格都加一次時間單位...

然後就卡爆了

換裝呢,既然是純事件,那都是用技能或道具在換,可以把換裝判定寫在這些事件的最後
時鐘也可以做成觸發事件、過地圖等才計算

像這樣,就可以減少使用並列處理的頻率 (當然如果非用不可,也只能用了)

---

不過如果是個還沒做出東西來的新人,可以先不管優化什麼的,
東西都還沒做出來就在研究怎麼更快已經本末倒置了,做完之前,你也不知道怎麼更快
做完之後,通常還是不知道
你看那個已故的茶時間優化這麼慘遊戲還不是照出

它就是個可能哪天查資料查到一半才會發現,
或是像這篇文打到一半忽然靈光湧現的...經驗的累積
(如果在這之前沒研究搖桿API,那個Kboard.update2也寫不出來)


像是八方向判斷,你要怎麼做,假設 x: -1是左、y :-1代表上
(゚∀゚)/ < 我知道我知道,用條件分歧:
  if x == -1 && y == -1
    return 7
  elsif x == 1 && y == -1
    return 9
  elsif x == -1 && y == 1
    return 1
  elsif x == 1 && y == 1
    return 3
  elsif x == -1
    return 4
  elsif x == 1
    return 6
  elsif y == -1
    return 8
  elsif y == 1
    return 2
  else
    return 5
  end


好,因為RMMV的 Input 直接開源,我們看它怎麼寫:
return  5 - y * 3 + x





就這樣,一行

看到這行前我從沒想過可以這樣寫,然後前者速度輸後者30%
唯有寫過才能感受到那一行散發出來的霸氣


經驗的累積啊...


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3551895
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:RM|RGSS|心得

留言共 5 篇留言

oVo巴爾坦星人
正好今天想到這個問題就看到你這篇 還是這個月的...
不過RGSS出現這麼久了~ 優化的討論真少~

05-01 18:26

未来ずら
畢竟優化不是只限RM的東西,用哪個工具哪種語言都要考慮的,與其找RGSS優化,找程式碼優化東西還比較多05-01 18:59
oVo巴爾坦星人
可惜大大玩的是MV... 傷心~
小弟之前了解了MV之後決定 RM[XP/VA] 和 UNITY視情況使用...
我覺得MV的設計 不上不下的... 做單機做不了小容量的小品...
我嫌主程式太大... 旦如果要別人用瀏覽器開的話又有點脫褲子放屁(抱歉這樣形容)
要輸出給手機又不如專門的引擎好用~ 專門的引擎還可以透過USB直接連手機測試

05-01 18:34

未来ずら
沒啊,我現在主要還是碰RGSS,因為Ruby寫起來比較舒服。只能說什麼需求用什麼工具,像打磚塊那圖片處理,VA以前要用WinAPI,不會,看了下MV,喔是預設功能,那用MV,就這樣而已05-01 19:17
oVo巴爾坦星人
ㄚㄚ十分抱歉 OTZ....
看到你提很多MV的東西以為你改玩MV了...
我是滿不喜歡MV的設計... 因為自己接觸很多不同的遊戲製做IDE所以會說MV不上不下的~
RM系列的編輯器確實好用~ 旦我覺得MV主打的點...在其它比較成熟的IDE或引擎除了編輯器輸給MV之外其他點都比MV好...
尤其我想搞3D的東西~ 這點 RM都還不成熟...

05-01 19:24

oVo巴爾坦星人
http://www.facebook.com/groups/225401347515713/
以後請多指教

05-01 19:24

Anly
天啊 我好久沒回來QQ
return 5 - y * 3 + x
這個真有氣從我螢幕震出來xD

06-21 18:44

未来ずら
一...一行...06-22 00:23
我要留言提醒:您尚未登入,請先登入再留言

7喜歡★qootm2 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【RMVA/MV】用語辭... 後一篇:SSD的爆炸搶救記錄...

追蹤私訊切換新版閱覽

作品資料夾

ilove487奇幻小說連載中
《克蘇魯的黎明》0671.蛇人第一王國伐盧希亞看更多我要大聲說昨天21:20


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】