360ITO技术社区
  • 首页
  • 文章
  • 快讯
  • 讨论
  • 问答
  • 小贴士
  • 代码块
  • 开源
  • 老论坛
登录 | 注册

360ITO技术社区  > 文章

订阅文章

从零开始学社交游戏开发(十)

smallghost 发布于 5年前 ( comment 0条评论  查看:4102  收藏:0 )

继续上一节的教程,今天把游戏场景上的单元都显示上去。
GameSceneItemPool.registerClass方法:
public static function registerClass():void {
    FClass[TVGDefine.ITEM_CAO_NI_MA] = TGrassMudHorse;
    FClass[TVGDefine.ITEM_SHEN_MA] = TGodHorse;
    FClass[TVGDefine.ITEM_BAO_SHI] = TGemObj;
    FClass[TVGDefine.ITEM_DA_BAO_SHI] = TGemObj;
    FClass[TVGDefine.ITEM_BOMB] = TBombObj;
    FClass[TVGDefine.ITEM_BOMB2] = TBombObj;
    FClass[TVGDefine.ITEM_CHEST] = TChestObj;
    FClass[TVGDefine.ITEM_ZA_CAO] = TWeedObj;
    FClass[TVGDefine.ITEM_SHEN_CAO] = TWeedObj;
    FClass[TVGDefine.ITEM_XIE_CAO] = TWeedObj;
    FClass[TVGDefine.ITEM_YAN_SHI] = TRockObj;
    FClass[TVGDefine.ITEM_GUAI_WU] = TGuaiWuObj;
    FClass[TVGDefine.ITEM_GUAI_WU2] = TGuaiWuObj;
    FClass[TVGDefine.ITEM_GUAI_WU3] = TGuaiWuObj;
    FClass[TVGDefine.ITEM_VILLAGER] = TVillagerObj;
    FClass[TVGDefine.ITEM_ARROW] = TArrowObj;
}

在场景管理(SceneManager)的构造函数中调用GameSceneItemPool.registerClass方法注册单元,如下图:

缓冲单元

在单元退出场景的时候可以把他先扔到缓冲区中,在下次需要的时候直接从缓冲区中取出来。好处就是用玩家的内存换取执行效率。
单元回收方法:
public static function recycling(arg_class:Class, obj:SceneObj):void {
    if (FObjectDic[arg_class] == null) {
        FObjectDic[arg_class] = new Vector.<SceneObj>();
    }
    FObjectDic[arg_class].push(obj);
}
 

单元构建

在构建一个单元时,我们先需要找到这个单元对应的类,如果这个单元没有在注册表中注册过,我们就按基础单元创建,否则就按对应的单元类构建单元,代码如下:
var objClass:Class;
if (FClass[arg_type] == null) {
    // 按基础类构建单元
    objClass = UnitObj;
} else {
    // 按特殊类构建单元
    objClass = FClass[arg_type];
}

在实例化单元的时候还需要先到单元缓冲中去看看有没有被回收的单元,缓冲区中有相同类型的单元我们就从缓冲区中取出用就可以了。代码如下:
if (FObjectDic[objClass] == null) {
    FObjectDic[objClass] = new Vector.<SceneObj>();
}
var objects:Vector.<SceneObj> = FObjectDic[objClass];
var poolTotal:int = objects.length;
var result:ISceneObj;
//  缓冲区中已经有了,就弹出第一个
if (poolTotal > 0) {
    result = objects.pop();
    result.setType(arg_type);
}
//  需要重新创建
else {
    result = new objClass(objClass, arg_type) as SceneObj;
}

场景更新

单元都准备好了,是时候在场景里显示了,首先先获取到地图单元数据,代码如下:
var mapData:Dictionary = MapData.Instance.getData();
var items:Array = DictionaryUtil.getKeys(mapData);

场景单元描述数据都在items里,在搞一个循环把每个单元放到场景的各个位置上就可以了,基本流程:
1、通过GameSceneItemPool创建对应的单元对象
2、设置单元坐标
3、加到游戏场景
代码如下:
for each(id in items) {
    obj = GameSceneItemPool.create(mapData[id].FType);
    key = MapData.coordToKey(mapData[id].FGridX, mapData[id].FGridY);
    obj.setGridCoordinate(mapData[id].FGridX, mapData[id].FGridY, true);
    obj.addTo(this);
    obj.setOrder(mapData[id].FOrder);
    obj.setShadows(mapData[id].FShadows);
    obj.setFlash(mapData[id].FFlash);
    FObjects[key] = obj;
}

 
运行后的效果图:



