在 中以兩種方式在兩個Point對象之間繪製線條的最簡單方法是什麼?在兩個Point對象之間創建動畫
例如:
Point a = new Point(5,20);
Point b = new Point(15,20);
如何這些點與 「移動」 線連接?
換句話說,我想讓用戶感覺某種「動作」。有沒有簡單的方法來做到這一點?
在 中以兩種方式在兩個Point對象之間繪製線條的最簡單方法是什麼?在兩個Point對象之間創建動畫
例如:
Point a = new Point(5,20);
Point b = new Point(15,20);
如何這些點與 「移動」 線連接?
換句話說,我想讓用戶感覺某種「動作」。有沒有簡單的方法來做到這一點?
繼Chinmay Kanchi的回答之後,你需要創造一種動畫的感覺。正如上面在Uhlen的評論中提到的那樣,在EDT上工作時應該使用Swing's Timer。給你如何使用Timer的例子。讓我們假設我們有一個面板,我們希望它可以在例如點擊按鈕,因此我們需要通過增加其大小來使其滑動打開。下面是一個例子,顯示你將如何使用Timer來執行操作。
this.extendingTimer = new Timer(0, new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//assume sliding is vertical
int value = maximumHeight;
//make sure the size will not be bigger then allowed maximum
if(currentExtensionSize + extensionRate >= value)
{
currentExtensionSize = value;
stopExtending();
}
else
currentExtensionSize += extensionRate;
setSize(new Dimension(maximumWidth, currentExtensionSize));
}
});
extendingTimer.setInitialDelay(0);
extendingTimer.setDelay(100);
extendingTimer.setRepeats(true);
給定兩點,您可以確定連接它們的線的方程式。線的方程形式爲y = mx + c
,其中m是斜率,c是y截距。
所以,考慮到你的兩點(5,20)和(15,20),我們首先確定m。
m = (y2-y1)/(x2-x1)
= (20-20)/(15-5)
= (0)/10
= 0
代入公式爲一條直線,我們得到y = 0x + c
或y = c
。現在我們知道了這一點,我們只需要知道y = c和5 < = x < = 15的點。簡單地以正常方式繪製每個點(在確切的方法中查看this),在繪製每個點之間調用Thread.sleep()
。在這種情況下,你只需要畫出11個點,所以每100毫秒繪製1點就有意義。有關Thread.sleep()
的詳細信息,請參閱here。
編輯:由於Thread.sleep()
無法在EDT上運行,請參閱javax.swing.Timer,正如Uhlen所建議的那樣。
int lineCount = 0; //global
// timer calls the below
xLocation = (*a)[a->size()-1] * timeSoFar/duration ;
if(xLocation > (*a)[lineCount+1]){
lineCount++;
}
double m = ((*b)[lineCount+1] - (*b)[lineCount])/((*a)[lineCount+1]-(*a)[lineCount]);
double yIntercept = (*b)[lineCount]-m*(*a)[lineCount];
yLocation = m * xLocation + yIntercept;
xLocation = (yLocation - yIntercept)/m;
這是C++和使用的載體,但其我們想要的理論。這允許多行不只一行。
從90年代中期開始,人們將Java拼寫爲JAVA的另一個時間扭曲 – 2011-02-15 22:26:30