- 浏览: 1087306 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/viewthread.php?tid=85961&extra=page%3D1%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D2592000
* 在读本教程之前,建议看完PBE的API Reference,官方的PushButton Engine Manual,里面有最基础的概念性讲解,比如Entity和Component的奸情。还有5 个lessons&
* 了解一个框架,首先是要看它的各个Class的组织架构,如果开源的话,就会看source code.对于PBE(PushButtonEngine的简称),首先我是被各种神似于displayobject的对象搞晕了,比如DisplayObjectRenderer,DisplayObjectScene DisplayObjectSceneLayer,SceneView,PBObject等等。有些是extend flash.displayObject,而有些是 extend Object.这个时候我就会confused.所以想要了解他们是如何群P就得加入他们。按照线性来进行解析应该是最好理解的,从最开始的PBE.startup()开始,到把一个displayObject显示在Stage上,朋友们可以结合官方提供的的第5个 lesston来配合了解原理。
1)PBE调用startup的时候initialize一些managers。其接受的参数是主程序.也就是Sprite.并赋值给PBE的静态变量mainClass。
2)当你创建ResourceBundle的子类的时候,PBE.addResources其实没实现任何功能.官方给出的解释是:Nothing for now. Just instantiating the class was enough.
3)接下来创建ScencView extends Sprite implements IUITarget的实例,在构造函数中,其会被添加到PBE.mainClass的显示列表中.其默认的height&width为Stage的height&width,name默认为”SceneView“。
4)然后调用PBE.initializeScene(),将创建的SceneView实例作为参数。
5)默认情况下PBE还会创建一个内置的Entity,并且其name为“SceneDB”。
6)如果你没有传递spatialManagerClass参数的时候,PBE会创建一个BasicSpatialManager2D的实例,并且把这个BasicSpatialManager2D的实例作为刚刚创建的Entity的addComponent的参数传递进去,并且命名为“Spatial”。
7)如果你没有指定sceneClass参数,那么PBE会内建DisplayObjectScene实例.当创建DisplayObjectScene的实例的时候,其会内建一个_rootSprite:Sprite的实例.
8)PBE会将创建的DisplayObjectScene实例的sceneView属性指定最初创建的SceneView,其实这个sceneView是个get set 的实现,当设置这个属性的时候,已经将其的_rootSprite实例添加到SceneView的显示列表中.
9)如果未指定sceneAlignment参数,那么默认的SceneView的对其方式为CENTER,这里注意一点是这个不是舞台的对其方式,其实在PBE启动startup方法的时候就已经指定舞台的对其方式为TL,并且noScale.
10)然后将DisplayObjectScene实例做为PBE起初创建的Entity.addComponent的参数,并且命名为Scene.到目前为止,所有的初始化工作已经完成,其实这些都是PBE内部实现的,如果想了解更多技术细节,可以看source code.
11)下面我们要让一个displayObject显示在Stage上,首先自行创建的DisplayObjectRenderer的子类,DisplayObjectRenderer是一个基础的render,并且封装了DisplayObject,比如有一些类似于displayObjec的特有属性。其构造函数中只是指定了scene的指向,默认是PBE.scene,也就是PBE默认创建的DisplayObjectScene实例。
12)PBE的核心是Entity,而Entiy是又N个components组成的,但是PBE只是对用户公开了IEntity的接口,其实PBE是创建Entity. 添加到同一IEntity的components可以相互作用,比如简单的控制一个displayObject的移动。
13)Entity extends PBObject implements IEntity,我们需要调用initialize,否则在Stage上你会什么也看不见。initialize()在PBObject上已经实现了一少部分了,初始化命名,添加到PBE.nameManager中,并且指定group为PBE的currentGroup.
14)在Entity内部,看看addComponent()是如何实现的,首先调用doAddComponet方法,用了一个Dictionary,用name来做键值。IEntityComponent实例(任何实现此接口的实例都可以添加到Entity中)还会添加到一个Array里,接着调用添加的component.register的方法,将IEntity&name作为参数传递。
15)IEntityComponent的内部register实现原理,首先是初始化ower & name,然后调用抽象方法onAdd(),具体的逻辑由子类来实现,比如BitmapRenderer。我们来看一看
16)BitmapRenderer的类的继承结构:BitmapRenderer extends DisplayObjectRenderer extends AnimatedComponent exntends EntityComponent
17)onAdd()的主要逻辑是在DisplayObjectRenderer中实现的,其内部的_displayObject属性name值为其ower的name + 其name.在这个方法中又执行了protected addToScene();
18)addToScene()的内部原理,其_scene:IScene2D,也就是PBE内部创建的DisplayObjectScene实例,并且调用了调用了add(),我们在看看DisplayObjectScene的add()的具体实现,里面又多了一个DisplayObjectSceneLayer extends flash.display.Sprite的引用.
19)DisplayObjectScene有个_layers的属性,并且初始化为[],还记得初始化DisplayObjectRenderer的时候有个layerIndex的属性,其实这个属性就是_layers的id,获取DisplayObjectSceneLayer实例需要调用getLayer()。
20)看看getLayer()的内部实现,返回_layers的对应的id的值,如果null就通过generateLayer()新建DisplayObjectSceneLayer实例.数组可以指定特定的id的值,比如初始化的_layers.length为0,如果_layers[20]=somevalue,那么数组的长度就为21.此时_rootSprite又清空了其显示列表,
然后调用_rootSprite.addChild(_layers);
21)然后调用相应的layer.add(),layer.add()的内部实现就是DisplayObjectSceneLayer调用我们所属性的addChild(dor.displayObject:DisplayObject);
22)在DisplayObjectScene的内部有个_renderersictionary的属性,其键值是DisplayObjectRenderer的displayobject,对应的值就是DisplayObjectRenderer
23)所以这个时候,在看BitmapRenderer的 set bitmapData的内部实现,首先它新建一个Sprite,然后将内置的Bitmap对象添加到其display list中。然后一个图形就显示在舞台上了:-)
* 在读本教程之前,建议看完PBE的API Reference,官方的PushButton Engine Manual,里面有最基础的概念性讲解,比如Entity和Component的奸情。还有5 个lessons&
* 了解一个框架,首先是要看它的各个Class的组织架构,如果开源的话,就会看source code.对于PBE(PushButtonEngine的简称),首先我是被各种神似于displayobject的对象搞晕了,比如DisplayObjectRenderer,DisplayObjectScene DisplayObjectSceneLayer,SceneView,PBObject等等。有些是extend flash.displayObject,而有些是 extend Object.这个时候我就会confused.所以想要了解他们是如何群P就得加入他们。按照线性来进行解析应该是最好理解的,从最开始的PBE.startup()开始,到把一个displayObject显示在Stage上,朋友们可以结合官方提供的的第5个 lesston来配合了解原理。
1)PBE调用startup的时候initialize一些managers。其接受的参数是主程序.也就是Sprite.并赋值给PBE的静态变量mainClass。
2)当你创建ResourceBundle的子类的时候,PBE.addResources其实没实现任何功能.官方给出的解释是:Nothing for now. Just instantiating the class was enough.
3)接下来创建ScencView extends Sprite implements IUITarget的实例,在构造函数中,其会被添加到PBE.mainClass的显示列表中.其默认的height&width为Stage的height&width,name默认为”SceneView“。
4)然后调用PBE.initializeScene(),将创建的SceneView实例作为参数。
5)默认情况下PBE还会创建一个内置的Entity,并且其name为“SceneDB”。
6)如果你没有传递spatialManagerClass参数的时候,PBE会创建一个BasicSpatialManager2D的实例,并且把这个BasicSpatialManager2D的实例作为刚刚创建的Entity的addComponent的参数传递进去,并且命名为“Spatial”。
7)如果你没有指定sceneClass参数,那么PBE会内建DisplayObjectScene实例.当创建DisplayObjectScene的实例的时候,其会内建一个_rootSprite:Sprite的实例.
8)PBE会将创建的DisplayObjectScene实例的sceneView属性指定最初创建的SceneView,其实这个sceneView是个get set 的实现,当设置这个属性的时候,已经将其的_rootSprite实例添加到SceneView的显示列表中.
9)如果未指定sceneAlignment参数,那么默认的SceneView的对其方式为CENTER,这里注意一点是这个不是舞台的对其方式,其实在PBE启动startup方法的时候就已经指定舞台的对其方式为TL,并且noScale.
10)然后将DisplayObjectScene实例做为PBE起初创建的Entity.addComponent的参数,并且命名为Scene.到目前为止,所有的初始化工作已经完成,其实这些都是PBE内部实现的,如果想了解更多技术细节,可以看source code.
11)下面我们要让一个displayObject显示在Stage上,首先自行创建的DisplayObjectRenderer的子类,DisplayObjectRenderer是一个基础的render,并且封装了DisplayObject,比如有一些类似于displayObjec的特有属性。其构造函数中只是指定了scene的指向,默认是PBE.scene,也就是PBE默认创建的DisplayObjectScene实例。
12)PBE的核心是Entity,而Entiy是又N个components组成的,但是PBE只是对用户公开了IEntity的接口,其实PBE是创建Entity. 添加到同一IEntity的components可以相互作用,比如简单的控制一个displayObject的移动。
13)Entity extends PBObject implements IEntity,我们需要调用initialize,否则在Stage上你会什么也看不见。initialize()在PBObject上已经实现了一少部分了,初始化命名,添加到PBE.nameManager中,并且指定group为PBE的currentGroup.
14)在Entity内部,看看addComponent()是如何实现的,首先调用doAddComponet方法,用了一个Dictionary,用name来做键值。IEntityComponent实例(任何实现此接口的实例都可以添加到Entity中)还会添加到一个Array里,接着调用添加的component.register的方法,将IEntity&name作为参数传递。
15)IEntityComponent的内部register实现原理,首先是初始化ower & name,然后调用抽象方法onAdd(),具体的逻辑由子类来实现,比如BitmapRenderer。我们来看一看
16)BitmapRenderer的类的继承结构:BitmapRenderer extends DisplayObjectRenderer extends AnimatedComponent exntends EntityComponent
17)onAdd()的主要逻辑是在DisplayObjectRenderer中实现的,其内部的_displayObject属性name值为其ower的name + 其name.在这个方法中又执行了protected addToScene();
18)addToScene()的内部原理,其_scene:IScene2D,也就是PBE内部创建的DisplayObjectScene实例,并且调用了调用了add(),我们在看看DisplayObjectScene的add()的具体实现,里面又多了一个DisplayObjectSceneLayer extends flash.display.Sprite的引用.
19)DisplayObjectScene有个_layers的属性,并且初始化为[],还记得初始化DisplayObjectRenderer的时候有个layerIndex的属性,其实这个属性就是_layers的id,获取DisplayObjectSceneLayer实例需要调用getLayer()。
20)看看getLayer()的内部实现,返回_layers的对应的id的值,如果null就通过generateLayer()新建DisplayObjectSceneLayer实例.数组可以指定特定的id的值,比如初始化的_layers.length为0,如果_layers[20]=somevalue,那么数组的长度就为21.此时_rootSprite又清空了其显示列表,
然后调用_rootSprite.addChild(_layers);
21)然后调用相应的layer.add(),layer.add()的内部实现就是DisplayObjectSceneLayer调用我们所属性的addChild(dor.displayObject:DisplayObject);
22)在DisplayObjectScene的内部有个_renderersictionary的属性,其键值是DisplayObjectRenderer的displayobject,对应的值就是DisplayObjectRenderer
23)所以这个时候,在看BitmapRenderer的 set bitmapData的内部实现,首先它新建一个Sprite,然后将内置的Bitmap对象添加到其display list中。然后一个图形就显示在舞台上了:-)
发表评论
-
greenSock新老库
2012-08-07 13:25 0老库-做项目的时候比新库完全不抖啊 -
Starling开发的游戏源码
2012-07-26 17:13 0Starling开发的游戏源码 -
HttpStatusConfig --一个HTTP 协议返回的 解析说明类
2012-04-18 16:40 0package guwanyuan.qicool.game ... -
[转] [Flash/Flex] 加载SWF性能VS影片剪辑性能
2012-03-15 22:29 0http://bbs.9ria.com/viewthread. ... -
greensock-as3
2012-02-23 21:26 0greensock-as3 -
禁止输入文本可以粘贴
2012-02-10 13:15 2321//禁止输入文本粘贴动作 private static ... -
江湖情缘游戏里的跳的类
2012-02-08 23:55 0package com.app.role.montions ... -
[教程] 路点导航(Waypoint Navigation)
2011-12-31 00:51 0前言:这个不难,所以知道的童鞋不要喷,不知道的童鞋也不要怕,要 ... -
ARPG游戏引擎设计思路
2011-12-31 00:48 00.整体结构 下载 (32.92 KB ... -
[转]三次贝尔曲线
2011-11-10 01:09 1930http://bbs.9ria.com/viewt ... -
[转]FLASH与JS序列简单应用
2011-10-28 01:03 2093FLASH与JS序列简单应用 (一) 用swfob ... -
2个加载作用
2011-10-24 22:14 1873第一话:加载Base64 encoded string 通过 ... -
翻译: Flash文本引擎, 第三部分: 布局
2011-10-20 02:36 0http://www.riade ... -
珍宝探索 AS3-过关类小游戏
2011-10-13 02:15 0珍宝探索 AS3-过关类小游戏 -
(RepeaterOverTimeLine能将一个for循环执行的工作类似异步地平摊到多个帧上)RepeaterOverTimeLine
2011-09-30 02:26 0(RepeaterOverTimeLine能将一个for循环执 ... -
海洋效果非常绚丽
2011-09-30 02:17 0海洋效果非常绚丽 -
读取SWF并且画出其中的SHAPE图形, 其中的SWF格式文件有说明 很不错
2011-09-30 01:11 0读取SWF并且画出其中的SHAPE图形, 其中的SWF格式文件 ... -
[转]TweenMax的用法和参数说明
2011-09-28 19:41 6027TweenMax 参数说明(中文): 本文源自”独自行走 ... -
[转]开发一个类似水果忍者的游戏flash Fruit Ninja source code
2011-09-25 01:15 0http://game-develop.net/blog/?p ... -
[转]批量生成swf资源文件 JSFL
2011-09-22 22:58 0发布文件夹里的所有flash.jsfl var fol ...
相关推荐
PushButtonEngine(PBE)是一个专为游戏开发设计的开源、模块化的引擎,它提供了一整套工具和框架,使得开发者可以更加高效地构建2D和轻量级3D游戏。这个引擎的核心理念是将游戏开发过程分解为可重用且独立的组件,...
PushButton Engine is a free framework for building Flash games. There are lots of great libraries for Flash game development. PushButton Engine makes it easy to bring those libraries together to build...
在`<mx:Application>`标签中设置`applicationComplete`方法,调用`Global.startup(this)`,这是使用PushButton引擎的基础。在`appComplete()`函数中,你可以开始创建你的游戏元素。 在PushButton中,所有的游戏对象...
- [下载](code.google.com/p/pushbuttonengine/downloads/list) - [快速入门](wenku.baidu.com/view/db3b102fb4daa58da0114a1d.html) - [教程与演示](.47school./soft/Flash/yykf/2010/0304/60000.html) 这两个引擎...
本文将详细介绍几种基于Flash平台的2D+3D游戏引擎,帮助开发者更好地了解这些工具的特点与应用。 #### 二、Flixel 位图引擎 Flixel是一款非常受欢迎的开源位图引擎,特别适用于那些需要大量动态元素同时出现在屏幕...