版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人債務(wù)轉(zhuǎn)讓及債務(wù)清理執(zhí)行細(xì)則協(xié)議4篇
- 二零二五年度安全生產(chǎn)標(biāo)準(zhǔn)化建設(shè)承包合同范本3篇
- 二零二五年度吊車操作培訓(xùn)與安全規(guī)范制定合同3篇
- 二零二五年度建筑材料質(zhì)量糾紛處理合同范本6篇
- 二零二五年度城市公共廁所智能化改造合同范本2篇
- 臨時活動用場地租賃合同書2024版樣本版B版
- 二零二五年度商業(yè)地產(chǎn)租賃轉(zhuǎn)供電管理合同3篇
- 2025年度教育機(jī)構(gòu)學(xué)生信息保密與隱私保護(hù)合同范本4篇
- 泰州二手房買賣合同2025版
- 二零二五年度高空作業(yè)樓頂廣告牌拆除與安全培訓(xùn)協(xié)議4篇
- 《醫(yī)院財務(wù)分析報告》課件
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級上冊 期末綜合卷(含答案)
- 2024中國汽車后市場年度發(fā)展報告
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 《人工智能基礎(chǔ)》全套英語教學(xué)課件(共7章)
- GB/T 35613-2024綠色產(chǎn)品評價紙和紙制品
- 物品賠償單范本
- 《水和廢水監(jiān)測》課件
- 滬教版六年級數(shù)學(xué)下冊課件【全冊】
評論
0/150
提交評論