蛮欣赏Flixel的哲学,学习并做下笔记,目标:基于Flixel组建团队的快速开发游戏框架,达到高复用模块、拥有方便移植的单独的渲染对象、模块独立,方便合并的目的
从学习成本,学习难度,对比其他开源引擎方面描述Flixel的缺点
org.flixel
org.flixel.data.vcr flixel游戏vcr播放相关素材
org.flixel.data.vis
org.flixel.data flixel游戏相关素材
org.flixel.plugin flixel插件,扩展的功能类可以更新在此,方便以后flixel更新后,也能够通用
org.flixel.system
org.flixel.system.debug
org.flixel.system.input
org.flixel.system.replay
功能:继承自FlxBasic,是flixel里所有显示对象的基类,子类有FlxSprite, FlxTile, FlxTilemap,定义了游戏对象的基本属性,譬如:复古风格的忽隐忽现,基本状态信息,大小,滚动,和基本的物理和运动
静态变量:
[Path运动模式]
公共属性:
公共方法:
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)
待完善
待完善
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即可