学习总结
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:
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原创的标记语言),
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引擎
特点:
带有粒子系统和特效系统
对流式音乐和循环音乐进行控制
进度存储,数学函数和碰撞检查
FlxGame和FlxG 两个最核心的类
FlxGame:程序主入口文件,需要继承它并修改些参数。
FlxG:用来控制游戏中的关键要素,如用户按键控制,背景的移动,声音控制。
其他类介绍:
FlxState :游戏状态管理。
是一种容器,用来放置所有游戏元素,如菜单,英雄,敌人,按钮等,FlxG中有状态切换方法。
FlxSprite:多用途的类,包含动画,移动,模拟重力,碰撞检查,可以受伤或者死亡,我们可以用它来创建角色,或者敌人。
典型的Flixel体系结构如下:
FlxGame
FlxG
FlxState
FlxSprite
主要区别
Pushbutton :实体可以添加多个组件,开发围绕着组件。
Fixel :继承,简单的继承就可以实现很多复杂的功能。
11 总结
咱们做的SNS游戏的,不是那么复杂,如果使用这些引擎,可能会增加很多无用的代码。
可以参考以上引擎,开发适我们公司的引擎。