egret怎么添加puremvc

egret怎么添加puremvc,第1张

说学就学,可是第一步就让我感觉很费事~~(哎~菜鸟当久了)。要开始学,得先下个PureMVC框架装上吧。找了半天PureMVC框架,下载下来后,发现是一个压缩包,大小只有几百K(心存怀疑,怎么这么小呀)。解压之后,根据惯性开始寻找一个类似Setup的东东。狂汗,就是找不到这个东西。这下我认定刚才下错东西了。于是,在网上又是一阵狂搜,结果证明自己没下错。-_-!!!

第二步,开始安装PureMVC。没有setup,怎么装呢?是不是添加引用就可以了呢?可是又该怎么添加呢?(我用得是FlashDevelop这个编辑AS的软件)网上又是一阵狂搜,可搜到的都是谈论PureMVC的架构怎么样或者pureMVC具体应用怎么写,就是没有介绍刚开始该怎么配置的。“最危险的地方就是最安全的地方”,结果在PureMVC的下载页内找到了“Installation ”字样。其中的大概做法,就是解压,然后将“PureMVC_AS3_2_0_4.swc ”添加到项目的库中。因为,我用的是FlashDevelop,所以添加方法如下:选中项目的lib文件夹-》右键添加存在的文件-》选择PureMVC_AS3_2_0_4.swc-》右键单击添加进来的这个文件-》选择添加到库中(Add To Library)。这样便可以算前期工作全部结束了。

第三步,查找关于PureMVC的介绍,补一下理论知识。这些东西,网上超多,我就不介绍了。

简单的说,PureMVC源于MVC模式,主要就是Model、View、Controller这三层次。但在PureMVC中上述三个都被封装成了三个核心层,并通过单例模式提供给应用程序。开发人员不需要直接使用这三个核心层。PureMVC为了简化开发复杂度,提供了一个Facade类,该类提供了与核心层通信的唯一接口,可以初始化上述三个核心层,并可以访问它们的public方法,同时该类也是以单例模式提供给应用程序。开发人员只需要继承一个Facade类并创建具体的Facade类就可以实现整个MVC模式。除了知道Facade类之外,还需要了解与三个核心层相辅助的三个类:Proxy、Mediator、Command。

Proxy,可以理解为代理,负责 *** 作数据的存取。

Mediator,可以理解为媒介,负责UI层与控制层之间的沟通。

Command,则是用来 *** 作具体的业务逻辑。

为了对这三个核心层尽量的解耦,PureMVC中采用了消息机制,层与层之间的通信通过发送消息(notification)来实现。消息发送者只需要实现发送,不需要知道谁会接收这些消息。消息接收者如果需要接收消息,只需要注册一下对应的消息就可以了。如:registerCommand(START_UP, StartUpCommand)这句话产意思就是注册了一个对应关系,其中START_UP是消息的名称,StartUpCommand则是一个Command,这样当有人发送了START_UP名称的消息后,就会由StartUpCommand进行处理。

第四步,动手写自己的Demo(在我的这个Demo中,实现功能很简单:记录每次鼠标单击时在X方向上的偏移量)。

1)创建一个新的项目,就叫做 "MyFirstPureMvc” 吧。新创建的项目,应该可以看到bin、lib、src这三个文件夹,在src下有一个main.as文件,bin下有一些用于呈现网页的文件(项目中基本不需要用到)。

2)在lib文件夹中添加PureMVC_AS3_2_0_4.swc,并添加到库中。

3)在src文件夹中添加三个子文件夹:Model、View、Controller。Model文件中放置MouseClickProxy.as文件。View中放置StageMediator.as文件。Controller中放置StartUpCommand.as和MouseClickCommand.as这两个文件。具体内容,请看下面。

4)在src文件夹中接着添加ApplicationFacade.as文件,名称可以不一样。这个主要是用来继承Facade类的。如果你了解了基本的PureMVC框架结构之后,应该明白Facade这个类的重要性。

package

{

import org.puremvc.as3.patterns.facade.Facade

import controller.*

/**

* Facade模式来实现统一的接口,对外只提供了startup方法用于启动

* 在该类被创建的时候会自动调用initializeController方法,需要在该方法中对Command进行注册

* 接着,调用startup方法启动(也就是发送一个消息,因为之前已经注册了Command,所以相应的方法会去执行execute进行响应)。

* @author

*/

public class ApplicationFacade extends Facade

{

public static const START_UP:String = "START_UP"

public static const MOUSE_CLICK:String = "MOUSE_CLICK"

public static function getInstance(): ApplicationFacade {

if (instance == null) {

instance = new ApplicationFacade()

}

return instance as ApplicationFacade

}

public function startup(app:Object):void

{

sendNotification(START_UP, app)

}

override protected function initializeController():void {

super.initializeController()

registerCommand(START_UP, StartUpCommand)

registerCommand(MOUSE_CLICK, MouseClickCommand)

}

}

}

