工作日誌:我們有的只是空空的畫面
雖然上次我表示可以弄些畫面(Screen)了,不過仔細想想,我們能做些什麼? 什.麼.都.沒.有!
接下來討論這些不同面象的畫面要怎麼做,現有的程式又缺了些什麼。
畫廊
很多RPG都有什麼回憶啦,怪物紀錄之類的東西。 大致上來說,它們和遊戲的運作沒什麼關係,只是單純的讀取資料。
想像一下你有一份文件,其中放了一堆1和0好用來表示哪些東西要顯示,哪些不用。 Lua中有一個IO模組,我們是可以用它處理這件事,或是你覺得給它讀寫二進位檔的能力很可怕,也可以自己寫TextReader和TextWriter。 反正讀寫本身沒有太多問題。
接下來我要找相關的圖片並顯示,在Qt中,最簡單的是使用QLabel。 但接下來你很悲痛的發現QLabel的setPixmap吃的是QPixmap,你還得先建立該物件… 再來你又發現QPixmap少了一大堆你要的方法,對,很多Qt物件並沒有把成員函式設為slots。
不管怎麼看,這方面都是要再造一個物件補上去。 而如果你還有別的需求,肯定是要碰C++的,那聽起來真令人不舒服。
設定
像設定這一類的是包含讀和寫,而且它不一定是讀檔,比如你在遊戲中更改的話就是對記憶體讀寫。
我有想過用動態屬性轉向。 Qt中有一個叫QDynamicPropertyChangeEvent的事件,很明顯的會在動態屬性變化時發送。 所以我們可以接到它之後轉給特定函式處理。 不過如果我要增加新的設定選項呢?唉,還是不行,又要回頭加東西。
RPG Maker是怎麼讓它有那麼大的彈性的?也許這和它很多東西都用RGSS做延伸。 可惜我看到那一堆程式碼就覺得研究起來很麻煩,不然現在應該是在做它了。 嘛,不管怎樣,最好的方法還是盡可能的把東西釋出到腳本環境,然後用腳本做延伸。
目前對這點想得到應該是覆載函式這點。 要覆載的話,目前也只有動態屬性可以動。 想想看,我們把一個Lua函式指給動態屬性,而在paintEvent中判斷:如果有這個屬性,就執行它。 而要達成這一步就非得要讓QMetaType認識QtLua::Value,這樣我們才能使用QVariant包裝它。
而剩下的,可能就要拿個RPG Maker的作品來研究一下。