接下来我们把UI部分做一下。

神力面板

在ui包中创建神力面板,如下图:



神力面板中主要有下面几个元素:
1、神力恢复时间进度条
2、神力值显示标签
在构造神力面板的时候,主要需要完成工作有 皮肤设置 和 初始化恢复时间进度条。
1、皮肤初始化
代码:
setSkin(JFDynamicResManager.getInstance().displayObjectByName(1,"mc0408"));
从1号美术资源中获取名称为"mc0408"的资源,如下图:



2、创建恢复时间进度条
FShenLiUpdateProgressbar = new ProgressBar();
FShenLiUpdateProgressbar.setContentSkin(
JFDynamicResManager.getInstance().displayObjectByName(1, "res0403"), new Rectangle(0, 0, 121, 22));
FShenLiUpdateProgressbar.x = 37;
FShenLiUpdateProgressbar.y = 28;
FShenLiUpdateProgressbar.visible = false;
FShenLiUpdateProgressbar.mouseEnabled = false;
addChild(FShenLiUpdateProgressbar);
 
通过UIManager来创建神力面板,如下图:



神力面板就创建好了,鼠标移到上面还能看到很炫的提示条,如下图:


在创建神力面板的代码中可以看到toolTipType、toolTip和toolTipDirection3个属性的设置,这3个就是控制提示条的风格、提示内容和方向(支持左右上下4个方向)。
在onSysEnterComplete方法中加入UI更新(UIManager.Instance.onUpdate()),如下图:



UIManager.onUpdate方法中更新神力相关UI,代码如下:
public function onUpdate():void {
    onUpdateShiLi();
}
public function onUpdateShiLi():void {
    // 更新神力
    FShenLiPanel.setCurValue(PlayerData.Instance.sheng_li);
    FShenLiPanel.setShenLiUpdateTime(PlayerData.Instance.FShenLiUpdateTime);
}

好今天先到这里,8888
下载代码猛点这里

从零开始学社交游戏开发(五)

从零开始学社交游戏开发(六)

从零开始学社交游戏开发(七)

从零开始学社交游戏开发(八)

从零开始学社交游戏开发(九)

 


0 有用 0 无用
本站原创,欢迎转载;尊重他人劳动,转载时保留以下信息:
本文转自:360ITO技术社区
原文标题:从零开始学社交游戏开发(十)
原文地址:http://www.360ito.com/article/636.html
360ito.com
编程 社交游戏 游戏 Flash

共有0个评论 我要评论»

按时间排 按有用数排 按支持数排

网友回复/评论仅代表其个人看法,并不表明本社区同意其观点或证实其描述。

请尽量让自己的回复能够对别人有帮助

1.不欢迎无意义的回复/评论和类似“顶”、“沙发”之类没有营养的文字
如果只是想简单的表个态,请点 有用无用支持反对 等按钮
2.发言之前请再仔细看一遍文章,或许是您遗漏、误解了,理性讨论、切莫乱喷
3.严禁发布违法、违规的信息,请勿到处招贴广告、发布软文;
4.如果您发现自己的回复/评论不见了,请参考以上3条
5.不停制造违规、垃圾信息的,账户将被禁止

热门标签

  • android 20
  • Flash 15
  • Linux 12
  • 游戏 12
  • Python 11
  • 工作笔记 11
  • 社交游戏 7
  • 自动化测试 5
  • delphi 5
  • jquery 5
  • git 4
  • Centos 4
  • 编程 4
  • 谷歌 4
  • 开发者 3
  • C/C++ 3
  • JavaScript 3
  • HTML5 2
  • uWSGI 2
  • 网站 2

相关文章

周热点

月热点

Copyright ©2011-2012 360ITO技术社区 All Rights Reserved. | 关于 | 联系我们 | 杭州精创信息技术有限公司 浙ICP备09019653号-26|
▲