您的位置:首页 > 其它

Flixel引擎学习笔记

2013-01-22 20:07 351 查看
转自: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即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: