接上回所述,咱們的飛行員已經開始往下飄落了,但是似乎少點什麼,所謂沒有危險那裡來的樂趣,是以要增加一個敵人來搞定為主角造成點難度,本篇作為無聊,隻是說了一些廢話,重複了前幾篇的代碼,隻是不過稍微做了一些修改,廢話少說,直接上圖:
<a target="_blank" href="http://blog.51cto.com/attachment/201111/162651357.jpg"></a>
我們看到和上次相比,增加了兩個部分,一個是零件堆,一個是血條,首先我們先完成血條的部分,這部分代碼如下:
public class ClassFlyerLife : StackPanel
{
//用一個StackPanel容器來作為生命條
StackPanel Life = new StackPanel() { VerticalAlignment = VerticalAlignment.Center };
public ClassFlyerLife()
Width = 120;
Height = 18;
this.Background = new SolidColorBrush(Colors.Orange);
Image Face = new Image();
Face.Width = Face.Height = 16;
this.Orientation = orientation.Horizontal;
Face.VerticalAlignment = VerticalAlignment.Center;
Face.Source = new BitmapImage(new Uri(@"Src/face.jpg", UriKind.Relative));
this.Children.Add(Face);
Life.Width = 100;
Life.Height = 16;
Life.Background = new SolidColorBrush(Colors.Red);
this.Children.Add(Life);
Canvas.SetLeft(this, 10);
Canvas.SetTop(this, 10);
}
建立一個ClassFlyerLife類繼承StackPanel,用來做頭像以及血條的容器,然後分别建立出來血條和頭像添加到容器中,可以控制Life的Width來控制血的多少。
OK,下一步,建立飄動的螺絲和螺母,這個部分的動畫基本上和主角的沒什麼太多差別,隻是從6行變成了1行,仍然是8幀一行,隻需要拆分放到Frames組當中即可,當中的動畫也是和主角的一樣,通過一個NextFrame以及一個定時器來重新整理。
代碼部分不做送出,基本上大同小異,可是和飛行員有一個非常不同的地方,那就是螺絲和螺母共享大量的資料以及處理方法,隻是圖檔不同罷了,那麼按照偉大的面向對象方法隻需要簡單繼承一下就好啦……不過看起來于此做法非常不值得,還是簡單的做吧,在構造函數中增加一個參數,用枚舉的方法來區分到底是螺絲釘還是螺絲母,為這問題也是轉悠的半天,還是看看代碼吧。
/// <summary>
/// 螺絲或者螺母的枚舉
/// 在ClassSolid構造的時候據此選擇螺絲或者螺母的圖檔
/// </summary>
public enum emSolidSort
nut, screw
/// 固體類,也就是飛行員的敵人。。。
public class ClassSolid : Canvas
int _iFrame = 0;
Image _image;
ImageSource[] SolidFrames = new ImageSource[8];
public ClassSolid(emSolidSort sort)
_image = new Image();
BitmapImage bitmap;
if(sort == emSolidSort.nut)
bitmap = new BitmapImage(new Uri(@"Src/solidLM.png", UriKind.Relative));
else
bitmap = new BitmapImage(new Uri(@"Src/solidLS.png", UriKind.Relative));
bitmap.ImageOpened += new EventHandler<RoutedEventArgs>(bitmap_ImageOpened);
_image.Source = bitmap;
this.Children.Add(_image);
//設定一個循環來控制Solid的動畫
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(TickGameFrameLoop);
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(30); //重複間隔
dispatcherTimer.Start();
所有的Solid應該有一個飛行的控制,那麼這個部分和Cloud很接近,但是我們要讓遊戲“搖擺”起來,是以和雲彩也有一點點的不用,即Solid會随風發生變動,做風力的方法也比較簡單,隻是将X坐标做了偏移,用來表示風向發生的變化:
<a target="_blank" href="http://blog.51cto.com/attachment/201111/162723219.jpg"></a>
是以,你需要加一個變量,然後按照一段時間變化一次,時間控制仍然用一個定時器來搞定,畢竟麼,就是那麼容易。
今天就到這裡,本想把碰撞做了,可是時間太晚,下次再見,晚安
本文轉自nowpaper 51CTO部落格,原文連結:http://blog.51cto.com/nowpaper/712593