日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【flash】 水果忍者

發布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【flash】 水果忍者 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

界面展示


源代碼鏈接
鏈接:https://pan.baidu.com/s/1Fm4lnxKlMNYWg8JFngHeTg
提取碼:4u6p

主要內容
需要幾個類
1.刀刃類
2.水果類
3.水果殘骸類

游戲主循環

類的功能

Blade 刀刃類 進行刀刃繪制 和 水果的碰撞檢測
Fruits 水果類 里面包含了水果和炸彈
FruitsWaste 水果殘骸 水果死亡后產生的東西
GlobalInput 全局輸入類 輸入的東西會儲存在這里
Sound_module 聲音模塊 一開始的那個調整聲音大小用的
Tool 工具類 進行各種計算,或者常用的函數

主函數
除去界面的主函數

1.水果生成
2.升級檢測
3.Tick方法運行
4.刀刃 和 水果進行碰撞檢測
5.死亡處理
6.改變界面的文字
7.死亡處理

//重置數量 if (list1.length==0)furistSpawner(level)//檢測升級 levelUp()for (i=0;i<list1.length;i++) list1[i].Tick() for (i=0;i<list2_garbage.length;i++) list2_garbage[i].Tick() blade.Tick()//=======================碰撞檢測==========================//水果 和 采樣數組 for (i=0;i<list1.length;i++){ list1[i].hitCheck(blade.ExtendList)}//===================死亡處理========= clearAll() updateText()if (isLost){gotoAndPlay(12) }

刀刃類
tick函數 每幀執行函數
SampleGet 獲得采樣數組函數
onDraw 繪制函數

tick函數相當于 游戲的主函數
1.進行位置采樣
2.繪制直線
3.播放聲音

public function Tick(){//每幀執行函數SampleGet() //采樣數據 和 擴展采樣onDraw() //繪制直線this.num++ //聲音播放if (num % 25 == 0 && this.SampleList.length >2 ){num = Tool.randint(0,20)sound.play()}}

刀刃
刀刃是一個 點的稀疏的數組。
鼠標移動的時候對其經過的進行記錄采樣,用采樣后的點進行各種操作。
采樣點 用隊列保存,每時間片采樣 就會剔除最先進來的那個,然后對其繪制 造成了一個延遲效果。
和水果碰撞檢測的時候,會吧稀疏的點數組 擴展成一個 密集的數組。

1.進行位置采樣
判斷鼠標按下
如果按下 {
如果采樣數組 點的數量大于9
隊列出列,以及在隊列的末尾添加新的鼠標點
否則
就直接直接添加}
否則
采樣數組變為空

接下來是將采樣數組進行擴充。
根據 第i個點 和 第i+1 個點求得一個單位向量。用這個單位向量 進行擴展。

function SampleGet(){//獲得采樣數組if (GlobalInput.mouseDown){if (this.SampleList.length <9)this.SampleList.push(GlobalInput.mousePos.slice(0)) //將globalinput里面的數組的第0個元素塞到samplelist的最尾端else{this.SampleList.splice(0,1) //從第0位刪除一個元素this.SampleList.push(GlobalInput.mousePos.slice(0))// 插入第0個位置}}else{this.SampleList=[]}//擴展采樣點 對采樣點進行 檢測var i,j,x1,y1,x0,y0,nowX,nowY;this.ExtendList=[]for (i=1;i<this.SampleList.length;i++){x1=this.SampleList[i][0]y1=this.SampleList[i][1]x0=this.SampleList[i-1][0]y0=this.SampleList[i-1][1]var vector = [x1-x0,y1-y0]var vector_length = Tool.getVectorLenght(vector) //模長var unitary_vector = Tool.UnitaryVector(vector) //單位化for (j=0;j<vector_length;j++){nowX = x0 + unitary_vector[0]*jnowY = y0 + unitary_vector[1]*jthis.ExtendList.push([nowX,nowY])}}}

2.繪制刀刃

function onDraw(){//繪制刀刃var i,list1 = this.SampleListthis.contain.graphics.clear()if (list1.length>=1){for (i=1;i<list1.length;i++){this.contain.graphics.lineStyle(10,0xff00ff)this.contain.graphics.moveTo(list1[i-1][0],list1[i-1][1])this.contain.graphics.lineTo(list1[i][0],list1[i][1])}}}

3 碰撞檢測
在第10幀 吧刀刃的擴展后點數組 和所有水果進行碰撞檢測。

//=======================碰撞檢測==========================//水果 和 采樣數組 for (i=0;i<list1.length;i++){ list1[i].hitCheck(blade.ExtendList)}

水果類 和 水果死亡類
Fruits FruitsWaste
根據傳入來的 type生成對應的圖片。
tick函數 沒幀執行函數 。
move 函數 處理移動 和旋轉
getImage 函數 根據type或者圖片
hitCheck 碰撞檢測。用當前的水果對象 和傳進來的刀刃點數組進行碰撞
destroy 調用 destroySpawn 用來產生new出來 FruitsWaste 產生水果死亡特效

FruitsWaste
根據傳入的type 產生對應的特效
和讓他下落

一些全局類 GlobalInput Tool
GlobalInput

public static var mouseDown:Boolean=false; // 判斷鼠標按下public static var mousePos:Array=[0,0]; // 儲存鼠標位置

Tool

static public function randint(min,max):int{ //取得一定范圍內的隨機數return Math.round(Math.random()*(max-min))+min}static public function randfloat(min,max):Number{ return Math.random()*(max-min)+min} //向量模static public function getVectorLenght(v){return Math.sqrt(v[0]*v[0]+v[1]*v[1]) //如果是二維數組定義,怎么可以直接乘} //向量單位化static public function UnitaryVector(v){var len = Tool.getVectorLenght(v)return [v[0]/len,v[1]/len]}

總結

以上是生活随笔為你收集整理的【flash】 水果忍者的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。