国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

Scratch第72講:精確制導

極客小將2020-11-19-
想了解編程技巧,就請點擊上面藍字:跟我學Scratch編程,關注CC哥 本來想在飛機大戰的游戲里加入導彈,后來想了一下,CC哥的目的主要還是做教學,所以為了讓大家更好的學習和掌握知識,CC哥就把這個精確制導做成了獨立的游戲,讓大家更容易學習。

想了解編程技巧,就請點擊上面藍字:跟我學Scratch編程,關注CC哥



本來想在飛機大戰的游戲里加入導彈,后來想了一下,CC哥的目的主要還是做教學,所以為了讓大家更好的學習和掌握知識,CC哥就把這個精確制導做成了獨立的游戲,讓大家更容易學習。

導彈的特點

導彈嘛,CC哥總結的特點就是:

1:自動選擇目標

2:自動追蹤目標,而且運動軌跡是弧形的。

https://cdn.china-scratch.com/timg/191125/1359413937-0.gif

在你的游戲里加入導彈是不是給游戲增色很多https://cdn.china-scratch.com/Public/Home/images/grey.gif,有思考怎么實現的嗎?讓我們一起來看看。

游戲關鍵點

導彈也好,敵機也好,如果都是本地的角色之間發生互動關系,都不會復雜,但是這個游戲的關鍵是兩個角色克隆體之間的互動,因為發射出去的導彈是導彈角色的克隆體,敵機是敵機角色的克隆體,那么克隆體之間怎么進行這種實時的互動呢?

程序介紹

戰機沒啥好介紹的,控制部分跟飛機大戰都一樣,用上下左右鍵進行移動。關鍵是讓大家看看CC哥找的造型是不是很酷https://cdn.china-scratch.com/Public/Home/images/grey.gif

upload/article/images/2020-11-19/eae22bbf4e15b7873dc7652abf5f9ffe.jpg

敵機的造型也挺酷的https://cdn.china-scratch.com/Public/Home/images/grey.gif

upload/article/images/2020-11-19/89135d0c2faef29f8f676b91c98be657.jpg

導彈如何選擇目標

如果想讓導彈選擇目標,那么就必須要有一個可選擇的記錄庫,和選擇的標準,所以,當導彈發射的一瞬間,我們需要知道天上有多少敵機,以及他們之間怎么區別的,只有具備這些條件,你才有選擇的基礎。所以為了選擇目標,CC哥創建了一個列表,這個列表里就包含了所有在天空中出現的敵機。只要在這個列表里進行選擇就好了。

那這個列表里存的什么數據呢?存的就是一個一個敵機的編號。所以我們在克隆敵機的時候,需要為每一個敵機進行編號,否則就無法對敵機進行一一的識別,更談不上選擇了。

upload/article/images/2020-11-19/79f171f09492e4844c4b765ba3937d9a.jpg

這是敵機開始的一段程序,CC哥讓敵機在舞臺的高處隨機的出現,但是在出現的同時,用“敵機編號”這個私有變量對敵機進行編號。同時把這個敵機編號加入到{敵機隊列}這個列表里。

但是如果敵機消失在舞臺邊緣,或者被擊毀和撞毀,那么它就不再是目標了,就需要從目標的庫里刪除掉,也就是從{敵機隊列}里刪除掉。

upload/article/images/2020-11-19/4d2e6d6545304fb7495de2b987741826.jpg

這段代碼不難理解,就是敵機在飛行過程中,如果被導彈擊中,就播放爆炸效果。然后不論是那種情況消失,都需要從敵機隊列里刪除這個編號。刪除完之后,如果隊列里還有敵機,那么就選擇隊列的第一項,也是隊列里出現最早的飛機。如果刪除完之后隊列里沒有項目了,就說明飛機已經被打光了,所以要把目標敵機這個變量設為0。

CC哥用“目標敵機”這個變量來代表此時此刻被導彈鎖定的敵機!

如果目標敵機為0了,也就是沒有敵機了,那么下面一刻新克隆出來的敵機就自動成為當前的目標敵機。

upload/article/images/2020-11-19/c68e9408f6064e046582cfdce679b9c7.jpg

當然,既然知道了目標敵機是誰,那肯定無時不刻都要盯緊它,要實時鎖定它的物理方位才能進行攻擊!

upload/article/images/2020-11-19/80170c451ebafaeb4c297dbbccb1e77f.jpg

導彈飛行過程中跟蹤敵機

敵機的坐標鎖定了,但是導彈怎么跟蹤它呢?這個x和y坐標可是隨時在發生變化,而不是固定在那里讓我打。那你的運動軌跡如何跟蹤一個實時變動的目標呢?

一種方法:根據雙方的X和Y坐標來算角度,這就是幾何了,大家可以畫畫圖試一下怎么計算,CC哥認為這也是一種不錯的方法呢。

還有一種方法就是用現有的命令,

upload/article/images/2020-11-19/b5ddc28f8757714d096208db9c4bdd36.jpg

但是問題是這只能面向一個角色,不能面向一個克隆體呀,怎么辦?老辦法,引入影子目標角色,也就是用另一個隱形的角色,實時的移動到目標的X,Y坐標上,充當靶子。只要導彈面向這個角色,就相當于面向了目標,只要實時去用面向這個命令來校準,那導彈就始終是往目標的地方追。

