亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#開發(fā)WPF/Silverlight動(dòng)畫及游戲系列教程(Game Tutorial):(三十九)向Silverlight移植①

2019-11-17 04:08:04
字體:
供稿:網(wǎng)友
一、主要改進(jìn):

1)Silverlight3.0上的右鍵實(shí)現(xiàn):

//注冊(cè)右鍵事件

HtmlPage.Document.AttachEvent("oncontextmenu", Game_MouseRightButtonDown);

//鼠標(biāo)右鍵事件

PRivate void Game_MouseRightButtonDown(object sender, HtmlEventArgs e) {

        e.PreventDefault(); //取消右鍵彈出菜單

……邏輯部分

}

通過上述方法還必須配合<param name="Windowless" value="true" />或System.Windows.Interop.Settings.Windowless = true才能實(shí)現(xiàn)右鍵功能。另外需要特別說明的是,此方法并非官方所提供的解決方案,而是第三方間接的實(shí)現(xiàn)方式。因此,在使用前,您必須解為Silverlight解禁右鍵將付出的代價(jià):①Windowless = true將降低程序整體性能;②無法使用輸入法;③無法被所有的瀏覽器所兼容,例如在Google Chrome中,雖然可以激發(fā)出右鍵功能,但是取消不了彈出右鍵菜單。綜上,在Silverlight3.0中,您還是得謹(jǐn)慎再謹(jǐn)慎的考慮是否使用右鍵。





2)撤消精靈及其他所有控件中的x,y,z坐標(biāo)定位用關(guān)聯(lián)屬性,取而代之的是一個(gè)名為Coordinate的關(guān)聯(lián)屬性,其完整定義如下:

/// <summary>

/// 獲取或設(shè)置控件坐標(biāo)(關(guān)聯(lián)屬性)

/// </summary>

public Point Coordinate {

    get { return (Point)GetValue(CoordinateProperty); }

    set { SetValue(CoordinateProperty, value); }

}

public static readonly DependencyProperty CoordinateProperty = DependencyProperty.Register(

    "Coordinate",

     typeof(Point),

     typeof(QXSprite),

     new PropertyMetadata(ChangeCoordinateProperty)

);

private static void ChangeCoordinateProperty(DependencyObject d, DependencyPropertyChangedEventArgs e) {

     QXSprite obj = (QXSprite)d;

     if (obj.Visibility == Visibility.Visible) {

         Point p = (Point)e.NewValue;

         obj.SetValue(Canvas.LeftProperty, p.X - obj.CenterX);

         obj.SetValue(Canvas.TopProperty, p.Y - obj.CenterY);

         obj.SetValue(Canvas.ZIndexProperty, Convert.ToInt32(p.Y));

      }

}

Coordinate的類型為Point,因此,我將原先精靈移動(dòng)用的DoubleAnimation動(dòng)畫類型替換成了PointAnimation;這樣,不論是在代碼結(jié)構(gòu)還是性能上均得到很大的優(yōu)化。更改控件坐標(biāo)時(shí),只需修改它的Coordinate = new Point(x,y)即可,系統(tǒng)會(huì)判斷該關(guān)聯(lián)屬性的值是否發(fā)生改變而激發(fā)ChangeCoordinateProperty方法,從而更新該控件最終在畫面中的LeftProperty、TopProperty和ZIndexProperty。沒錯(cuò),關(guān)聯(lián)屬性就是這么強(qiáng)大。

3)A*移動(dòng)的優(yōu)化。我已留下接口,根據(jù)不同的參數(shù)設(shè)置,可以啟動(dòng)不同效率、不同路徑長短、不同精確度的A*尋路,這里我給大家推薦兩種現(xiàn)成的方案,第一種—程序默認(rèn)A*尋路方案,此方案找到的路徑最精確,但性能消耗最高;另一種方案可以實(shí)現(xiàn)最高效的尋路,但得到的路徑并非最短:

PathFinderFast pathFinderFast = new PathFinderFast(varyObstruction) {

    HeavyDiagonals = false,

    HeuristicEstimate = 100,

};

我在Silverlight引擎中封裝的A*尋路DLL,是根據(jù)教程第七節(jié)的老外A*改編而成。因此,您完全可以將之作為一個(gè)調(diào)試器,調(diào)試不同的搭配方案,然后將參數(shù)賦予pathFinderFast里:



