Flixel引擎學習筆記


轉自: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即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM