silverlight動畫設(shè)計-飛船打子彈動畫設(shè)計ppt課件_第1頁
silverlight動畫設(shè)計-飛船打子彈動畫設(shè)計ppt課件_第2頁
silverlight動畫設(shè)計-飛船打子彈動畫設(shè)計ppt課件_第3頁
silverlight動畫設(shè)計-飛船打子彈動畫設(shè)計ppt課件_第4頁
silverlight動畫設(shè)計-飛船打子彈動畫設(shè)計ppt課件_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、面向?qū)ο蟮膭赢嬙O(shè)計基礎(chǔ)練習(xí):得到位置n得到目標(biāo)位置nship1.GetValue(Canvas.LeftProperty)nship1.GetValue(Canvas.TopProperty)n得到的是目標(biāo)左上角距離左邊和定邊的距離基礎(chǔ)練習(xí):設(shè)置位置n ship1.SetValue(Canvas.LeftProperty, shipLocation.X);nship1.SetValue(Canvas.TopProperty, shipLocation.Y);n把目標(biāo)左上角設(shè)置到指定位置幀呈現(xiàn)事件n private void myRender(object sender, EventArgs e

2、)nnnCompositionTarget.Rendering += myRender;n一個動畫有很多幀組成,在每幀中都可以執(zhí)行判斷或操作新建項目MyGamen新建文件夾UserControlsn把矢量圖轉(zhuǎn)換成的xaml文件拷貝入文件夾UserControlsn把xaml文件修改正確的namespace,再包含到項目中這兩步不能反了,因為只要包含到項目中就會生成cs文件)n如下格式在頁面放入飛船和按鈕n n n n 定義公用變量n private Point shipLocation = new Point(0, 0);n private Point shipSpeed = new Poin

3、t(4,4);n表示飛船的位置和速度n因為速度有x和y坐標(biāo)的速度,所以使用點對象表示比較方便,其含義并不是一個點。n位置坐標(biāo)是左上角的點位置添加一個鍵盤控制事件n private void myKeyDown(object sender, KeyEventArgs e)n n switch (e.Key)n n case Key.Left:n break;n case Key.Right:n break;n case Key.Up:n break;n case Key.Down: n break;n case Key.Space:n break;n default:n break;n 完善代碼

4、n switch (e.Key)n n case Key.Left:n shipLocation.X -= shipSpeed.X;/減小距離左邊界的距離n break;n case Key.Right:n shipLocation.X += shipSpeed.X;/n break;n case Key.Up:n shipLocation.Y -= shipSpeed.Y;/n break;n case Key.Down:n shipLocation.Y += shipSpeed.Y;/增大距離上邊界距離n break;n case Key.Space:n break;n default:n

5、 break;n 在按鈕單擊代碼n button1.Visibility = Visibility.Collapsed;n shipLocation.X = (double)ship1.GetValue(Canvas.LeftProperty);n shipLocation.Y = (double)ship1.GetValue(Canvas.TopProperty);n CompositionTarget.Rendering += myRender;n this.KeyDown += new KeyEventHandler(myKeyDown);n紅色為自定義的鍵盤按下事件加上幀呈現(xiàn)事件n p

6、rivate void myRender(object sender, EventArgs e)n n ship1.SetValue(Canvas.LeftProperty, shipLocation.X);n ship1.SetValue(Canvas.TopProperty, shipLocation.Y);n 程序測試,通過按鍵控制飛船方向n private Point shipLocation = new Point(0, 0);n private Point shipSpeed = new Point(4,4);n private void myKeyDown(object send

7、er, KeyEventArgs e)n n switch (e.Key)n n case Key.Left:n shipLocation.X -= shipSpeed.X;n break;n case Key.Right:n shipLocation.X += shipSpeed.X;n break;n case Key.Up:n shipLocation.Y -= shipSpeed.Y;n break;n case Key.Down:n shipLocation.Y += shipSpeed.Y;n break;n case Key.Space:n default:n break;n n

8、 n private void button1_Click(object sender, RoutedEventArgs e)n n button1.Visibility = Visibility.Collapsed;n shipLocation.X = (double)ship1.GetValue(Canvas.LeftProperty);n shipLocation.Y = (double)ship1.GetValue(Canvas.TopProperty);n CompositionTarget.Rendering += myRender;n this.KeyDown += new Ke

9、yEventHandler(myKeyDown);n 產(chǎn)生一個向上飛的子彈n引用using LuoYongGame.UserControls;n定義公用變量n Bullet bullet;n private Point bulletLocation = new Point(0, 0);n private Point bulletSpeed = new Point(0, 20);n n 這里子彈要動態(tài)產(chǎn)生,要被多個事件使用在按下空白鍵事件中加代碼n case Key.Space:n bullet = new Bullet();n cnv.Children.Add(bullet);n bullet

