一、Silverlight中的三種動畫:
Storyboard動畫的建立必須依賴關聯屬性(相依性屬性),為建立一系列高度連續變化的動畫提供解決方案,甚至實現更為複雜的KeyFrame主要畫面格動畫。
CompositionTarget動畫適合基於全域畫面重新整理時的時時屬性更改,比如遊戲迴圈等等。
DispatcherTimer動畫則非常適合運用於對象的自有動作動畫中,例如精靈的移動,戰鬥,施法動作;魔法播放動畫等等。
二、“八朝向”演算法
/// <summary>
/// 計算當前座標與目標點之間的正切值擷取朝向
/// </summary>
/// <param name="current">當前座標</param>
/// <param name="target">目標座標</param>
/// <returns>朝向代號0、1、2、3、4、5、6、7</returns>
public int GetDirection(Point current, Point target) {
double tan = (target.Y - current.Y) / (target.X - current.X);
if (Math.Abs(tan) >= Math.Tan(Math.PI * 3 / 8) && target.Y <= current.Y) {
return 0;
} else if (Math.Abs(tan) > Math.Tan(Math.PI / 8) && Math.Abs(tan) < Math.Tan(Math.PI * 3 / 8) && target.X > current.X && target.Y < current.Y) {
return 1;
} else if (Math.Abs(tan) <= Math.Tan(Math.PI / 8) && target.X >= current.X) {
return 2;
} else if (Math.Abs(tan) > Math.Tan(Math.PI / 8) && Math.Abs(tan) < Math.Tan(Math.PI * 3 / 8) && target.X > current.X && target.Y > current.Y) {
return 3;
} else if (Math.Abs(tan) >= Math.Tan(Math.PI * 3 / 8) && target.Y >= current.Y) {
return 4;
} else if (Math.Abs(tan) > Math.Tan(Math.PI / 8) && Math.Abs(tan) < Math.Tan(Math.PI * 3 / 8) && target.X < current.X && target.Y > current.Y) {
return 5;
} else if (Math.Abs(tan) <= Math.Tan(Math.PI / 8) && target.X <= current.X) {
return 6;
} else if (Math.Abs(tan) > Math.Tan(Math.PI / 8) && Math.Abs(tan) < Math.Tan(Math.PI * 3 / 8) && target.X < current.X && target.Y < current.Y) {
return 7;
} else {
return 0;
}
}
三、速度係數的理解
關於速度係數的理解。
數學公式:s=v*t
而這裡(k為速度係數):s*k=t。這樣,s/t=1/k。也就是v=1/k。距離乘以係數得到時間。
這樣,速度係數越大,單位時間內移動的距離就小(速度),物體運動的就越慢。
再來看這個公式:s*k=t。是不是係數“k”越大,所用時間“t”就越大。“s”距離一定,時間長了,速度自然慢。
朋友,如果您有什麼真知灼見,可以加“新浪微博”/MSN哦,starrycheng@live.com,我們大家一起討論,一起研究。
最後,幫忙加一分吧,想整個空間系統。