例如上圖,我通過模擬測試,發(fā)現(xiàn)最終找到路徑所消耗的時(shí)間為0.0071秒,假如我已對(duì)此設(shè)置所產(chǎn)生的路徑長度與性能感到滿意,那么接下來要做的就是將此方案的配置記錄下來: Diagonals = true ; Heavy Diagonals = true ; Henuristic = 5 ; Formula = Max(DX,DY) ; Use Tie Breaker = false ; Search Limit = 40000 ; 尋路對(duì)象使用的是FastPathFinder。

OK,最后來在Silverlight引擎中,我就可以這樣來啟動(dòng)A*尋路:

PathFinderFast pathFinderFast = new PathFinderFast(varyObstruction) {

    Diagonals = true,

    HeavyDiagonals = true,

    HeuristicEstimate = 5,

    Formula = HeuristicFormula.MaxDXDY,

    TieBreaker = false,

    SearchLimit = 40000,

};

嘿嘿,其實(shí)使用A*是可以如此簡單的,不是嗎?

二、主要優(yōu)化:

1)  地圖切片實(shí)現(xiàn)了最優(yōu)化加載方法。即不需要額外做多余判斷,也無需每次對(duì)切片容器進(jìn)行Clear。只需按從0到8的順序?qū)@9個(gè)切片重新賦值Source即可,性能真的很優(yōu)哦:

private void ChangeMapSection() {

……

        countSection = 0;

        for (int x = startSectionX; x <= endSectionX; x++) {

           for (int y = startSectionY; y <= endSectionY; y++) {

              mapSection[countSection].Source =

Super.GetImage(string.Format("/Image/Map/{0}/Surface/{1}_{2}.jpg", mapCode, x, y));

              Canvas.SetLeft(mapSection[countSection], x * mapSectionWidth);

              Canvas.SetTop(mapSection[countSection], y * mapSectionHeight);

              countSection++;

        }

……

}

2)改進(jìn)了 “托盤式”主位地圖移動(dòng)模式。首先我想向一些朋友道歉,一時(shí)找不到是哪篇文章后面評(píng)論中有提到對(duì)一個(gè)Canvas進(jìn)行移動(dòng)而不是遍歷所有精靈,這樣可以提升邏輯方面的性能;我當(dāng)時(shí)有測試過,為什么一直堅(jiān)持不行,因?yàn)槲覜]轉(zhuǎn)過彎,主角和其他所有對(duì)象是完全可以放在一個(gè)Canvas里的,這也意味著它們的ZIndex順序照樣可以很好的處理,同時(shí)實(shí)現(xiàn)“托盤式”地圖移動(dòng)模式。最終在QQ群里“內(nèi)Cool超人”的感化下,我才得以覺醒。這樣,雖然畫面性并無提升,但是,配合上Coordinate坐標(biāo)關(guān)聯(lián)屬性的回調(diào)方法使用,可以去掉循環(huán)遍歷地圖上所有對(duì)象位置,在邏輯上大大的提升了性能。

3)隱藏遠(yuǎn)離畫面窗口的精靈對(duì)象。這是基于Web游戲所必須做的處理,它將大大減少不必要元素的呈現(xiàn)及邏輯運(yùn)算:

……

//隱藏及顯示區(qū)域范圍內(nèi)精靈

      if ((Math.Abs(sprite.Coordinate.X - Leader.Coordinate.X) > this.ActualWidth / 2) || (Math.Abs(sprite.Coordinate.Y - Leader.Coordinate.Y) > this.ActualHeight / 2)) {

           sprite.Visibility = Visibility.Collapsed;

           sprite.Timer.Stop();

      }else {

             if (!sprite.Timer.IsEnabled) {

                  sprite.Visibility = Visibility.Visible;

                  sprite.Timer.Start();

             }

      ……

}

……

在間隔0.5秒的輔助計(jì)時(shí)器事件中進(jìn)行類似如上判斷,當(dāng)某個(gè)精靈超出了主角可視范圍,即在我們屏幕窗口所能看到的區(qū)域以外,則將之隱藏掉,并停止它的切幀動(dòng)作,否則反之。這對(duì)提升游戲整體性能起著決定性關(guān)鍵作用。如果是網(wǎng)絡(luò)版,我們則可以拓展出2級(jí)范圍,其中1級(jí)范圍即為上述范圍;而2級(jí)范圍則為:當(dāng)某個(gè)已被隱藏的精靈遠(yuǎn)離主角到了更遙遠(yuǎn)的地方,則我們將之移除掉,從而減少邏輯且實(shí)現(xiàn)不必要資源的及時(shí)釋放與回收。



