2015-05-15 30 views
0

我有一個問題,我說,一個對象在中間,然後我想從對象射出一個拋射物。可以這麼說,我做了很多的觸發/幾何來獲得適合這個「隱形三角形」邊長的角度,但是我對射彈的速度有問題。如何處理「部分像素」

如果我確實跑過去了,速度移動得太快了,因爲我的畫布只有800 X 600.如果我試圖用非常大的數字來劃分這個數字,那麼它往往會毀了由於像素不能移動分數/小數,所以我基本上必須將此數字保持在0以上,否則它將完全忽略該速度。

例如,如果我有一個上升超過運行:

rise = 800 
run = 50 

如果我除以10,我的velocity.X = 5,但我的velocity.Y = 80(將被關閉內的畫布一秒)。如果我用一個更大的數字來表示,比如說100,那麼velocity.Y現在是8(仍然很快,但是更易於管理),但是velocity.X = 0.5,由於drawRectangle像素點需要是整數,因此velocity.X將舍入爲0。因此,這使得這個拋射體以8的速度向上移動,並且因爲其移動到0而不能正確移動。

我研究了以相同速率增加速度直到兩者都大於0的想法,但這會導致(1,16),很可能它會很快再次離開屏幕,並且/或者看起來好像它從未被解僱過。

有沒有一種很好的方法來處理這種情況?

+4

您不必將對象的位置存儲爲像素。您應該區分(a)您正在工作的世界和(b)該世界的渲染...... –

+0

CommuSoft說什麼和/或做浮點物理計算。 –

回答

-1

用於射彈,只有當它以45度角起飛,如果你改變了角度可以使用不同的速度爲X和Y兩者

水平速度=初始速度* COS水平和垂直速度將是相同的(a) 垂直速度=初始速度* sin(a)

1

使用浮點運算執行集成。甚至可能使用逼真的現實世界的物理單位和尺寸對物理進行建模。

當您繪製系統時,請將浮點物理座標轉換爲整數屏幕座標。你必須決定物理和屏幕之間的映射,但是你已經在問題中表現出了這種意識。關鍵在於您儘可能遲地將轉換留下。