pushbutton flash 游戏开发

学习总结

PushButton引擎是一个模块化的游戏引擎,也就是说它提供了许多游戏开发中的通用组件来为开发者服务;让你通过组件帮助你很快的构建你的游戏。因为组件都是基于一致的接口,游戏只需要很简单的组织他们 就可以了。

1       

游戏当中的角色,宝物等等所有一切都是实体。所有pushbutton 开发的游戏,是又一堆组建拼凑起来的。

创建一个实体方法很简单:

var hero:Entity = new Entity () ;

hero.initialize(“Hero”);

每个实体都要有个名字,实体之间的调用都是通过名字关联。

2        组件

每个实体是由多个组件组成。一个实体大概有三部分组成。位置组件,显示组件,控制组件

2.1位置组件:

var spatial:SimpleSpatialComponent = new SimpleSpatialComponent();    

spatial.position = new Point(-375,-275);                         

spatial.size = new Point(50,50);                                  

spatial.spatialManager = PBE.spatialManager;

2.2显示组件:

var render :SpriteRenderer = new SpriteRenderer () ;

render.fileName = “../assets/ball.png”

2.3控制组件

var controller:HeroControllerComponent = new HeroControllerComponent();

这样一个实体的组件基本上创建完成,当然还需要设置一些属性。接下来需要把这些组件附到实体上面。

hero.addComponent(spatial, “spatial” );

hero.addComponent(render, “render” );

hero.addComponent(controller, “controller”);

其实说白了就是组合,每个类来实现一个功能,每个组件都需name,Pushbutton 提供了很多默认的组件:如SimpleSpatialComponent, SpriteRenderer等等,也可以自定义组件,继承EntityComponent就可以

3        组件之间通信

组件之间互访有三种方法 ,属性 ,事件,直接访问

3.1属性

在组件之间共享数据的最佳方式是通过属性。因为它们在编译时不需要任何的组件之间的依赖。实例如下:

class TestComponent extends EntityComponent {
public var aProperty:String = ”Hello!”;
}

假设上面组件取名为Test,其他组件可以如下访问:
var value:String = owner.getProperty(new PropertyReference(“@Test.aProperty”)) as String;

假设aProperty是一个点(Point)。你可以做以下几点:

var xPosition:Number = owner.getProperty(new PropertyReference (“@Test.aProperty.x”) as Number;

3.2 事件

每IEntity公开了标准Flash的EventDispatcher,所以很容易调度和监听事件。主要是通过owner.eventDispatcher监听和派发事件。

class TestComponent extends EntityComponent{
static public const SOME_ACTION:String = ”SomeAction”;
public function SomeActionHappens():void{
owner.eventDispatcher.dispatchEvent(new Event(SOME_ACTION));
}
}

其它组件可以监听上面事件
class TestListenerComponent extends EntityComponent{


protected function onAdd():void{
owner.eventDispatcher.addEventListener(

TestComponent.SOME_ACTION, _EventHandler);
}

private function _EventHandler(e:Event):void{
trace(“Got an event!”);
}

protected function onRemove():void{
owner.eventDispatcher.removeEventListener(TestComponent.SOME_ACTION, _EventHandler);
}
}

 

3.3直接访问

PB提供了如下三个方法,

lookupComponentByName 通过组件名称

lookupComponentByType  通过类型

lookupComponentsByType 返回list

4        XML组装实体

组件的初始化可以用xml配置文件管理,类似spring。用PB的TemplateManager能够实例

化以下种型。entity , templates, components, group

4.1 Entities

<entity name=”Box2D”>

<component type=”com.pblabs.box2D.Box2DManagerComponent”name=”Manager”>

</component>

    <component type=”com.pblabs.box2D.Box2DDebugComponent” name=”Debug”>

<Scene componentReference=”Scene”/>

</component>

</entity>

4.2 Templates

模板的构建和实体是一样的,同样包含template标签。和实体的唯一的区别是:模板是需要用NameManager管理的。模板可以创建很多实 例,而实体只能构建一个实例。

4.3 Components

组建标签被包含在template和entity标签当中和描述一个组件。

4.4 Groups:

是一系列的templates、entities、groups.他们会在group被实例化的时候也被实例化。例如,如果定义有两个子标签“MyFirstEntity”和“MySecondEntity”,实例化group将实例化这两个实例。

5        动画

看过几个类似的引擎,动画的原理大概如下:

把多动作放在一张图上面,程序运行时,计算里面小图的坐标信息,而生成相应的动画。类似于CSS SPRITE

PB 里面提供了操作此功能相关的类。

如:CellCountDivider 用于切割图片,SpriteSheetRenderer : 用于显示动画

6        PB总结

给我感觉比较繁琐,每个对象都需要编写大量的代码。

采用继承方式虽然复杂些,但可以提供很实用的超类,但是每个元件绑定一个类,这样结构也比较清晰,开发效率高。

7        服务端

可选择:Fms,Red5,Smartfoxserver。个人感觉用tomcat + red5组合还不错。

Tomcat 处理web请求,red5 处理即时请求。

8        FaceBook API 接口

大概以下几个部分:

8.1 FBML(一个基于HTML语言规范的FB原创的标记语言),

<fb:dashboard>

<fb:help href=”help.php”>Application Help</fb:help>

</fb:dashboard>

8.2应用程序接口(可以从FB存取数据的接口),总过有八大类

a)         用户的基本帐户权限查询.

