[英]How to remove jitterness from Phaser's Sprite / Background
我設置了一個示例jsfiddle ,用適當的資產來說明這一點。
當你的角色移動並且相機開始平移時 ,你會注意到背景有一個小的“抖動”。 可以通過將game.camera.roundPx
設置為true來禁用此功能。
但是,如果禁用它並移動角色。 你的角色開始抖動。 我在這次冒險中發現的一些事情:
只有在P2
和Arcade
物理下使用body.velocity.x
移動時才會發生這種情況。
如果你用body.x
移動角色或只是x
那就絕對沒問題了。
如果你移除了瓷磚貼圖紋理,你可以從字面上看到在移動時發生的抖動。 示例此處 - 確保您移動足夠遠以使相機平移。
我也試過game.renderer.renderSession.roundPixels = false;
沒有優勢。
這在CANVAS和WEBGL渲染模式下發生
好問題! 這些抖動是由子像素渲染引起的。
當game.camera.roundPx
為false時,Phaser可以對sprite的位置使用非整數值。 根據roundPx
的文檔:
如果Camera將roundPx設置為
true
,它將調用view.floor
作為其更新循環的一部分,將其邊界保持為整數值。 將此設置為false可禁用此操作。
在此Rectangle的x和y值上運行Math.floor()。
當繪制到非整數位置時,瀏覽器會嘗試進行插值,使其看起來好像像素位於兩個像素之間。 這可能會導致源圖像的單個像素顯示為兩個物理像素。 當攝像機平移時,這兩種狀態之間的切換是導致抖動的原因。 這是一個例子:
這就是設置game.camera.roundPx = true
的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.