天天看點

Silverlight C# 遊戲開發:Flyer04讓我們一起來搖擺吧

接上回所述,咱們的飛行員已經開始往下飄落了,但是似乎少點什麼,所謂沒有危險那裡來的樂趣,是以要增加一個敵人來搞定為主角造成點難度,本篇作為無聊,隻是說了一些廢話,重複了前幾篇的代碼,隻是不過稍微做了一些修改,廢話少說,直接上圖:

<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以及一個定時器來重新整理。

代碼部分不做送出,基本上大同小異,可是和飛行員有一個非常不同的地方,那就是螺絲和螺母共享大量的資料以及處理方法,隻是圖檔不同罷了,那麼按照偉大的面向對象方法隻需要簡單繼承一下就好啦……不過看起來于此做法非常不值得,還是簡單的做吧,在構造函數中增加一個參數,用枚舉的方法來區分到底是螺絲釘還是螺絲母,為這問題也是轉悠的半天,還是看看代碼吧。

/// &lt;summary&gt;

/// 螺絲或者螺母的枚舉

/// 在ClassSolid構造的時候據此選擇螺絲或者螺母的圖檔

/// &lt;/summary&gt;

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&lt;RoutedEventArgs&gt;(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