使用cocos creator的過程中碰到的問題記錄


1>編輯器不能識別腳本里面@property類型,顯示為null,腳本拖不上去

是@property的類循環引用導致的,可以改變組件類型到cc.Node解決

2> Cannot read property '_assembler' of null ,切換場景時出現。

在這個案例中,場景某一個子節點 onload方法里拋出了一個錯誤,導致后面所有的onload不能順利執行,導致render組件未能初始化

3>使用NodePool創建對象池,第一次使用放進去再取出 觸摸事件不見了,再次添加也加不上。

 這個問題花了我三個小時查出來,在此公布答案希望大家不要犯。我把node節點從父節點remove了,然后put進對象池,再取出來就沒了點擊事件。
解決方法有2 不要remove, 在remove里clearup置位false
4>使用代碼添加animation不顯示 
還需要添加sprite,切記切記
5>跨多層節點轉換坐標. 需要先將目標節點轉化為世界坐標,然后在轉換成對應節點的坐標.使用api: 
convertToWorldSpaceAR 
convertToNodeSpaceAR
6>碰到了帶物理的節點與回收池異常的問題.從回收池出來的第二次利用的節點對implus調用反應動作的異常. 一開始以為是引擎bug.然而論壇反饋問題剛寫到一半,忽然想到,
會不會事情倒過來了.第一次是異常的,第二次的表現才是正確的.為了驗證這個猜想,將編輯器上的相關數據改動,一看,果然,第一次使用的是編輯器上的默認值.那么,為什么在代碼中改動會不生效呢.
這要怪罪於我對物理系統並不怎么熟悉的緣故.須知改動任何的collider的屬性,都要apply一下.這樣引擎內部會重新生成box2d碰撞盒子.
7>removeFromParent方法並不會調用節點腳本上的onDestory方法.  會調用onDisable
8>設置sprite的spriteFram需要使用texture2d new一個對象出來.直接賦值可能導致多個sprite使用一個texture2d對象,造成意料之外的行為.
9>put進對象池的操作會自動將其從父節點脫離,.所以在onDisable里面進行put操作會導致重復脫離. 並且導致后面的引擎disable操作空指針錯誤.
 
10>target.getComponent is not a function   button所依賴的節點從某個方法上發生了屬性改變。變成非cc.Node屬性。瀏覽器調試排查出錯誤。
11>js幾乎同一時間,同一幀里面調用同一個方法2次。碰撞檢測會出現這個情況,在同一幀里面調用2次碰撞回調。這時候 依賴碰撞檢測執行的代碼會調用2次或以上,這與我的邏輯相違背。一開始我在代碼里面設置了標志位,遺憾的是行不通。想來js是單線程運行。雖然是在一幀里面執行代碼2次,但也有先后。而設置標志位,是建立在一些語言可以多線程運行的情況,跑的快的先占這個方法,在他沒執行完的時候其他調用返回。既然如此,最后我用了什么方法呢,讀取了引擎目前為止所有的幀數,使用變量存儲,等待js在同一幀第二次跑這個方法,用幀數判斷是否重復執行。其實現在看起來是很基礎的常識,然而我搞了半天才理解這個概念。
12>loadRes加載的資源會保留在cc.loader的cache中,你的this. list只是引用,因此改變this.list的元素,也就是改變了cache中這個數組的元素。

再次進行cc.loader.loadRes時,由於這個資源已經被load過了,就會直接取cache中的給到你。因此你會發現再加載得到的內容中有新增的元素。

解決辦法:

方案1、json加載后進行深拷貝后再使用
方案2、再次加載前使用cc.loader.releaseRes("level"),釋放掉之前的資源,然后再進行重新加載

13>腳本的onLoad的是在腳本所有資源加載完畢的時候執行的。所以。在其他地方 (onLoad之前)調用節點資源,就會報錯。使用schdule類的任務涉及到這種類型的結點時,更是難以查找錯誤。

14>setZIndex無效可能是因為使用了不同的group

15>node >sprite的sizemodel只有在設置了spriteFrame之后設置才有效、

16>使用node.dispatcher()api向scrollview節點內傳遞事件時,可能會導致無效,也不知道是什么原因導致的、

17> scrollview的大小將影響滑動的可觸碰位置

18>顯示在所有界面之上的元素謹慎使用canvas . 會造成觸摸問題。

19>全局對象和標注了@executeInEditMode


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM