Flixel引擎学习笔记

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即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值