4)改進(jìn)了時(shí)時(shí)障礙物系統(tǒng)。整個(gè)游戲有兩個(gè)障礙物數(shù)組(可以記錄0-255,0代表障礙物,除0外的所有其他字節(jié)均代表無障礙。這里我使用1標(biāo)識(shí)無任何對(duì)象可通行區(qū)域,10-19用來標(biāo)識(shí)傳送點(diǎn)。如果以后需要加入新的地形效果拓展,那么同樣可以使用類似設(shè)定:例如20用來標(biāo)識(shí)可通行水域,21標(biāo)識(shí)可通行沙漠等等;這樣,現(xiàn)當(dāng)主角在這些區(qū)域中移動(dòng)時(shí),會(huì)發(fā)出相應(yīng)的腳步聲,使游戲效果更為逼真)。動(dòng)態(tài)障礙物系統(tǒng)實(shí)現(xiàn)代碼如下,首先定義一個(gè)固定數(shù)組和一個(gè)動(dòng)態(tài)數(shù)組:

byte[,] fixedObstruction, varyObstruction;

fixedObstruction是地圖加載后永遠(yuǎn)不變的地圖信息描述載體,它記錄了地圖中肯定無法通過的地形及傳送點(diǎn)的位置等等。varyObstruction是時(shí)時(shí)的動(dòng)態(tài)地圖信息,會(huì)根據(jù)所有精靈時(shí)時(shí)的位置來填充障礙物。

在每次A*移動(dòng)時(shí),我們通過先去掉精靈腳底的障礙物區(qū)域(HoldWidth和HoldHeight),然后啟動(dòng)A*尋路,找到路徑后再補(bǔ)回精靈的腳底障礙物區(qū)域:

……

SetSpriteObstruction(sprite, 1);

AStarMove(sprite, GetSpriteEdge(enemy));

sprite.UseAStarMove = true;

SetSpriteObstruction(sprite, 0);

……

其中SetSpriteObstruction方法為:

/// <summary>

/// 設(shè)置精靈占位障礙物對(duì)應(yīng)值

/// </summary>