b)        新闻提交新闻RSS种子方法.

c)        提供查询用户的朋友的多方面查询方法.

d)        提供向用户发送站内信息方法.

e)         允许你在用户信息中设置[符合FBML语法的代码].

f)         提供用户信息(用户是否登录/详细的个人信息等).

g)        提供登录群组的方法

h)        提供与相册结合的方法

8.3 FQL(类似SQL语法的数据库查询语言),

SELECT name, pic

FROM user

WHERE uid = 7608007JSTL

8.4 Facebook JavaScript

<a href=”#” onclick=”new Dialog().showMessage(‘Dialog’, ‘This is the help message

for this link’);return false”>Show Dialog Box</a>

 

8.5 Client Libraries

提供了 多种语言的库。As,php 等等

9        开发步骤

9.1 创建一个facebook账号

9.2 准备一台服务器

9.3 下载客户端开发包

9.4 加入开发运用

 

 打开链接http://www.facebook.com/developers 点击 set Up new Application

2 对应用简单的配置

Callback url : 是应用的域名

Canvas page url: facebook设定的url

流程分析

测试

http://developer.facebook.com/tools.php

10  Flixe引擎

特点:

带有粒子系统和特效系统

对流式音乐和循环音乐进行控制

进度存储,数学函数和碰撞检查

 

FlxGame和FlxG 两个最核心的类

FlxGame:程序主入口文件,需要继承它并修改些参数。

FlxG:用来控制游戏中的关键要素,如用户按键控制,背景的移动,声音控制。

其他类介绍:

FlxState :游戏状态管理。

是一种容器,用来放置所有游戏元素,如菜单,英雄,敌人,按钮等,FlxG中有状态切换方法。

FlxSprite:多用途的类,包含动画,移动,模拟重力,碰撞检查,可以受伤或者死亡,我们可以用它来创建角色,或者敌人。

典型的Flixel体系结构如下:

FlxGame

FlxG

FlxState

FlxSprite

主要区别

Pushbutton :实体可以添加多个组件,开发围绕着组件。

Fixel :继承,简单的继承就可以实现很多复杂的功能。

11   总结

咱们做的SNS游戏的,不是那么复杂,如果使用这些引擎,可能会增加很多无用的代码。

可以参考以上引擎,开发适我们公司的引擎。



发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(Spamcheck Enabled)