當限制矢量myVector.limit(10);
時,您可以給Y值「優先」嗎? IE從矢量X上減去,但不要觸摸Y? 我想用下面的僞代碼優先考慮矢量的Y值
if(myVector.mag()>=10)
{
myVector.x--;
}
的是,一個「好」的想法還是有處理這個問題的更好的辦法?
編輯:
什麼我做的是努力當它上山來限制汽車的速度。通過限制X,我希望阻止它只是「跳」上山。
當限制矢量myVector.limit(10);
時,您可以給Y值「優先」嗎? IE從矢量X上減去,但不要觸摸Y? 我想用下面的僞代碼優先考慮矢量的Y值
if(myVector.mag()>=10)
{
myVector.x--;
}
的是,一個「好」的想法還是有處理這個問題的更好的辦法?
編輯:
什麼我做的是努力當它上山來限制汽車的速度。通過限制X,我希望阻止它只是「跳」上山。
我們不能告訴你這是否是一個好主意,因爲這取決於你想要做什麼。
我會說你的方法不會處理你想限制你的PVector
的值小於y
值的情況。
但是當然,沒有什麼能阻止你分別處理x
和y
的值。您可以考慮使用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速度。
我認爲我從你告訴我的更多知識中瞭解到我需要修正/改進我的問題,然後閱讀SO的指導原則。再次感謝Workman先生!我正在編輯我的問題,以便爲了社區而改進它。 – Christopher
@ChristopherPeart哈哈,沒問題。感謝您花時間改善您的問題。我還編輯了我的答案,以包含您可能考慮的另一種方法。 –
我認爲你肯定是讓我回來的原因之一。可悲的是我無法回答的大多數問題,但總是努力回饋! – Christopher