专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Flash

Flex跟Actionscript开发Flash游戏2

发布时间:2011-06-27 19:36:59 文章来源:www.iduyao.cn 采编人员:星星草
Flex和Actionscript开发Flash游戏2

在家上网赚钱更容易

复 制代码首先要注意currentState属性的加入。正如前面说过的,currentState属性定义了当前程序的状态(state)。我们将 currentState设置为MainMenu,表示程序是由MainMenu状态开始的。

我们同样加入了mx:States元素。这个元素定 义了程序所包含的所有子状态。这里我们定义了MainMenu和Game两种状态。在MainMenu状态中,最终用户将看到开始界面。而Game状态表 示游戏本身。

这两个mx:State都拥有name属性。改变currentState属性的值,我们就可以完成状态之间的切换。Game状态包 含了enterState和exitState两个事件。我们可以使用为这两个事件添加响应函数的方法来手工“同步”游戏内部逻辑。你看到,我们使用 EnterGame函数来启动GameObjectManager(之后将提到)实例,并且设置内部标志inGame为true。这个标志在游戏渲染循环 中使用,表示是否需要将游戏画面渲染到屏幕。ExitGame方法简单的将inGame标志设置为false,使用户界面不可见。

记得我提到过 Flex中的各种状态可以进行切换?MainMenu状态展示了其简单的实现方法。mx:AddChild节点用于添加图形界面元素。在这里,我们添加一 个按钮,使用户可以点击进入游戏。当我们离开MainMenu状态时,Flex会自动移除按钮而不需要任何其它代码和设置。

为了将画面渲染到屏 幕,我们添加一个mx:Canvas元素。canvas(更具体的说是它的graphics属性)充当了双缓冲渲染流程中前置缓冲的角色。后置缓冲存在于 GameObjectManager类中。在enterFrame函数中,我们调用GameObjectManager中的enterFrame方法,该 方法允许将画面绘制到后置缓冲区中。每当一帧绘制完毕,我们使用canvas中graphics对象的clear, beginBitmapFill, drawRect和endFill方法将其绘制到canvas上。

GameObjectManager.as package

{

import mx.core.*;

import mx.collections.*;

import flash.display.*;

public class GameObjectManager

{

// double buffer

public var backBuffer:BitmapData;

// colour to use to clear backbuffer with

public var clearColor:uint = 0xFF0043AB;

/// static instance

protected static var instance:GameObjectManager = null;

// the last frame time

protected var lastFrame:Date;

static public function get Instance():GameObjectManager

{

if ( instance == null )

instance = new GameObjectManager();

return instance;

}

public function GameObjectManager()

{

if ( instance != null )

throw new Error( "Only one Singleton instance should be instantiated" );

backBuffer = new BitmapData(Application.application.width, Application.application.height, false);

}

public function startup():void

{

lastFrame = new Date();

}

public function shutdown():void

{

}

public function enterFrame():void

{

// Calculate the time since the last frame

var thisFrame:Date = new Date();

var seconds:Number = (thisFrame.getTime() - lastFrame.getTime())/1000.0;

lastFrame = thisFrame;

drawObjects();

}

protected function drawObjects():void

{

backBuffer.fillRect(backBuffer.rect, clearColor);

}

}

}

复制代码GameObjectManager对象承担着管理各种游戏元素的责任,包括 敌人,玩家和各种背景元素。它也决定着后置缓冲区中哪些元素需要进行绘制。如果你记得前置缓冲器是由canvas元素实现的,最简单的方式就是将 canvas作为一个Application的子节点直接加入。后置缓冲区由BitmapData对象实现,这样我们可以快速直接的操作像素来绘制最终图 像。

clearColor属性设置的颜色表示用于在场景建立好之前,清除后置缓冲区的颜色。最终整个后置缓冲区将会被游戏元素覆写,使得 clearColor完全不相关,但是目前它非常重要,因为它将建立一块最终帧。0xFF0043AB代表深蓝色。前两位代表alpha值,后6位代表红 绿蓝值。

静态的instance属性用于实现单件模式。我们的程序中只需要一个GameObjectManager实例,引用这个静态的属性将保 证我们只会创建一个GameObjectManager实例。单件模式是
程序设计范例中非常常见,尽管Actionscript不支持protected 构造函数,但是单件模式依然十分有用(一旦你看到instance属性,这个类很可能就是按照单件模式设计的)。

lastFrame属性存储了最 后帧渲染完毕的时间。跟踪这个时间,我们就可以知道最后一帧于当前帧之间的时间间隔,使得我们可以以此更新游戏元素。尽管目前我们没有任何游戏元素,在 enterFrame方法中,我们计算了帧于帧之间的时间。lastFrame时间就是在调用startup时被重置。这是由于当整个游戏不在Game state状态下时,GameObjectManager并不更新。如果我们不重置lastFrame,下一关的第一帧将等于玩家在关间菜单所花的时间。 最好要避免玩家在第一帧时终止退出。

所以,我们做了些什么呢?为了实现各种状态,我们创建了主菜单画面,可以使用按钮进入游戏。游戏中我们实现了 双缓冲模型,可以绘制一个蓝色背景。接下来,我们就会开始做有趣的事情了,在屏幕上绘制一些东西。

在家上网赚钱更容易

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: