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");

其实说白了就是组合,每个类来实现一个功能,每个组件都需namePushbutton 提供了很多默认的组件:如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公开了标准FlashEventDispatcher,所以很容易调度和监听事件。主要是通过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。用PBTemplateManager能够实例

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

4.1 Entities

   

4.2 Templates

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

 

4.3 Components

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

4.4 Groups:

是一系列的templatesentitiesgroups.他们会在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原创的标记语言),

Application Help

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

for this link');return false">Show Dialog Box

 

 

 

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引擎

特点:

带有粒子系统和特效系统

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

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

 

FlxGameFlxG 两个最核心的类

 

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

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

 

其他类介绍:

FlxState :游戏状态管理。

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

 

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

 

典型的Flixel体系结构如下:

FlxGame

FlxG

FlxState

FlxSprite

 

主要区别

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

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

 

11   总结

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

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

你可能感兴趣的:(flex,ActionScript3.0)