我已經解決了8個使用BFS算法的謎題,並將需要的移動存儲到一個數組中,然後將這些數字轉換爲0表示需要向上移動或1移動或2移動左或右3。我不知道我將如何動畫8個正方形來解決我在BFS中的相應動作。我知道使用定時器以及如何在一般情況下做動畫,而不是如何在正確的時間順序地動畫正確的方形。他們總是需要在任何給定的方向上移動80個像素。如果有人能指出我正確的方向,我會很感激。8個謎題解決的OpenGL虛擬動畫
0
A
回答
0
我不明白你怎麼可以寫一些東西來解決這個難題,但不知道如何維護一個簡單的計數器來爲一個值設置動畫。
假設您的頻率爲每秒移動的F
,以及自動畫開始以來的秒數T
。
那麼這個想法就是M
開始於T*F*M
並且持續時間爲1
(或者更少,如果你想在兩次移動之間暫停)。
現在,您只需要一個插值函數來混合這些值。線性插值(LERP)最容易,但您可能希望樣條函數在端點處加速/減速。但是你這樣做,函數只是需要一個起點,一個終點,以及相對位置t
是0和1之間
double blend(double from, double to, double t)
{
// linear interp:
return from * (t-1.0) + to * t;
}
所以,你只要通過計算小數部分fmod(T*F*M, 1.0)
計算t
。如果持續時間少於1
,則不會更改該fmod
呼叫中的1.0
。您只需將其夾在您的期限D
,然後除以D
。
0
當我需要做這樣的事情時,我使用一個變量來保留動作動畫的剩餘時間。要知道你要移動到側面至極一塊,我建議你使用堆棧,這樣的結構:
struct commands{
int piece;
int direction;
struct commands next;
};
首先,你一疊您需要解決這一難題的所有命令,然後,當動畫時,你重置變量,保持剩餘時間爲80,並在時間函數內:
void move_piece(int a){
//Move the piece 1 pixel to the side you want
switch(stack->direction){
//Move the piece to x+1
case 0:
piece[stack->piece].x++;
break;
//Move the piece to y+1
case 1:
piece[stack->piece].y++;
break;
case 2:...
...
}
time--;
if(time==0){
//The piece is in it's place
//Go to the next piece
time=80;
}
glutTimerFunc(20, move_piece, 0); //Change 20 to change the speed of the animation
}
這只是你如何做到這一點的一個例子。我不知道你如何存儲這個文件的位置,在這個例子中,我想這是一個結構體。
相關問題
- 1. 解決這個謎題的SQL
- 2. 解決球拍中的謎題
- 3. 請幫我解決iPhone中的謎題?
- 4. 用python解決混亂的字謎題?
- 5. 虛擬化解決方案
- 6. 序言 - 試圖解決文本謎題
- 7. C#Linq比PHP慢?解決謎題#236A
- 8. 解決邏輯謎題在序言
- 9. 在Prolog中解決邏輯謎題
- 10. 解決java的謎語
- 11. Android虛擬設備的IntelliJ問題解決方案問題
- 12. 解剖一個謎題forloop解決方案
- 13. 動畫虛擬鍵盤
- 14. 解決虛擬主機的Apache 2
- 15. 解決'構造函數中的虛擬方法調用'問題
- 16. 如何解決HttpServerUtility.TransferRequest中的「預計虛擬路徑」問題?
- 17. 如何解決這個帶有約束的自動佈局「謎題」?
- 18. 通過BFS解決8個難題
- 19. python idastar vs astar解決8個難題
- 20. 大規模動態虛擬主機解決方案
- 21. UICollectionView.scrollToItemAtIndexPath動畫與虛擬鍵盤
- 22. 計算給定數獨謎題的解決方案數量?
- 23. 解決簡單的音樂家邏輯謎題在序言
- 24. Python3:python3中的cryptarithmetic謎題通用解決方案
- 25. 無法找到N皇后謎題的可能解決方案
- 26. 如何以編程方式解決Nine 9的謎題?
- 27. PHP謎題解算器
- 28. Android交叉解決動畫
- 29. 解決Android/OpenGL IllegalStateException
- 30. 無法按組來解決字謎?