private void SetSpriteObstruction(QXSprite sprite, byte sign) {

        int x = (int)(sprite.Coordinate.X / gridSizeX);

        int y = (int)(sprite.Coordinate.Y / gridSizeY);

        for (int m = x - sprite.HoldWidth; m <= x + sprite.HoldWidth; m++) {

            for (int n = y - sprite.HoldHeight; n <= y + sprite.HoldHeight; n++) {

                if (fixedObstruction[m, n] != 0) {

                    varyObstruction[m, n] = sign;

                }

            }

        }

}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲美女性生活视频| 无码人妻一区二区三区在线| 日韩精品免费一区二区三区竹菊| www.av99| 日韩亚洲精品视频| 欧美xxxxxbb| 欧美精品一区在线发布| 久久综合色播| 国产三级做爰在线观看| 8mav在线| 最新中文字幕亚洲| 2022国产精品| jizzjizz视频| 国产精品人人做人人爽| 在线亚洲美日韩| 黄色av网址在线观看| 精品第一国产综合精品aⅴ| 亚洲a成人v| 尤物视频在线看| 欧美精品1区| 亚洲精品国产精品乱码不99按摩| 黄色在线网站| 日本a级片免费观看| 18视频在线观看网站| 亚洲综合激情六月婷婷在线观看| 国产午夜麻豆影院在线观看| 欧美第一黄网免费网站| 亚洲久色影视| 亚洲国产专区校园欧美| 亚洲一区二区精品视频| 久久久不卡网国产精品一区| 久久婷婷国产综合尤物精品| 九九九九九九精品| 亚洲熟女乱综合一区二区三区| 日本精品一级二级| 乳奴隷乳フ辱julia在线观看| 亚洲国产91精品在线观看| 国产九九精品| 欧美韩日一区二区| 日韩精品欧美一区二区三区| 亚洲国产精品免费| 这里只有精品999| 曰本人一级毛片免费完整视频| 日本亚洲欧洲色| 中文字幕在线视频网站| 欧美极度另类性三渗透| 一区二区欧美国产| 久草青青在线观看| 一个人看的视频www在线观看免费| 久久五月天小说| 区一区二视频| 中文字幕第一页在线视频| 人妻无码视频一区二区三区| 好吊视频一区二区三区四区| 韩日视频在线| 人禽交欧美网站| 欧美sm极限捆绑bd| 欧美精品videos另类| 91偷拍与自偷拍精品| 日韩乱码在线视频| 久久夜色精品国产| 国产精品日韩欧美一区二区三区| 欧美黄色精品| 手机在线免费观看毛片| 欧美18 19xxx| 青青操在线观看视频| 蜜桃av免费在线观看| 中文字幕伦理免费在线视频| 99精品欧美一区二区三区综合在线| 国产香蕉久久| 国产精品乱码妇女bbbb| 国产精品久久久久久在线观看| 亚洲精品在线视频| 日韩亚洲欧美中文三级| www黄com| 黄色在线小视频| 久久久久九九九| 99视频国产精品免费观看| 午夜欧美巨大性欧美巨大| 在线免费观看色| 天天操天天干天天操天天干| 亚洲精品国产久| 久久精品男人天堂av| 天堂va蜜桃一区二区三区漫画版| 国产欧美久久久久久久久| 久久人人爽人人爽人人片亚洲| 少妇特黄a一区二区三区| 日本欧美一区二区三区乱码| 伪装者免费全集在线观看| 国产一级黄色av| 风间由美一区二区三区| 国产综合视频在线观看| 黄视频网站在线| 俄罗斯一级**毛片在线播放| 9999热视频在线观看| 自拍偷拍亚洲一区| 免费观看一区二区三区| 亚洲 欧美 激情 小说 另类| 7m精品福利视频导航| 18禁裸乳无遮挡啪啪无码免费| 欧美特黄一区二区三区| 精品日韩欧美在线| 天天影视综合| 日本成人在线免费观看| 一区二区三区四区五区视频在线观看| 亚洲色图50p| 天堂中文在线官网| 亚洲第一区中文99精品| aaaaa级少妇高潮大片免费看| 色屁屁www国产馆在线观看| 福利h视频在线| 人妻av一区二区| 国产精品午夜国产小视频| 韩国av中文字幕| 国产福利第一视频| 免费电影网站在线观看| 久久久国产高清| 免费在线观看一区二区| 国产黄a三级三级三级| 中国大陆高清aⅴ毛片| 日韩成人免费在线观看| 日韩精品无码一区二区三区免费| 欧美日韩午夜影院| 亚洲春色综合另类校园电影| 久久久亚洲国产| 亚洲天堂五月天| 在线电影一区二区三区| 午夜视频在线网站| 国产亚洲第一区| 椎名由奈av一区二区三区| av在线不卡免费看| 91视频最新入口| 亚洲色图综合久久| 日本黄色网址大全| www.四虎影视.com| 国产免费高清视频| 国产精品久久久久久久牛牛| 五月综合激情婷婷六月色窝| 九七影院97影院理论片久久| 久久免费视频播放| 久久99国产精一区二区三区| www亚洲欧美| 久久精品免费播放| www.成人网.com| 黄色在线播放| 亚洲第一会所001| 亚洲一区二区三区四区电影| 国产精品自产拍在线观看| 亚洲free嫩bbb| 成年女人免费又黄又爽视频| 五月天婷婷在线播放| 欧美黄页免费| 国产成人精品三级高清久久91| 风间由美一区| 一本大道av伊人久久综合| 欧美成人激情在线| 亚洲国产91色在线| 久久艹免费视频| 这里只有精品视频在线观看| 日本一区二区久久| 国产喷水福利在线视频| 久久精品国产亚洲av麻豆色欲| 高潮毛片又色又爽免费| 伊人国产在线| 麻豆国产在线视频| 成人婷婷网色偷偷亚洲男人的天堂| 中文字幕人妻一区二区三区| 日本一区二区免费在线| 夜夜嗨一区二区三区| 特级西西444www大精品视频免费看| 91一区二区在线观看| 国产亚洲综合在线| 最近日本中文字幕| 香蕉久久夜色精品国产更新时间| 国产精品久久久久久免费免熟| 欧美综合激情| 久久99国产视频| 国产精品久久久久999| 亚洲欧美久久久| 亚洲精品中文在线影院| 亚洲激情五月| 草草视频在线| 高清欧美性猛交| 国精品产品一区| 国产精品一区二区三区成人| 蜜桃av噜噜一区| 91国内在线视频| 在线观看污视频| 污视频网站免费观看| 国语对白做受xxxxx在线中国| 人妻精品久久久久中文| av无码av天天av天天爽| 久久久久久免费观看| 久久久久久久九九九九| 深爱激情五月婷婷| 日韩高清专区| 国产尤物91| 国产一级黄色| 三日本三级少妇三级99| 亚洲猫色日本管| 国产成人精品亚洲日本在线桃色| 人妻少妇精品无码专区久久| 裸体素人女欧美日韩| 91福利小视频| 宅男在线国产精品| 51调教丨国产调教视频| 久久精品视频99| 日本一级在线观看| 亚洲自拍另类欧美丝袜| 日韩一级片在线免费观看| 97香蕉超级碰碰久久免费软件| 自拍偷拍免费精品| 日韩欧美一区二区三区在线视频| 欧美 日韩 亚洲 一区| 7878成人国产在线观看| 日韩精品一区二区三| 成人在线二区| 性猛交╳xxx乱大交| 欧美精品中文字幕亚洲专区| 日本黄色片视频| 亚欧无线一线二线三线区别| 最新天堂资源在线资源| 黄色片在线免费| 久色视频在线播放| 欧美色涩在线第一页| 在线观看视频免费一区二区三区| 一区二区三区欧美亚洲| 伊色综合久久之综合久久| 国产精品视频久| 日本一区二区欧美| 亚洲精品黑牛一区二区三区| 91精品国产一区二区三区香蕉| 波多野结衣高清在线| 啪啪免费视频一区| 欧美成人免费全部| 国产亚洲欧美日韩一区二区| 亚洲一区三区在线观看| 久久精品九色| 日本精品人妻无码77777| 日韩高清国产一区在线| 国产ts在线播放| 中文字幕av高清在线观看| 99热这里只有精品5| 欧美日韩网站| 伊人成人在线视频| 无码人妻丰满熟妇区五十路百度| 东京热加勒比无码少妇| 国产精品作爱| 日韩av网站导航| 蜜桃av中文字幕| 国产精品第六页| 狠狠色丁香婷婷综合久久片| 亚洲国产综合av| 亚洲欧洲美洲一区二区三区| 91av视频| 欧美国产日韩一区二区在线观看| 成人国产精品入口免费视频| 国偷自产av一区二区三区| 欧美无遮挡国产欧美另类| 蜜芽tv福利在线视频| 亚洲色图网址| 国产极品美女在线| 最好看的中文字幕| 菠萝蜜视频在线观看www入口| 三上悠亚一区二区三区| 亚洲精品传媒| 国产精品性做久久久久久| 无码播放一区二区三区| 欧美一区二区中文字幕| 国产精品无码永久免费888| 日韩精选视频| 欧美粗大gay| 少妇精品久久久一区二区| 久久黄色精品视频| 77777少妇光屁股久久一区| 黑人精品无码一区二区三区AV| 今天免费高清在线观看国语| 色哟哟国产精品色哟哟| 久久三级福利| 四虎影在永久在线观看| 国产情侣一区二区| 国产精品乱码一区二区三区| 亚洲av成人精品一区二区三区在线播放| 久久精品人妻一区二区三区| www.好吊操| 日韩有码一区二区三区| 久久亚洲精品国产亚洲老地址| 久久精品超碰| 日本中文字幕一区二区| 黄色成人精品网站| 国语对白在线刺激| 日本网站免费观看| 丰满岳乱妇一区二区三区| 91精品国产欧美一区二区18| 国内久久久精品| 欧美剧情电影在线观看完整版免费励志电影| 男女爱爱视频免费| 国产后进白嫩翘臀在线观看视频| 污污网站在线| 午夜精品一区二区三区在线观看| a视频在线观看| 亚洲国产成人一区| 欧美video巨大粗暴18| 一区二区黄色| 国产精品又粗又长| 香蕉视频一区| 先锋影音中文字幕| 欧美色窝79yyyycom| 99视频在线精品| 欧美成人手机视频| 成年人网站在线免费观看| 亚洲色在线视频| 成人小视频在线播放| 亚洲丝袜啪啪| 欧美整片在线观看| 韩国欧美国产一区| www.av亚洲| 在线成年人视频| 国产黄在线看| 2021最新国产精品一区| 黄色91在线观看| 在线一区二区日韩| 国产一区二区三区日韩| 蜜桃精品视频在线观看| 国产精品无码午夜福利| av色综合久久天堂av综合| 中文字幕一区二区三区有限公司| 亚洲mmav|