2016-09-26 129 views
3

當限制矢量myVector.limit(10);時,您可以給Y值「優先」嗎? IE從矢量X上減去,但不要觸摸Y? 我想用下面的僞代碼優先考慮矢量的Y值

if(myVector.mag()>=10) 
{ 
myVector.x--; 
} 

的是,一個「好」的想法還是有處理這個問題的更好的辦法?

編輯:

什麼我做的是努力當它上山來限制汽車的速度。通過限制X,我希望阻止它只是「跳」上山。

回答

2

我們不能告訴你這是否是一個好主意,因爲這取決於你想要做什麼。

我會說你的方法不會處理你想限制你的PVector的值小於y值的情況。

但是當然,沒有什麼能阻止你分別處理xy的值。您可以考慮使用map()constrain()函數。

//limits your `y` value to be between 0 and 10 
myVector.y = constrain(myVector.y, 0, 10); 

另一個提示是在the source code看後面的PVector#limit()功能,這是非常簡單的:

public PVector limit(float max) { 
    if (magSq() > max*max) { 
     normalize(); 
     mult(max); 
    } 
    return this; 
    } 

這一切正在做的是使PVector等於不管你傳遞到limit()的大小功能。你可以做一些類似於y的值。也許可以使用除法來計算y值給你x值的目標值?

但就像我說過的,你所做的事情取決於你的目標是什麼。

編輯:你也可以考慮改變你如何儲存你的動作。不是存儲X速度和Y速度,而是存儲角度和速度。

換句話說,要跟蹤你前進的方向,以及你要走多快。然後,您可以使用cos()sin()來計算X速度和Y速度。那麼你只需要限制整體速度,而不是單獨限制Y速度。

+1

我認爲我從你告訴我的更多知識中瞭解到我需要修正/改進我的問題,然後閱讀SO的指導原則。再次感謝Workman先生!我正在編輯我的問題,以便爲了社區而改進它。 – Christopher

+1

@ChristopherPeart哈哈,沒問題。感謝您花時間改善您的問題。我還編輯了我的答案,以包含您可能考慮的另一種方法。 –

+1

我認爲你肯定是讓我回來的原因之一。可悲的是我無法回答的大多數問題,但總是努力回饋! – Christopher