from: http://blog.forfl.com/2013/01/the-flixel-engine-learning-notes/
Flixel引擎学习笔记
蛮欣赏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即可