10、Location.X = (double)ship1.GetValue(Canvas.LeftProperty);n bulletLocation.Y = (double)ship1.GetValue(Canvas.TopProperty);n break;n把子彈坐標(biāo)定到飛船所在位置寫幀呈現(xiàn)事件n private void myRender(object sender, EventArgs e)n n ship1.SetValue(Canvas.LeftProperty, shipLocation.X);n ship1.SetValue(Canvas.TopProperty, shipLoc

11、ation.Y);n n bullet.SetValue(Canvas.LeftProperty, bulletLocation.X);n bullet.SetValue(Canvas.TopProperty, bulletLocation.Y);n bulletLocation.Y -= bulletSpeed.Y;n完善子彈控制,只能有一發(fā)n private void myRender(object sender, EventArgs e)n n ship1.SetValue(Canvas.LeftProperty, shipLocation.X);n ship1.SetValue(Can

12、vas.TopProperty, shipLocation.Y);n n bullet.SetValue(Canvas.LeftProperty, bulletLocation.X);n bullet.SetValue(Canvas.TopProperty, bulletLocation.Y);n bulletLocation.Y -= bulletSpeed.Y;n if (bulletLocation.Y 0)n n bullet = null;n n n case Key.Space:n if (bullet = null)n n bullet = new Bullet();n cnv.

13、Children.Add(bullet);n bulletLocation.X = (double)ship1.GetValue(Canvas.LeftProperty);n bulletLocation.Y = (double)ship1.GetValue(Canvas.TopProperty);n n break;nn n n n n n n n n n n Canvas x:Name=ALIEN_01_01 Width=195 Height=129 Canvas.Left=修改MainPage.xaml nn n n n n n n n nn注意要編譯,注意工具欄,xmlns:my=“c

14、lr-namespace:MyGame.UserControls可以從工具欄拖出控件了。界面類中的變量n /暫存綠色外星人在畫布中的位置n private Point greenAlien1Location = new Point(0, 0);n /暫存綠色外星人在X軸上的移動速度n private Point greenAlien1Speed = new Point(250, 0);n /定義動畫在畫布中的左邊界n private Point upperLeftCorner = new Point(0, 0);n /定義動畫在畫布中的右邊界n private Point bottomRigh

15、tCorner = new Point(0, 0);n /暫存外星人的行高n private double rowHeight = 60;n /暫存完成呈現(xiàn)幀的時間n private DateTime lastTick;n private Point greenAlienLocation = new Point(0, 0);n GreenAlien green;n private double speed = 1;n private void RenderFrame(object sender, EventArgs e)n n if (green != null)n n greenAlienL

16、ocation.X += speed;n if (greenAlienLocation.X = (cav.ActualWidth - green.ActualWidth * 0.5)n n speed *= -1;n n greenAlienLocation.Y += 0.2;n green.SetValue(Canvas.LeftProperty, greenAlienLocation.X);n green.SetValue(Canvas.TopProperty, greenAlienLocation.Y); n n n private void btnStartGame_Click(obj

17、ect sender, RoutedEventArgs e)n n button3.Visibility = Visibility.Collapsed;n shipLocation.X = (double)ship1.GetValue(Canvas.LeftProperty);n shipLocation.Y = (double)ship1.GetValue(Canvas.TopProperty);n green = new GreenAlien();n cav.Children.Add(green);n CompositionTarget.Rendering += myRender;n Ke

18、yDown += new KeyEventHandler(myKeyDown); n nCompositionTarget.Rendering是響應(yīng)靜態(tài)事件,觸發(fā)該事件是為了為每幀獲取內(nèi)容。這是一種非常方便的方法,用它構(gòu)建基于幀的動畫的基本技術(shù)很容易,只需要簡單地為靜態(tài)的CompositionTarget.Rendering事件關(guān)聯(lián)事件處理程序。一旦關(guān)聯(lián)了事件處理程序,Silverlight就會開始不斷地調(diào)用這個事件處理程序(只要渲染代碼執(zhí)行得足夠快,每秒將會調(diào)用60次) Width 和 ActualWidth差別Width:是我們期望控件應(yīng)有的寬度,是可讀寫的,可在xaml文件中設(shè)置,也可在法度中設(shè)置。若是沒有設(shè)置,Width的值為NaNNot a Number)ActualWidth:是控件Render的實際寬度,控件Render之前,它的值為0,。該屬性是只讀的。n運行后看到一個精靈的運動n在Silverlight 中,我們必須對一些重要問題進(jìn)行精確地控制。其中最重要的是時間管理。默認(rèn)情況下,Silverlight 每秒輸出60幀圖像。這意味著代碼必須盡可能快地執(zhí)行每一個幀的輸出以避免漏掉一些幀的顯示任務(wù)以便生成一個平滑流暢的動畫效果。對于創(chuàng)建其它使用矢量圖形的程序來說,其實現(xiàn)步驟和我們前面的例子的步驟幾乎完全相同。你可以使用基于矢量圖形的動畫精靈來替換前面的光柵圖像。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論