2012-06-02 72 views
11

在兩張附加的圖片中,libgdx的桌面截圖按預期工作。不幸的是,我的Galaxy Nexus的屏幕截圖並不如預期。我正試圖創建一個簡單的運動模糊或跟蹤效果。在Libgdx中實現簡單運動模糊的意外結果

按照我的預期在我的桌面上進行渲染。 Libgdx running on my desktop, working as expected

未呈現,如我所料在我的Galaxy Nexus。 Libgdx running on my Galaxy Nexus not working as expected

在渲染過程中將圓形紋理繪製在for循環中,並且使用在圓圈之前繪製的0,0,0,0.1f的RGBA的像素映射來實現該效果。

screenClearSprite創作

Pixmap screenClearPixmap = new Pixmap(256, 256, Format.RGBA8888); 
screenClearPixmap.setColor(Color.rgba8888(0, 0, 0, 0.1f)); 
screenClearPixmap.fillRectangle(0, 0, 256, 256); 
screenClearTexture = new Texture(screenClearPixmap); 
screenClearSprite = new Sprite(screenClearTexture); 
screenClearSprite.setSize(screenWidth, screenHeight); 
screenClearPixmap.dispose(); 

渲染

batch.begin(); 
font.draw(batch, "fps:" + Gdx.graphics.getFramesPerSecond(), 0, 20); 
screenClearSprite.draw(batch); 
for (int i = 0; i < circleBodies.size(); i++) { 
    tempPos = circleBodies.get(i).getPosition(); 
    batch.draw(circleTexture, (tempPos.x * SCALE) + screenWidthHalf 
      - circleSizeHalf, (tempPos.y * SCALE) + screenHeightHalf 
      - circleSizeHalf); 
} 
batch.end(); 

所以,我做了什麼錯?也許有更好的方法來獲得運動的「運動模糊」效果?

+0

你能在其他Android設備上重現此行爲嗎? –

+1

您是否確定存在問題,因爲第二個屏幕截圖上的球看起來好像比第一個屏幕截圖上的球移動速度慢?你的遊戲循環是什麼?您是否使用當前時間來計算運動模糊 - 可能與您的PC CPU相比,連接處的CPU速度更快/更慢。 –

+0

是的,這是可重現的我的充滿活力和Galaxy Nexus S. 至於模糊,他們是沒有運動模糊計算。運動模糊可能不是效果最準確的術語。我正在查找的效果在頂部圖像中精確描述。問題似乎是繪製爲不透明層的紋理不能正確計算爲1。這導致了我無法解釋的討厭的裸奔,因爲它在我的兩臺電腦上按預期工作。 # –

回答

0

這是一種不同的方法,在那裏你清除每次用純色,無阿爾法屏幕。

這意味着,你將不得不修改一些代碼。關於這件事的好處是,你這樣做的方式有一些缺陷:它會模糊一切在運動,而不僅僅是球。除非你小心,否則會很快產生醜陋的結果/文物。

  1. 一樣做你現在正在做,但不是繪製球批次,吸引他們到紋理/位圖/不管。然後每個幀在球形圖像上添加一個alpha混合圖像,然後在其當前位置繪製球體。然後將該圖像添加到屏幕上。非常像你現在正在做的事情,除非你吸引別人並保留它。這樣你就不必依賴你正在繪製的視口,並且可以保持一切分離。 該方法類似於繪製到累積緩衝區

  2. 而不是按照自己的方式進行,您可以跟蹤每個球的最新位置。然後用不同的阿爾法將每一幀畫出來。這很容易實現。如果您有很多球或大的球會導致很多繪圖調用,但如果它不是太多,它不應該限制您的fps並給出很好的控制。

+0

#1可能是最好的選擇。我實施了#2,但球必須快速移動才能看到線索,所以我需要更改多久保存一次以前的位置才能獲得一條長長的線索。 另外,我不能測試這個,直到後來,也許是精靈本身允許修改阿爾法這將是我的原始相同的方法,但可能按預期工作。因此,使用1的alpha來創建像素圖,然後使用0.1f的精靈alpha。精靈在Libgdx中有這種能力嗎? –

+0

@tencent您可以將'glBlendFunc'和'glBlendColor'一起使用以乘法將紋理顏色與常量顏色混合。 –

0

也許有一個更好的方式來獲得 運動的「運動模糊」的效果?

爲了使運動模糊在我的遊戲我用另一種計算策略「粒子效果」它工作真的我沒問題,我沒有Android設備/桌面的問題或與不同的Android設備

所有你需要做的就是使用Libgdx的「粒子效果編輯器」,並使你的效果,然後加載它在你的項目中最後繪製它在你繪製對象的相同位置(和繪製你的對象alos)

提示使用Paticle Editor製作正確的效果文件:

  • 集(使用)要模糊它運動的粒子效果

  • 嘗試限制計數對象相同的圖像:粒子的允許的最大數量

  • 禁用「速度」和「角度」 參數

粒子效果幫忙做運動效果 希望這會幫助別人!