• 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坐标的位置
    • 次对象的宽度
    • 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,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即可
  • 相关阅读:
    内存对齐规则
    ATL窗口
    ATL的GUI程序设计(4)
    ATL的GUI程序设计(4)
    ATL的GUI程序设计(3)
    ATL的GUI程序设计(3)
    VMware Workstation 9.0 安装苹果Mac OS X10.9系统
    高级UIKit-03(NSFileManager、NSFileHandle)
    高级UIKit-02(文件操作)
    高级UIKit-01(总结基础UIKit)
  • 原文地址:https://www.cnblogs.com/keng333/p/3030643.html
Copyright © 2020-2023  润新知