轉自:http://blog.forfl.com/2013/01/the-flixel-engine-learning-notes/
蠻欣賞Flixel的哲學,學習並做下筆記,目標:基於Flixel組建團隊的快速開發游戲框架,達到高復用模塊、擁有方便移植的單獨的渲染對象、模塊獨立,方便合並的目的
Flixel引擎介紹
- 官網地址:http://flixel.org
- Flixel是一個基於MIT開源協議的AS3游戲位圖引擎
- Flixel的設計是主要封裝了Flash中和游戲相關的大部分內容,重新提供了一套Flixel接口,方便程序的開發,提高了代碼的統一,提高了代碼的可讀性。此外還提供了動畫、運動、2D碰撞、tilemap、場景管理等擴展功能,很適合2D橫板類游戲的開發
- Flixel是非常靈活的,繼承關系不復雜,接口清晰簡單,它的一個類專注提供一塊內容,本身的功能類數量並不太多,學習起來很輕松,所以也基本上不需要手冊,官網上也只是提供了一些How To來做參考。
- Flixel提倡開源,提倡使用開源工具,偏向小規模項目的開發,在官網上也介紹了許多開源工具,包括美術用的像素畫工具和Flixel的tilemap制作工具
- 最新版在Github上,github地址:http://www.github.com/AdamAtomic/flixel/
- 集成了不錯的有趣的小功能:譬如 :0 靜音 – 減少音量 +增加音量
Flixel優點
游戲管理
- 預加載器:Logo閃爍效果,支持顯示時間控制
- 站點鎖定:可限定只在一個網站部署
- 游戲循環和狀態管理
- 方便的本地保存
- 分數和關卡
- 屏幕失焦管理:暫停游戲和聲音,降幀,鼠鍵處理,暗屏並顯示logo和播放圖標
- 幀優化:游戲幀頻和Flash幀頻分開,游戲進度不因Flash降幀而減緩
- 計時器管理:和游戲循環整合、統一的管理器
- 針對移動平台的調整
- 記錄和回放
- 調試器
物體
- 基本:存在、活着、活動、可視、健康值、受傷、被殺、復活、閃爍(Flicker)
- 運動:位置、寬高、角度、質量、彈力;移動和旋轉的速度、加速度、阻力
- 碰撞:重疊檢測、分離反應、接觸檢測、方向可指定、四叉樹算法
- 視圖:設置圖形源、設置預旋轉圖形源(高性能)、幾何相關、屏幕內判斷、朝向、整體透明度顏色設置、填色、顏色替換、像素級重疊檢測、蓋章(Stamp)、位圖優化
- 動畫:可有多個動畫序列,添加、播放、回調、幀操作、隨機幀
- 物體分組:添加、移除、替換、回收、排序、查詢、全員操作
- 粒子系統:粒子本身也是物體,壽命、發射頻率、爆炸效果、旋轉、彈力、重力、掉地上后的摩擦力、開關
- 路徑跟隨
地圖
- 加載CSV數據
- 數組、位圖到CSV的轉化
- 磚塊操作
- 兩種自動鋪磚算法,分別適合薄牆和厚牆
- 重疊檢測
- 路徑尋找
攝像機
- 可設置多個攝像機
- 基本:縮放、角度、透明度、顏色、反鋸齒、填充
- 運動:聚焦、跟隨、死區(deadzone,不跟隨區)、邊界
- 效果:閃光(flash)、漸隱(fade)、震動(shake)
路徑
- 地圖的路徑尋找:有兩種算法
- 物體的路徑跟隨:可以設置速度、模式、自動旋轉
用戶界面
- 文本:文本、尺寸、顏色、字體、對齊、陰影
- 按鈕:文本、狀態、圖片、回調、音效
- 以上組件也是物體
鼠標鍵盤
- 鍵盤按鍵狀態
- 鼠標左鍵狀態、滾輪滾動值、鼠標位置
- 記錄和回放以上狀態
- 顯示和隱藏、自定義鼠標圖形
聲音
- 加載、播放、暫停、繼續、停止、循環、銷毀、音量
- 淡入淡出效果
- 漸近效果:自動根據離某物體的距離調節音量和平衡
- 支持嵌入和流音頻
- 背景音樂
- 按鈕音效
- 快捷鍵調節音量和靜音
- 音量調節視圖
- 音量信息保存
Flixel缺點
從學習成本,學習難度,對比其他開源引擎方面描述Flixel的缺點
Flixel結構說明
org.flixel
- org.flixel.FlxBasic 繼承自Object,Flixel的基類對象,FlxObject,FlxGroup都繼承自這個類
- org.flixel.FlxButton 簡單的按鈕類,繼承自FlxSprite,通過鼠標點擊,來調用回調的函數,可以方便的給按鈕設定與鼠標交互的所有狀態聲音
- org.flixel.FlxCamera 游戲鏡頭類,用來顯示游戲的視覺效果,可以用FlxG創建多個游戲顯示鏡頭,可以很方便的設置參數進行鏡頭跟隨(預設不同跟隨效果)、震屏效果、鏡頭放大、鏡頭縮小、鏡頭對焦、鏡頭填充顏色等
- org.flixel.FlxEmitter 輕量級的粒子發射器
- org.flixel.FlxG 全局控制Flixel功能的輔助類,如:聲音,輸入,碰撞檢測,相機,系統設置等,特別實用的是提供了一些實用函數用於緩存圖片,高速重復利用
- org.flixel.FlxGame 該類是所有flixel游戲對象的核心,包含了基本的對象游戲邏輯循環和運動
- org.flixel.FlxGroup 繼承自FlxBasic的組織管理類,可以更新和渲染定義數量的FlxBasic對象,最大的特點是:高度的重用游戲對象,而不需要重新分配,重新創建即new一個FlxBasic對象,個人理解是用對象池的概念進行封裝
- org.flixel.FlxObject 繼承自FlxBasic,是flixel里所有顯示對象的基類,子類有FlxSprite, FlxTile, FlxTilemap,定義了游戲對象的基本屬性,譬如:復古風格的忽隱忽現,基本狀態信息,大小,滾動,和基本的物理和運動
- org.flixel.FlxParticle 簡單的粒子類,繼承自FlxSprict,擁有更多的特殊行為,內置了粒子的摩擦系數、生命期限
- org.flixel.FlxPath 簡單的路徑數據容器,繼承自Object,可以用FlxTilemap.findPath()返回一個路徑數據,也可以通過add()自定義數據路徑
- org.flixel.FlxPoint 存儲二維浮點坐標容器(跟flash原生的Point類類似),繼承自Object,子類Mouse擴展自這個類
- org.flixel.FlxRect 存儲一個矩形。(跟flash原生的Rectangle類類似),繼承自Object,子類FlxQuadTree
- org.flixel.FlxSave 封裝SharedObject用來自動保存游戲的工具類,繼承自Object
- org.flixel.FlxSound flixel的聲音工具類,用於streaming, music, 和 sound effects,繼承自FlxBasic,實用功能有左右立體聲選擇,聲音衰落效果,聲音淡入淡出效果,聲道左右平移,聲音暫停、播放、返回、停止、銷毀或緩存等功能
- org.flixel.FlxSprite 最主要的“游戲對象”類,FlxSprite繼承於FlxObject,具有很多的圖像處理和動畫制作功能
- org.flixel.FlxState 基本的游戲“狀態”對象,繼承關系FlxState->FlxGroup->FlxBasic->Object,因為繼承自FlxGroup,常用來做場景或菜單,方便管理
- org.flixel.FlxText flixel引擎的文本類,繼承自FlxSprite,極方便做色調,褪色,旋轉和縮放等功能
- org.flixel.FlxTileblock 基本的“環境對象”類,用於創建簡單的牆壁和地板,繼承自FlxSprite
- org.flixel.FlxTilemap 繼承關系:FlxTilemap->FlxObject->FlxBasic->Object,傳統的tilemap顯示和碰撞類。內置了多種實用的尋路方式和繪制尋路路徑的方法
- org.flixel.FlxTimer 簡單的計時器類,跟Timer作用類似,
- org.flixel.FlxU 實用的功能類集合,如打開指定的網頁地址,數學運算(求隨機數,最大最小值等),顏色運算等
org.flixel.data.vcr flixel游戲vcr播放相關素材
- org.flixel.data.vcr.flixel.png
- org.flixel.data.vcr.open.png
- org.flixel.data.vcr.pause.png
- org.flixel.data.vcr.play.png
- org.flixel.data.vcr.record_off.png
- org.flixel.data.vcr.record_on.png
- org.flixel.data.vcr.restart.png
- org.flixel.data.vcr.step.png
- org.flixel.data.vcr.stop.png
org.flixel.data.vis
- org.flixel.data.vis.bounds.png
org.flixel.data flixel游戲相關素材
- org.flixel.data.autotiles_alt.png
- org.flixel.data.autotiles.png
- org.flixel.data.beep.mp3
- org.flixel.data.button.png
- org.flixel.data.cursor.png
- org.flixel.data.default.png
- org.flixel.data.FZKANGJW.TTF
- org.flixel.data.handle.png
- org.flixel.data.logo_corners.png
- org.flixel.data.logo_light.png
- org.flixel.data.logo.png
- org.flixel.data.unfoucs.png flixel游戲失去焦點顯示的界面
org.flixel.plugin flixel插件,擴展的功能類可以更新在此,方便以后flixel更新后,也能夠通用
- org.flixel.plugin.edgarcai 啊菜自己的擴展包
- org.flixel.plugin.edgarcai.flxMovieClip 繼承自FlxSprite,讓FlxSprite也能支持渲染MovieClip,采用的是每幀draw的方式
- org.flixel.plugin.DebugPathDisplay 簡單的管理器方便跟蹤和繪制FlxPath的調試數據到屏幕上
- org.flixel.plugin.TimerManager 簡單的定時器管理類,方便跟蹤和更新游戲的定時器對象。
org.flixel.system
- org.flixel.system.FlxAnim FlxSprite的動畫輔助類,
- org.flixel.system.FlxDebugger 繼承自flash.display.Sprite,新的調試顯示器容器,可以很方便的跟蹤所有flixel對象,記錄游戲玩的過程
- org.flixel.system.FlxList 微型的鏈接表,用於優化關鍵時間或高度重復的任務
- org.flixel.system.FlxPreloader 預加載器,loading的風格默認為像素風格(8位像素風格),繼承自flash.display.MovieClip
- org.flixel.system.FlxQuadTree 四叉樹結構的快速迭代檢查,繼承自FlxRect,四叉樹的概念和具體用法參見 http://developbbs.com/?p=115#more-115
- org.flixel.system.FlxReplay 重播管理類,記錄和重放游戲記錄,方便文件保存和加載重播。
- org.flixel.system.FlxTile 簡單的FlxTilemap輔助類,幫助碰撞控制,繼承關系:FlxTile->FlxObject->FlxBasic->Object
- org.flixel.system.FlxTilemapBuffer flixel多攝像頭系統和tilemap的輔助類。
- org.flixel.system.FlxWindow 基於Flash的通用窗口類,方便在FlxDebugger使用, 繼承自flash.display.Sprite,子類:Log, Perf, Watch
org.flixel.system.debug
- org.flixel.system.debug.Log 簡單的跟蹤輸出窗口,用於在調試器中覆蓋,繼承自FlxWindow
- org.flixel.system.debug.Perf 一個簡單的性能監控小工具,用於在調試器中覆蓋,繼承自FlxWindow
- org.flixel.system.debug.VCR 視頻播放類包含了記錄,停止,播放,繼承自flash.display.Sprite
- org.flixel.system.debug.Vis 此控制面板,在調試器中覆蓋所有的可視化調試器中切換。繼承自flash.display.Sprite
- org.flixel.system.debug.Watch 一個Visual Studio風格的“監視”窗口,在調試器中疊加使用。繼承自FlxWindow
- org.flixel.system.debug.WatchEntity Helper類 調試器覆蓋的觀察窗口。
org.flixel.system.input
- org.flixel.system.input.Input 基本輸入類,繼承自Object,子類:Keyborad
- org.flixel.system.input.Keyboard 鍵盤按鍵跟蹤類,跟蹤什么鍵被按下
- org.flixel.system.input.Mouse 輔助類,方便跟蹤和控制鼠標指針
org.flixel.system.replay
- org.flixel.system.replay.FrameRecord 框架記錄的Helper類的重放/演示/記錄系統的組成部分
- org.flixel.system.replay.MouseRecord 重放系統的Helper類。
Flixel核心對象FlxObject分析
功能:繼承自FlxBasic,是flixel里所有顯示對象的基類,子類有FlxSprite, FlxTile, FlxTilemap,定義了游戲對象的基本屬性,譬如:復古風格的忽隱忽現,基本狀態信息,大小,滾動,和基本的物理和運動
靜態變量:
- LEFT:uint (通用值“左”)
- RIGHT:uint(通用值“右”)
- UP:uint(通用值“上”)
- DOWN:uint(通用值“下”)
- NONE:uint(特殊情況下的常量定義)
- CEILING:uint(常量:上)
- FLOOR:uint (常量:下)
- WALL:uint(常量:左或者右)
- ANY:uint(常量:任何方向)
- OVERLAP_BIAS:Number(“重疊偏差值”)
[Path運動模式]
- PATH_BACKWARD 從路徑的末尾開始,到開始處停止
- PATH_FORWARD 從開始到結束的路徑,然后停止
- PATH_LOOP_FORWARD 從開始到結束的路徑,然后直接回到開始,並重新開始。
- PATH_LOOP_BACKWARD移動的路徑從開始則直接返回到結束,並重新開始。
- PATH_YOYO 路徑行為控制:從開始到結束的路徑移動,然后轉身回去的開始,一遍又一遍。
- PATH_HORIZONTAL_ONLY 忽略任何垂直分量的路徑數據,只有一邊到另一邊。
- PATH_VERICAL_ONLY 忽略任何水平分量的路徑數據,只有直上直下
公共屬性:
- x: 在世界坐標中對象左上角x坐標的位置
- y:在世界坐標上對象左上角Y坐標的位置
- width:次對象的寬度
- height:次對象的高度
- immovable:Boolean一個對象是否可以發生碰撞以后依然維持原先的運動狀態
- velocity : FlxPoint 此對象的基本速度
- mass:Number 對象的虛擬質量 默認是1
- elasticity :Number 此對象的彈性。默認是0“沒有彈性”
- acceleration : FlxPoint 此對象的加速度
- drag:FlxPoint 此對象的摩擦力(阻力)
- maxVelocity:FlxPoint 此對象的最大速度
- angle:Number :設置對象的旋轉角度 angularVelocity:Number 此對象的旋轉速度
- angularAcceleration :Number 此對象的旋轉加速度
- maxAngular:Number 此對象的最大旋轉速度
- health:Number 提供的一個生命值屬性
- moves:Boolean 設置為false時此對象不能運動(就算設置了速度也不會動) touching:uint 位置標志(up,down,right,left)表示跟哪一個方向的表面有接觸
- wasTouching:uint 儲存游戲上一次更新步驟里面的表面接觸位置標志
- allowCollisions:uint 設置哪些方向可以發生碰撞(默認是任何方向)
- path:FlxPath:FlxPath 路徑對象的一個引用 默認是null
- pathSpeed:Number 路徑上被跟蹤對象的移動速度
- pathAngle:Number 該對象和下一個節點之間的角度,0是直接向上,90是在右邊
公共方法:
- FlxObject(x:Number=0,Y:Number=0,width:Number = 0,height:Number = 0)
- 構造方法 參數(x,y,寬,高)默認值都為0
- destroy() 銷毀方法,所有變量設為Null
- followPath(Path:FlxPath,speed:Number = 100,Mode:uint = PATH_FORWARD,AutoRotate:Boolean = false)
- path:路徑對象FlxPath
- speed:沿着路徑的移動速度。默認是100/s
- Mode:路徑移動的行為模式 默認是PATH_FORWARD,
- AutoRotate:是否自動指向下一個節點方向。是否旋轉。默認是false;
- stopFollwoingPath(DestroyPath:Boolean = false)
- 讓對象不在隨路徑FlxPath移動 參數true時,銷毀path對象。默認是false
- overlaps(objectOrGroup:FlxBasic,InScreenSpace:Boolean = false,Camera:FlxCamera=null)
- 檢查對象和參數1:對象有沒有重疊碰撞
- InScreenSpace是否采取滾動因素考慮進去檢查時重疊。默認值是false,或“只在世界空間中進行比較。”
- 參數Camera相機指定你想要的游戲攝像頭。如果為null getScreenXY()方法會搶全局的第一FlxCamer對象。
- overlapsAt(X:Number,Y:Number,ObjectOrGroup:FlxBasic,InScreenSpace:Boolean=false,Camera:FlxCamera=null)
- 檢查ObjectOrGroup對象或組於參數X 參數Y這個點有沒有重疊 有返回true 沒有返回false
- overlapsPoint(Point:FlxPoint,InScreenSpace:Boolean=false,Camera:FlxCamera=null)
- 檢查一個點是否於此對象重疊
- getScreenXY(Point:FlxPoint=null,Camera:FlxCamera=null):FlxPoint
- 返回此對象在屏幕中的位置(因為滾屏原因。人物可能在視覺一直到舞台中間,但實際位置已改變。)
- flicker(Duration:Number = 1)
- 讓對象產生閃爍效果 默認時間1秒 傳入負值永遠閃爍
- get方法 flickering():Boolean
- 返回對象是否任然還在閃爍
- get solid():Boolean
- 返回對象是否能發生碰撞
- set solid(Solid:Boolean)
- 為true任何方向都可碰撞
- 為false 任何方向都不碰撞
- getMidpoint(Point:FlxPoint = null):FlxPoint
- 返回一個FlxPoint對象 是該對象在世界坐標中相對自己高寬的中心點
- reset(x:Number,Y:Number)
- 重置游戲對象的坐標和標識
- isTouching(Direction:uint):Boolean
- 返回對象是否是在當前幀下與指定的方向表面接觸
- justTouched(Direction:uint):Boolean
- 返回對象是否是在當前幀下與指定的方向表面第一次(或剛)接觸
- hurt(Damage:Number)
- 一個傷害方法,減少health對應的Damage值。
- kill()
- 當前對象死亡不在顯示和更新邏輯
- alive = false
- existe = false
Flixel配套工具
DAME教程:http://flashgamedojo.com/wiki/index.php?title=DAME_and_Spawn()_(Flixel)
Flan教程:http://flashgamedojo.com/wiki/index.php?title=Flan
Stencyl教程:http://www.stencyl.com/stencyl/get/ http://flashgamedojo.com/wiki/index.php?title=Stencyl
具體開發教程
官方教程:http://flashgamedojo.com/wiki/index.php?title=Category:Flixel
官方社區:http://forums.flixel.org
入門教程:http://flashgamedojo.com/wiki/index.php?title=EZPlatformer_(Flixel)
實際效率評測
待完善
Flixel游戲分析
待完善
Flixel新手一百問
1.如何Embed資源或素材
答:
// 圖像 [Embed(source="/yourfilepath/texture.png")] private var ImgTexture:Class; // 聲音 [Embed(source="/yourfilepath/audio.mp3")] private var SndSound:Class; // 字體 [Embed(source="/yourfilepath/typeface.ttf", fontFamily="Typeface")] private var FontTypeface:String; // XML [Embed(source="/yourfilepath/data.xml", mimeType="application/octet-stream")] private var XmlData:Class;
2.如何給你的游戲分目錄
答
3.如何實現英雄的二段跳
答:
if (FlxG.keys.justPressed("SPACE") && velocity.y == 0) { velocity.y = - JUMPSPEED; DOUBLEJUMP = false; SINGLEJUMP = true; } if ((FlxG.keys.justReleased(“SPACE”) && SINGLEJUMP) || velocity.y == 0) { DOUBLEJUMP = true; SINGLEJUMP = false; } if (FlxG.keys.justPressed(“SPACE”) && (velocity.y > 0 || velocity.y < 0) && DOUBLEJUMP) { velocity.y = - JUMPSPEED / 1.4; DOUBLEJUMP = false; }
4.如何利用flixel快速的計算角度
答:
FlxU.getAngle(0,10); //returns 90 FlxU.getAngle(10,10);//returns 45 FlxU.getAngle(10,0); //returns 0 FlxU.getAngle(0,-10);//returns -90
在實際游戲中應用:
var p1:FlxPoint = new FlxPoint(19,134); var p2:FlxPoint = new FlxPoint(256,35); var angle:Number = FlxU.getAngle(p2.x - p1.x, p2.y - p1.y);
5.橫版游戲中有哪些AI,如何在flixel中快速實現?
答:
資料地址:http://flashgamedojo.com/wiki/index.php?title=Intro_to_AI
6.flixel如何用box2d物理引擎創建物理游戲?
答:
資料地址:http://flashgamedojo.com/wiki/index.php?title=Box2D,_Implementation_(Flixel)
7.如何添加一個過場動畫?
8.配套的工具DAME怎么用?有哪些功能? 答:
http://flashgamedojo.com/wiki/index.php?title=DAME_Editor
9.如何延遲執行一個動作?
答:
http://flashgamedojo.com/wiki/index.php?title=Delayed_Actions_(Flixel)
10.如何設置動態碰撞區域?
答:
http://flashgamedojo.com/wiki/index.php?title=Dynamic_Collision_Area_(Flixel)
11.如何實現動態照明效果?
答:
http://flashgamedojo.com/wiki/index.php?title=Dynamic_Lighting_(Flixel)
12.如何創建特效?
答:
http://flashgamedojo.com/wiki/index.php?title=Emitter_Creation_(Flixel)
13.如何擴展FlxButton
答:
http://flashgamedojo.com/wiki/index.php?title=Extended_FlxButton
14.如何解決對象不隨鏡頭移動?
答:
設置屬性 http://flashgamedojo.com/wiki/index.php?title=UI,_HUD_or_Status_Overlay_(Flixel) scrollFactor.x = scrollFactor.y = 0;
15.如何設置對象閃爍?
答:
var object:FlxObject = new FlxSprite(); object.flicker(5); //Flicker for 5 seconds object.flicker(0); //Flicker indefinitely object.flicker(-1); //Cease flickering immediately
16.如何創建不斷滾動的背景?
答:
http://flashgamedojo.com/wiki/index.php?title=FlxBackdrop
17.游戲中常用的鏡頭移動的功能有哪些?
答:
http://flashgamedojo.com/wiki/index.php?title=FlxCamera
18.如何顯示dialog?
答:
http://flashgamedojo.com/wiki/index.php?title=FlxDialog
19.flixel游戲如何使用游戲手柄?
答:
http://flashgamedojo.com/wiki/index.php?title=Gamepad_Setup_(Flixel)
20.如何給對象賦予重力?
答:
//給加速度的y值賦值即可; var player:FlxSprite = new FlxSprite(); player.acceleration.y = 600;
21.如何對FlxGroup進行統計?
var living:FlxObject = this.defaultGroup.getFirstAlive(); var notExists:FlxObject = this.defaultGroup.getFirstAvail(); var dead:FlxObject = this.defaultGroup.getFirstDead(); var exists:FlxObject = this.defaultGroup.getFirstExtant(); var random:FlxObject = this.defaultGroup.getRandom(); var nullIndex:int = this.defaultGroup.getFirstNull();
22.如何設置震屏效果?
23.如何檢測鍵盤輸入? 答:
override public function update():void { //Quick check: if(FlxG.keys.SPACE) { //Space bar is currently pressed. } //Check if the button was just pressed: if(FlxG.keys.justPressed(“SPACE”)) { //User just pressed the space bar. } //Check if the button was just released: if(FlxG.keys.justReleased(“SPACE”)) { //User just let go of the space bar. } super.update(); } override public function update():void { var jump:String = “SPACE”; if(FlxG.keys[jump]) { //The ‘jump’ button is currently pressed } super.update(); }
24.如何在flixel使用Kongregate功能?
答:
已內置,詳見http://flashgamedojo.com/wiki/index.php?title=Kongregate_API_Integration_(Flixel)
25.如何創建多語言版本的游戲?
答:
方法一:
package { public final class Glossary { internal static const CATALAN:int = 0; internal static const ENGLISH:int = 1; internal static const JAPANESE:int = 2; internal static const FRENCH:int = 3; internal static const SPANISH:int = 4; internal staticvar currentLanguage:int; internal static const PLAY:Array = ["Jugar", "Play", "遊", "Jouer", "Jugar"]; internal static const HELP:Array = ["Ajuda", "Help", "手伝い", "Assistance", "Ayuda"]; internal static const ACHIEVEMENTS:Array = ["Èxits", "Achievements", "達成", "Réussites", "Logros"]; internal static const LEVELEDITOR:Array = ["Editor de nivells", "Level editor", "レベルエディタ", "Éditeur de niveau", "Editor de niveles"]; internal static const CREDITS:Array = ["Crèdits", "Credits", "クレジット", "Crédits", "Créditos"]; internal static const SELECTLANGUAGE:Array = ["Selecciona l'idioma", "Select language", "言語を選ぶ", "Choisir la langue", "Escoge el idioma"]; } } var playButton:String = Glossary.PLAY[Glossary.currentLanguage]; Glossary.currentLanguage = Glossary.ENGLISH; if(Glossary.currentLanguage == Glossary.JAPANESE) { //Japanese font stuff would go here }
方法二:http://flashgamedojo.com/wiki/index.php?title=Localization_(Flixel)_v2
26.如何創建類似超級瑪麗風格的跳躍?
答:
http://flashgamedojo.com/wiki/index.php?title=Mario_style_jumping(Flixel)
27.如何用對象池的概念管理內存並優化flixel游戲?
答:
http://flashgamedojo.com/wiki/index.php?title=Memory_Management_(Flixel)#For_flixel_2.5
28.如何獲取鼠標屬性值?
答:
override publicfunction update():void { //Get the X position of the mouse in the game world var mouseX:Number = FlxG.mouse.x; //Get the X position of the mouse in screen space var screenX:Number = FlxG.mouse.screenX; //Check whether the mouse is currently pressed var pressed:Boolean = FlxG.mouse.pressed(); var justPressed:Boolean = FlxG.mouse.justPressed(); var justReleased:Boolean = FlxG.mouse.justReleased(); super.update(); }
29.flixel都有哪些開源游戲?
答:
http://flashgamedojo.com/wiki/index.php?title=Open_Source_Games(Flixel)
30.如何自動尋路?
答:
已內置,原理參見http://flashgamedojo.com/wiki/index.php?title=Intro_to_Pathfinding,api參見Pathfinding
31.怎么自定義游戲暫停畫面?
答:
http://flashgamedojo.com/wiki/index.php?title=Pause_(Flixel)
32.怎么創建單路程的板?
答:
http://flashgamedojo.com/wiki/index.php?title=Platform,_One-Way_(Flixel)
33.如何自定義加載動畫?
答:
http://flashgamedojo.com/wiki/index.php?title=Preloader_(Flixel)
34.如何創建范圍數的隨機數?
答:
//Get a random number between 0 and 1 var random1:Number = FlxU.random(); //Get a random number between 0 and 20 var random2:Number = FlxU.random()*20; //Get the same random number each time var random3:Number = FlxU.randomize(12345); FlxU.seed = 12345; var random1:Number = FlxU.random(); var random2:Number = FlxU.random(); var random3:Number = FlxU.random();
35.在flixel中移除一個對象有哪幾種方法?
答:
http://flashgamedojo.com/wiki/index.php?title=Remove_an_Object_(Flixel)
//Create an object and add it to the game state var object:FlxObject = new FlxObject(); add(object); //Stop object from being drawn or updated object.exists = false; // - OR - Remove object from display list object = this.defaultGroup.remove(object); // - OR - Remove object from display list and flag for garbage collection this.defaultGroup.remove(object); // - OR - Remove object from group and resize group members array object = this.defaultGroup.remove(object,true); // - OR - Remove object from group, flag for garbage collection and resize group members array this.defaultGroup.remove(object,true); // - OR - Flag object for garbage collection object = null;
36.如何設置flixel游戲緩慢運行效果?
答:
FlxG.timeScale = 0.5; //Everything moves at half speed now
37.如何給游戲做存檔功能?
答:
<http://flashgamedojo.com/wiki/index.php?title=Saving_(Flixel)/pre>
38.如何獲取游戲寬高? 答: http://flashgamedojo.com/wiki/index.php?title=Screen_Size_(Flixel)
var screenWidth:uint = FlxG.width; var screenHeight:uint = FlxG.height;
39.如何對顯示對象進行y排序?
答:
http://flashgamedojo.com/wiki/index.php?title=Sort_Objects_(Flixel)
override public function update():void { super.update(); //Ascending "y" sort is a useful way to get Zelda-like visuals, // where objects lower on the screen are drawn in front of objects higher on the screen. this.defaultGroup.sort("y",FlxGroup.ASCENDING); }
40.如何播放聲音?
答:
http://flashgamedojo.com/wiki/index.php?title=Sound,_Music_(Flixel)
41.如何禁音?
答:
http://flashgamedojo.com/wiki/index.php?title=Sound,_Muting_(Flixel)
FlxG.mute = true; //turn all sounds off instantly FlxG.mute = !FlxG.mute; //toggle the mute, regardless of initial value
42.如何漸增漸減效果播放音樂?如何循環播放音樂?
答:
http://flashgamedojo.com/wiki/index.php?title=Sound,_Playing_(Flixel)
43.如何每隔2秒執行一次?
答:
http://flashgamedojo.com/wiki/index.php?title=Timer_(Flixel)public var counter:Number = 0;
override public function update():void { counter += FlxG.elapsed; if (counter >= 2) { // After 2 seconds has passed, the timer will reset. counter = 0; } }
44.如何開啟flixel調試功能?
答:
http://flashgamedojo.com/wiki/index.php?title=Trace_or_Log_Information_(Flixel)
45.如何設置全局音量?
答:
通過0(禁音) -(減少音量) +(增加音量) FlxG.volume = 0.65;
46.如何做狀態的更新?
答:
http://flashgamedojo.com/wiki/index.php?title=Updating_the_State_(Flixel)
47.如何做panel的特效?
答:
48.用BulkLoader如何獲取類? 答:
bulkLoader = new BulkLoader("mainLoader"); lc = new LoaderContext(false, ApplicationDomain.currentDomain); bulkLoader.add("assets/level1.swf", { id:"level1",context:lc } ); bulkLoader.add("assets/monster1.swf", { id:"monster1",context:lc } ); bulkLoader.add("assets/monster3.swf", { id:"monster3",context:lc } ); bulkLoader.add("assets/hero1.swf", { id:"hero1",context:lc } ); bulkLoader.add("assets/equipment.swf", { id:"equipment",context:lc } ); bulkLoader.addEventListener(BulkProgressEvent.PROGRESS, onBulkProgressHandler); bulkLoader.addEventListener(BulkProgressEvent.COMPLETE, onBulkCompleteHandler); bulkLoader.start();
獲取的時候:
var gra:Class=BulkLoader.getLoader("mainLoader").get("level1")["loader"].contentLoaderInfo.applicationDomain.getDefinition("game.Level1") as Class; //注意事項:要獲取的類必須包括包名稱.
49.FlxSprite對象如何加載一個外部的圖片?
答:
//給FlxSprite的pixels屬性賦值即可 var gra:Class=BulkLoader.getLoader("mainLoader").get("level1")["loader"].contentLoaderInfo.applicationDomain.getDefinition("game.Level1") as Class; var bitmap:BitmapData = gra as BitmapData; //add background backGround =new FlxSprite(0,0); backGround.active =false; backGround.pixels = bitmap; backGround.scrollFactor.x = backGround.scrollFactor.y =0; this.add(backGround);
50.為啥屏幕跟隨效果設置后,跟隨對象總在中間怎么辦?
答:
設置FlxG.camera.deadzone即可