上述语句中的initializeController方法中首先初始化了Controller控制器,并建立了Command与消息之间的映射关系。然后调用startup启动整个程序。在sendNotification中,发送了一个名为START_UP的消息。并传递了一个app对象

根据注册的关系,StartUpCommand类会接收到这个消息。

在这个类中,主要实现了父类的execute方法。在该方法中注册了一个代理和媒介。这两个东东,在随后的程序运行中需要使用,所以要进行一下注册。注册了之后,接下去如果要使用则直接可以从facade中获取。

接着来看下StageMediator.as,这个东东关系到我们的View视图,与我们可以看得到的UI密切相关。我们在UI上触发的一些事件会由这个StageMediator类接收(并进行简单的封装)后发送给控制层去处理。

在mouseClick事件中,又发送了一个通知,通知的消息为MOUSE_CLICK。另一个是鼠标的单击时的X方向上偏移量。看一下ApplicationFacade类中注册的信息,可以找到与消息对应的类是MouseClickCommand。

在这个类中,就输出了X方向上偏移量。

接下来,你只需要ctrl+enter测试就可以了。

是不是很奇怪,从头到尾都没有用过Model层,是的,这可能是我这个DEMO的缺陷,因为我这个Demo中不需要查询数据库或其它数据存储区来获取或写入数据,因此并没有使用到。

上面的整个过程,只起到一个简单的演示作用。如果大家需要深入学习,建议大家参考网上达人们的文章。

1.draw 这里参数描述了当前画面渲染时候drawcall的次数

2.cost 包含四个参数 enterframe阶段的开销

引擎updateTransform开销

引擎draw开销

html5中canvas draw的开销

3 fps 当前画面的帧屏

x y scalex和y alpha 透明度 rotation旋转

0x+颜色

bitmap 位图

shape 矢量图

textfield

textinput 文本

shape绘制图形

xxx.mask

hitTestPoint(x, y, true)

return boolean

true是看 与图形是否重合

anchorOffsetX anchorOffsetY位置

sprite 算是一个轻量级的显示对象

添加也就是 a.addChild(b)

删除也就是 a.removeChild(b)

在删除的时候,需要注意一点,如果a不是this,而是一个容器或者其他的,那么我们需要先判断它是否存在,如果存在才能进行删除 *** 作。

深度管理就像是一个队列,但是更像是z-序列号这种东西。

Egret中容器的深度都是从0开始的,当一个显示对象第一个被添加到容器中时,它的深度值为0。这个显示对象也处于容器的最底层。当我们添加第二个显示对象的时候,他的深度值为1,并且在第一个显示对象上方。如果两个显示对象发生了相交,那么我们可以从视觉上看到,第二个显示对象遮挡住第一个显示对象。

当我们想讲某一个显示对象添加到一个指定深度的时候,我们需要使用 addChildAt 方法。这个 *** 作很像排队时插队的想象。

使用 addChildAt 方法也非常的容易,具体使用方法如下:

容器.addChildAt( 显示对象, 深度值 )

交换不同对象深度的功能Egret为开发者提供了两个方法。一个是 swapChildren 方法,另外一个是 swapChildrenAt 方法。

两个方法使用方式少有不同,但效果相同,具体使用方法如下:

容器.swapChildren( 显示对象, 显示对象 )

容器.swapChildrenAt( 深度值, 深度值 )

当我们将一个显示对象添加到显示列表中后,我们还可以手动重设这个显示对象的深度。

实现显示对象深度重置的方法是 setChildIndex ,使用方法如下:

容器.setChildIndex( 显示对象, 新的深度值 )

event dispatcher

egret 事件机制包括4个步骤:

按照上方面顺序 依次执行

注册侦听器使用事件发送者的 addEventListener() 将相应的事件分配给侦听器

Egret中有专门的触摸事件类,使用触摸事件时,默认需要打开显示对象的触摸开关,即将 touchEnabled 设置为 true 。

简单的可以绘制矩形、圆形、直线和曲线,参考这个即可:

访问 shp 的 graphics 属性会返回一个 Graphics 对象, *** 作此对象中的绘图方法即可实现绘图。

调用 beginFill 方法是设置我们矩形的填充颜色,这里我们将填充颜色设置为红色(颜色值0xff0000 ps:0x+color的16进制 ),同时将alpha设置为1,表示完全不透明。

调用 drawRect 方法设置我们矩形的形状,我们绘制了一个 100*200 的矩形。

调用 endFill 方法表示结束当前绘制 *** 作。

具体api参考 egret api

具体api参考 egret api

通常情况下,游戏中或多或少都会带有一些缓动动画。例如界面d出,或者道具飞入飞出的特效等等。在制作这些缓动动画的时候我们仅仅 希望简单的办法实现这种移动或者变形缩放的效果。Egret中的 Tween 缓动动画类就为我们提供了相关的功能。

具体api参考 egret api

egret自身提供了一个timer计时器。

Timer 的使用方法非常简单,我们只需要关心两个属性,三个方法和两个事件即可。

具体api参考 egret api


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11360537.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存