silverlight動畫設(shè)計飛船打子彈動畫設(shè)計_第1頁
silverlight動畫設(shè)計飛船打子彈動畫設(shè)計_第2頁
silverlight動畫設(shè)計飛船打子彈動畫設(shè)計_第3頁
silverlight動畫設(shè)計飛船打子彈動畫設(shè)計_第4頁
silverlight動畫設(shè)計飛船打子彈動畫設(shè)計_第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 poi

3、nt(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:

5、n 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

6、private 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 sen

7、der, 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

8、n 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 k

9、eyeventhandler(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 bulle

10、tlocation.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, shiplo

11、cation.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(ca

12、nvas.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=“

14、clr-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 bottomri

15、ghtcorner = 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 greenalie

16、nlocation.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(o

17、bject 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

18、keydown += 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差別nwidth:是我們期望控件應(yīng)有的寬度,是可讀寫的,可在xaml文件中設(shè)置,

19、也可在法度中設(shè)置。若是沒有設(shè)置,width的值為nan(not a number)nactualwidth:是控件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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論