这篇文章针对的PBE 的版本为Mon Nov 07 23:18:44 -0800 2011 发布的1.0版本。使用Flashdevelop 4.0作为IDE,使用当前最新的Flex SDK4.5.1
2.0粗略的看了一眼,写得很薄。2.0应该是针对游戏框架的设计,呵呵,2.0 Demo的第一句话“PushButton Engine is an industrial strength open source Flash game framework.”挺敢说的,工业强度。。。
2.0粗略的看了一眼,写得很薄。2.0应该是针对游戏框架的设计,呵呵,2.0 Demo的第一句话“PushButton Engine is an industrial strength open source Flash game framework.”挺敢说的,工业强度。。。
目的很明确,就是用PBE显示一个MovieClip,这个MovieClip是导出为 swc格式的。这种方式很适合开发,由Flash美术人员制作*.fla后导出成swc,这样就可以不用再跟程序人员费尽口舌的说明某某在XX坐标,某某在XX坐标,层级关系是这样的(此处省略XX字)。人员配合几次形成默契后连文档都省了。
不用PBE其实这是很容易做到的,
this.addChild(new swcClass());
但变为PBE的一个Component就稍微复杂了些,没办法为了组织起一个庞大的游戏逻辑,肯定是会复杂的。
准备工作:1个动画原件导出成swc(这个美术人员都会,这里要注意的也就是动画的原点),PBE的源码(我喜欢编译源码到工程里,而不喜欢PBE的swc,往上查看或修改代码比较方便),建一个AS3工程(其实就用 解压引擎的目录\development\FlashDevelop\PBEngine 的这个Hello,在里面增加代码就挺好)
package
{
import com.pblabs.engine.debug.Logger;
import com.pblabs.engine.entity.IEntity;
import com.pblabs.engine.PBE;
import com.pblabs.rendering2D.MovieClipRenderer;
import com.pblabs.rendering2D.ui.SceneView;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.geom.Point;
/**
* ...
* @author Simon
*/
public class Hello extends Sprite
{
public function Hello()
{
// 它初始化
PBE.startup(this);
Logger.print(this, "Hello, World!");
// 以上是原来例子提供的
// swc的资源,就是一个MovieClip
var et:et_1 = new et_1();
// 初始化PBE场景
var sceneview:SceneView = new SceneView();
// 场景宽
sceneview.width = 800;
// 场景高
sceneview.height = 600;
// 起个名字
sceneview.name = "MainView";
PBE.initializeScene(sceneview);
// 显示这个MovieClip
ShowMC(et);
}
private function ShowMC(mc:MovieClip):void
{
// PBE的所有对象都是IEntity
var obj:IEntity = PBE.allocateEntity();
// 这个MovieClipRenderer 半年前还不好用,这个版本修改了一些代码
var fxrender:MovieClipRenderer = new MovieClipRenderer();
// 直接把这个MovieClip赋值了
fxrender.clip = mc;
// 开启无限循环播放,否则播放1遍后就停止了
fxrender.loop = true;
// 指定个位置,这里是可以插入运动功能Component的,这里就不插入了
fxrender.position = new Point(0, 0);
// 指定显示场景
fxrender.scene = PBE.scene;
// 把这个render添加到这个对象 - PBE的基本规则也算是灵魂规则吧
obj.addComponent(fxrender, "fxRender");
obj.initialize();
}
}
}
OK了!