物理幀和渲染幀分開,目的就是確保 邏輯的 同步性,ab兩個客戶端 pk,手機性能不同,雖然服務端同時發送,但不能由於a手機配置低,卡了,致使跟不上。性能
雖然 作了跳幀處理,但加速 不必定要讓渲染幀也加速,不然 手機 性能更不上,仍是卡。因此必須讓 邏輯渲染分開。spa
邏輯幀 一秒 6--10次,渲染幀 一秒 60.目前安卓是這樣,蘋果多是30.code
若是把 人物角色放在 邏輯幀裏,那麼 動做看起來就不流暢,因此要放到 渲染幀裏面,具體以下。orm
void OnSetPK() { //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// int count = GModel.getInstance.list.Count; //添加 英雄 for (int i = 0; i < count; i++) { hero hr = GModel.getInstance.list[i]; hr.OnAddHero();//添加英雄 } //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// int counts = GModel.getInstance.list.Count;// //刪除 沒有血英雄 for (int i = 0; i < counts; i++) { hero hr = GModel.getInstance.list[i]; hr.OnDestroyHero();//刪除英雄 } //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// int countt = GModel.getInstance.list.Count;// //處理邏輯英雄 for (int i = 0; i < countt; i++) { hero hr = GModel.getInstance.list[i]; hr.OnFrame();//處理英雄 }
建立英雄 刪除英雄 英雄邏輯處理,必須是在 邏輯幀裏面 統一管理。對象
先 查看 當前幀 有沒有須要 建立的,其次是血量不夠要刪除的,最後是 現有的 英雄邏輯處理。blog
在英雄對象 裏面,要作一個 跟蹤。由於邏輯幀不流暢,放到update裏面作,不知道下一步位置,那麼就要用 跟蹤方式。ci
void Update() { float newPositionX = Mathf.SmoothDamp(transform.position.x, vec.x, ref xVelocity, smoothTime); float newPositionY = Mathf.SmoothDamp(transform.position.y, vec.y, ref yVelocity, smoothTime); transform.position = new Vector3(newPositionX, newPositionY, 11); }
大概如上,這樣只要跟的緊,不會讓 玩家看出 有沒有碰到。get
最後效果如圖,拖拽後,前面是 白色後面是彩色卡牌,白色卡牌 是邏輯幀,只要碰撞就可,如今顯示爲了你們看清。同步
後面的彩色卡牌是 渲染幀裏面執行。能夠發現,白色 每次一大步,但看起來卡,彩色每次一小步但流暢。玩家到時 只看到彩色。但發生碰撞或邏輯,it
程序都按白色卡牌來計算,他們 走的 很近,偏差忽略不計,也能夠經過速度調整,讓更快的 移動能跟的 更近。這樣,就算手機卡,我能夠關閉渲染幀,邏輯跳幀繼續執行,而後等跳幀結束,我再打開渲染幀,那時渲染幀 雖然離 邏輯幀 更遠,但他只執行 最後 目標,因此 很快就 看起來天然了。