upload/article/images/2020-11-19/1d7438ca8b6e71d70156e2193692bea5.jpg

這就是這個影子角色,為什么不隨便用個圓圈或小點代替,是因為CC哥要做碰撞檢測的,所以只有影子目標的造型和真實目標的造型一模一樣,才能完美的檢測是否真正擊中目標。另外CC哥涂這一下子是為了調試程序用的,否則都長一樣,CC哥也區分不出哪個是真身哪個是影子呀。https://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gifhttps://cdn.china-scratch.com/Public/Home/images/grey.gif

upload/article/images/2020-11-19/6e15cef83a6d51086338db23bb5ebbd2.jpg

為什么不用隱藏,而用虛像99,這兩個的基本效果都是一樣的,都是讓你看不見,但是區別是隱藏了就檢測不到碰撞了,而虛到99,那雖然你看不見,但是計算機看得見,也就是碰撞檢測不受影響。對于這段程序就是目標角色會始終盯住目標戰機的位置,任勞任怨的充當導彈的靶子。https://cdn.china-scratch.com/Public/Home/images/grey.gif

飛機上不同的位置開始著火,就能充分表現這一點,后來加上去發現效果還不錯。https://cdn.china-scratch.com/Public/Home/images/grey.gif

upload/article/images/2020-11-19/57a273feff920c5147d0256bddc01d8f.jpg

如果想免費獲得CC哥的講座中的程序代碼以及游戲素材,可以通過掃描二維碼關注《跟我學Scratch編程》,然后點擊獲取代碼即可。

游戲合理性

CC哥做程序和游戲都有一個習慣,要思考你設計的東西是不是合理,在目標選擇這一塊,CC哥就想了,按照上面的邏輯,肯定是選擇最早出現的敵機,因為離得的會最近,最有威脅。但是如果用導彈去作為攻擊武器,那么就不那么簡單了,因為導彈有導彈的特性,首先導彈都是往前發射,發射出去之后再變化軌跡進行敵機追蹤,第二,導彈是飛的很快的,并不會臨時轉彎,轉彎時需要較大的轉彎半徑。所以不是所有的敵機都適合發射導彈去攻擊。比如已經靠近你左右側的敵機就很難擊中,因為轉彎半徑就已經大過與敵機的距離了。或者已經飛到你后面的敵機就更難擊中一些。當然,放著前面的敵機不去打,非要辛苦的繞到后面去打,肯定不合理。

所以CC哥為了合理性,就在目標選擇上增加了篩選條件,也就是只有在戰機前面并和戰機保持一定距離以上的敵機才會成為攻擊目標。

upload/article/images/2020-11-19/76c0082613b2eedc6a9bc33013f6714d.jpg

處于這份考量,CC哥在目標跟蹤上加了這段代碼,如果在發射時檢測到敵機離戰機太近和位于戰機的后方,那么目標會忽略次敵機,自動調整到下一個可以攻擊的敵機。

導彈的運動軌跡

導彈的運動軌跡也是個游戲設計點:

upload/article/images/2020-11-19/ee55452dfd67a2ee1be7b3d3f1ec0ab4.jpg

有點象火箭的導彈https://cdn.china-scratch.com/Public/Home/images/grey.gif

https://cdn.china-scratch.com/timg/191125/135944H03-22.jpg

這個就是如果鎖定了目標就發射!發射的初始方向都是正前方!

https://cdn.china-scratch.com/timg/191125/1359443M6-23.jpg

https://cdn.china-scratch.com/timg/191125/1359455G2-24.jpg

然后根據目標的位置進行方向修正,如果導彈的方向和飛機飛行的方向差別比較大時,那么每飛一步就進行5度的校準,如果方向差別已經在5度以內了,那么校準就變成每步1度。

這段代碼比較長的原因是校準的方向跟導彈和敵機所處的位置有所區別,舉個例子,如果導彈和敵機都在垂直方向的一邊,那么軌跡比較簡單,始終朝著減小的方向調整就能將兩個角度重合。但是如果一旦出現其中一個角色飛到了下部中心垂直方向的另一邊,那么兩者之間的角度差就會突然大了180度。這時候你如果還是朝著角度差減小的方向去調整,那么可能會造成導彈的突然轉向,從另一個方向去追敵機,那肯定是不合理的,這跟Scratch的坐標和方向的定義有很大關系。所以CC哥在這里做的條件判斷,就是不希望導彈會隨著角色突然跨越下部中心垂直線造成方向角度的突然變化而導致導彈突然轉向。

總結

今天學到的知識:

1:用列表來存儲克隆體的編號,從而實現對克隆體的個體管理。

2:用影子角色來輔助對具體某個克隆體的操作。

3:進一步了解位置,方向的相對性。

聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

主站蜘蛛池模板: 吕梁市| 舞阳县| 昔阳县| 桂东县| 巧家县| 乡宁县| 高州市| 大英县| 蓬安县| 游戏| 水城县| 定安县| 九龙县| 江阴市| 海南省| 肇源县| 科尔| 大渡口区| 遵化市| 迁安市| 密山市| 虎林市| 山阳县| 洛南县| 托里县| 安化县| 台江县| 武夷山市| 岱山县| 济南市| 永州市| 平乐县| 徐州市| 陇南市| 基隆市| 淳化县| 抚州市| 休宁县| 潞城市| 安福县| 日喀则市|