【RM教學 】發生Cannt read prototype ‘width’ of null

今天要來分享一個實用的資訊。我們在製作中時一定常常自己進行測試, 遊玩的時候也沒有任何問題。但,當某一天我們發布測試版本的時候卻會有玩家貼了一張圖上面寫著 「Cannt read prototype ‘width’ of null」

疑?為什麼會跳這個錯誤, 我玩的時候完全沒有碰到這個問題啊?

其實這個現象通常是圖片還沒來的及載入時, 就對圖片進行操作而發生的。
那,為什麼有時候會發生有時候不會發生呢? 這邊就會牽扯到每個人電腦執行的當下狀況, 或是圖片的太大導致來不及載入就執行下一步程式材會出現類似狀況。

說到這邊,作者們在使用顯示圖片/ 立繪 的插件時有時候也有可能發生讀圖很慢,或是要顯示立繪的時候會非常的lag ,其實也是類似的狀況。

其實MV中的圖片大部分都是「要使用先去快取尋找,如果沒有在快取時才載入」, 所以當下要載入份量比較大的立繪時就有可能造成lag 或是 遊戲跳錯誤。

那麼,到底該怎麼解決這個問題?

在這邊,其實官方也有推薦使用 preloadManager.js 插件,他可以在你的dlc裡面找到,你也可以直接上網下載。
這個插件可以讓你在地圖轉換時,預先讀取你要的檔案,這樣就不會在要圖的時候造成lag。

而如果不想要使用插件的話,你則可以這樣在事件中這樣子來達到同樣的效果。
下面這張圖是預先讀取「臉圖」的範例。

以臉圖當範例可能不夠明顯,如果當你要使用picture目錄下的Hero圖片時,那你就可以在事件最上方先輸入下圖的內容

這樣,就先預先載入了Hero這張圖片。後面使用時也就比較不會碰到lag的狀況。
當然…你也可以在轉換地圖時,就先把另外一張地圖會用到的圖片載進來。

在這邊列舉遊戲內建的載圖語法

ImageManager.loadAnimation('圖片名稱'); //載入animationsa目錄的圖;
ImageManager.loadBattleback1('圖片名稱'); //載入battlebacks1目錄的圖;
ImageManager.loadBattleback2('圖片名稱');//載入battlebacks2目錄的圖;
ImageManager.loadEnemy('圖片名稱');//載入enemies目錄的圖
ImageManager.loadCharacter('圖片名稱');//載入characters目錄的圖
ImageManager.loadFace('圖片名稱');//載入faces目錄的圖
ImageManager.loadParallax('圖片名稱');//載入parallaxes目錄的圖
ImageManager.loadPicture('圖片名稱');//載入pictures目錄的圖
ImageManager.loadSvActor('圖片名稱');//載入sv_actors目錄的圖
ImageManager.loadSvEnemy('圖片名稱');//載入sv_enemies目錄的圖
ImageManager.loadSystem('圖片名稱');//載入system目錄的圖
ImageManager.loadTileset('圖片名稱');//載入tilesets目錄的圖
ImageManager.loadTitle1('圖片名稱');//載入titles1目錄的圖
ImageManager.loadTitle2('圖片名稱');//載入titles2目錄的圖

當你在遊戲中或是玩家碰到 「Cannt read prototype ‘width’ of null」這個問題時,不仿確認一下玩家是在操作什麼時碰到這個問題。
然後再針對那個事件或是地圖用以上語法進行預載看看,或許就可以解決你的問題囉!

發表迴響