vim:shiftwidth=8:foldmethod=indent:autoindent: . AS3 框架研究 . hproof, 2011.3.27 . 客户端开发方案确定 . 依据 . 比较各开源引擎, 找到合适的框架 . 列出 优缺点, 有分析数据更好 . 游戏框架 . BulkLoader -- 加载器, 绝对好使 . puremvc -- MVC 主框架, 也可以经过改良 . TweenLite -- 缓动 . filters -- 各种滤镜效果 . aswing/bit101/fireice . scp -- 游戏引擎 . 编辑器 . 角色编辑器 . avatar, 动作 . 技能编辑器 . 魔法/技能 攻击效果 . 场景编辑器 . 地图编辑 . 场景物体编辑 . 障碍物编辑 . 引擎内容 . 界面库 . aswing . fireice . lovefox . 2D游戏引擎 . scp . 应用层 . pureMVC . 编辑器: 场景, 游戏(所有场景), 人物/动物/NPC, 效果 . aswing . air . 编辑器职责: 客户端: 地图场景, 人物/技能/动作/特效(动画/声音), 事件关联 服务端: AI脚本, 任务, 道具装备, 技能, 等... 其它: UI, 声音 人物: 技能 - 动作 动作: 身影 MVC 模型, 一套数据, 多个显示(人物)模式 . 如何方便在 FLASH 中设计界面? . FLASH 中统一设计, 不涉及具体的实现. 后期用 武侠/ASWING 等都可以兼容 . 测试器 . 测试地图/效果/人物 等简单数据的软件 . 其它 . 发布器, 压缩/加密 . UI 资源确定 . XML + SWF 方式, XML 中描述各皮肤的定义 . 界面方案 . aswing . 研究性能花费 . 比较 flex 嵌入图片, 和 flash swf 压缩的方案 . 武侠方案(flash 中设计界面) . 检查是否支持 9grid 缩放 // 不支持 . 区分 基础控件, 应用层空间 . swf 中不包含任何文字, 方便多语言版本 . 代码中支持简单布局管理(如果不使用 aswing) . 折中方案 . 关键: 9切片缩放 . flash CS3/CS4 不支持 -- 不支持! . flash cs5 待验证 -- 不支持! . fb4 是支持的 -- 如果仅 FB4 支持, 则界面可视化设计是个问题 . SWF . 皮肤库: 包含 按钮/滚动条/位图 等 原始图片, 用元件名标识 . 控件库: 使用各皮肤, 组织而成的控件, 定义了各控件的样子 . 界面库: 使用各控件/皮肤 而成的界面. 支持直接使用, 或者导出XML . 要求: 不包含任何文字, 支持9切片缩放 // 待验证9切片, 可能需要 CS5 支持 . 代码 . 加载皮肤库 (皮肤/控件) . 以 XML/SWF/代码 方式建立界面 . 依test_bit101();赖于 aswing 或者 其它/自定义 UI 引擎 . 自定义 ASWING, 精简版. 参照其结构/思想 . 必须的 . 分散图片资源, 皮肤库 . 代码部分, 可以用 aswing, libraui, bit101. 但武侠中方便在 FLASH 中设计 UI, 然后导出为 XML/SWF . 导出 XML, 代码中根据 XML 来建立 . 类似 CheckBox 只需要定义 各背景图片, 实际的效果, 无法在 FLASH 中看到??? . 综合考虑 . 提取现有库 . 使用开源库 . 利用 librui 增加自己的皮肤 ??? . 皮肤类, 可以从 SWF 中获取皮肤定义 . 基本类库 . 最新方案 . wuxia ui . 利用武侠现有 uires 进行改进, 补充 . assert.swf 包含基本材质 . 基本材质(位图) . 按钮图片 . 面板背景 . 底图花纹 . 标题栏 . 复合元件 -- 每个不同的风格, 独立一个元件定义 . 按钮: 各种状态 . 列表: 列表头, 选择框, 背景色(多套) . ui.swf 中包含各界面定义 . 从 assert.swf 中引入元件进行布局 . 用 JSFL 导出为 XML . skin . layout . component . 参考 aswing . component . component . Container . updateUI() . JButton // M, C . JLable . JScrollBar . ui . ButonUI // V . layout . . manager . UIManager . 加载 asset . 解析 xml . 建立各 component . DragDropManager . _floatLayer . TipsManager . _floatLayer . UIRes . 提供对 Containter 的工具类 . 开发日程 共 61 + 20 = 81 天, 3 个月开发 + 1个月机动 = 4个月框架时间 . 开发计划制定 1 . 前期准备 3 . 第一里程碑 - 引擎开发 80 . UI 界面引擎 19 . 方案分析确定 3 . FLASH 规范制定 1 . 管理器实现 3 . 控件设计 5 . JSFL 插件 2 . 测试 5 . 2D 游戏引擎 28 . 技术分析/验证 3 . 设计框架 3 . 资源策略 2 . 地图系统 5 . 人物系统 5 . 效果系统 5 . 测试 5 . 编辑器开发 18 . 准备/熟悉 3 . 角色 5 . 技能 5 . 效果 5 . 数据准备 5 . 测试/机动 10 . 第二里程碑 - 基本功能 56 . 资源准备 5 . 人物资源 . 效果资源 . 界面资源 . 数据 . 角色系统 3 . 创建/选择 . 地图系统 3 . 地图漫游 . 主界面 2 . 角色属性 . 聊天系统 5 . 包裹系统 3 . 整理/拆分/合并/移动/丢弃 . 换装系统 5 . 武器/衣服/帽子 . 技能系统 5 . 学习/升级/装备 . 技能栏 . 战斗系统 15 . PVP/PVE . 技能 使用/特效 . BUFF 效果 . 补给品使用 . 测试 10 . 第三里程碑 - 生活系统 . 队伍 . 好友 . 商店 . 仓库 . 拍卖行/集市 . 邮件 . 生活技能 . 采集/烹饪/打造/附魔/... . 宠物 . 成长 . 挂机 . 修炼 . 情侣 . 第四里程碑 - 大型活动 . 战场 . 副本 . 城战 . 竞技场 . 战队 . 跨服战场 . 功能需求 . 界面库 . 参照 aswing/傲剑/武侠/仙侠 的实现, 尽量复用现有代码 . 建立 皮肤 作为最小单元, 方便共享 . 界面由 FLASH 设计, 导出 XML 配置信息 . 支持 皮肤/布局, 支持动态尺寸调整 . 强大的界面功能, 可提高后期开发效率 . tips 功能, 支持..子控件的提取 . 游戏引擎 . 参照 仙境/傲剑 . 使用位图复制绘制 . 地图系统先按照 傲剑, 使用整张场景背景图 . 记录 资源加载, 游戏进入 的详细日志 . 编辑器/数据格式 . 时间跨度很长, 需先确定数据, 并在后期不断调整 . 加载流程 . GameLoader . 进度条, 载入 GameLib . GameLib . 各共享库, 如: aswing, greensocket, draw . 载入各 gameUI . GameUI . 应用层各 gameUI . 支持 立即/延时加载 . resources . 零散资源, 如 图标/地图/avatar . 功能分布 . GameLoader -- 加载器. 加密/解密 . Game -- 干嘛用的? . CodeLib -- 开源库 . ui-lib . game-lib . TweenMax . pureMVC . Config -- 游戏数据 . skilleffect . goodmodel . goodsdc . hiddenweapons . horsemodel + pet, horse . sceneMonster, trans . monstermodel . npc, trans . skii . task . skin -- 界面数据 . ui . loginui . sceneRes . res/data . avatar . iconitp85KnLnlmo . map . maps . mc . sound . uiRes . 角色创建界面时的零散图片 . RSL . 动态加载库 . 过程:LayoutManager . 编译好 swc . 新建一个 swf, 设置项目属性, 导入 swc . 该 swf 可以做为 dll 被加载了. -- 就是把 swc 转换为 swf . 使用方, 链接目标 swf, 选择外部链接 . 界面框架比较 . 武侠库 . 最简单的, 最熟悉 . 使用 FLASH 组件? . aswing . 较复杂, 美工可能不太会使用 . 但确实很强大, 如何与 FLASH 设计人员结合是个问题 . 设一个桥接器? 把 SWF 皮肤转换为 LAF, 然后根据 XML 来自动建立界面? . 可以直接在 界面设计器 中设计界面了.. . 按钮 . . libraui . 包含基本/简单的控件, 默认使用 graphics 画图做背景 . 自定义绘制 . IButtonState -- 实现几个状态的切换 . 需要自己实现 图片 绘制 . 功能太少, 缺少 LayoutManager, 离实用还需要增加很多自定义组件. . 代码可能有BUG . bit101 . 非常精简, 里面的绘图都是直接用 graphics 完成的. . 不支持皮肤, 除非改造 . 仅用作学习, 不适合开发. . lovefox . 比较乱, 部分从 bit101 中扩展, 另外一些基于特定游戏 . 除了界面, 还包含 2D引擎/加载 等多种引擎 . fireice . 评价 . 复杂度中等 . 支持皮肤 . 非开源, 代码不够美观 . 内容 . 有些是 局限于 傲剑本身的, 例如 FAlert . 资源管理 . FBitmapDataBufferManager . getBD 管理位图数据 . 通过 getDefinitionByName 得到类定义 . Tools . 简单滤镜 . get9GridBitmpByName 获取9切片位图 . FSimpleButton . set skin 中, 根据 XML 定义, 从资源加载位图 . 按钮 . FBaseSimpleButton . 通过设置各状态图片的 visible 切换状态 . 皮肤 . upImage . overImage . downImageitp85KnLnlmo . upImage . FCheckBox . 2个状态图片, 设置 visible 来切换 . FPanel . 设置 skin . 设置每一个子的 skin . FVScorllBar . set skin . upButton, slipButton, bottomButton . reSize . 皮肤 . 配置信息, 通过 SkinInit.getSkinConfigByName 获取 . 背景 backgroundImage . 包含: x, y, width, height, name=元件名 . set skin() 设置皮肤 . 皮肤的格式是固定的 . Tools . 包含各种效果滤镜 . 布局 . LayoutManager . 傲剑代码分析 . zcp . common . LNode . _id, _data, _pre, _next -- 节点, 连接关系 . CacheUnit > LNode . dispose() -- 删除 data 代表的位图资源, 如果是 doc, 递归删除子孩子 . Cache -- 按 最久未使用 淘汰的简单缓存 . CDFace -- 技能/道具 上面的 CD 雷达图 . CodeMixer -- 代码混合, 根据 Stage.a/b/c 来加密/解密 代码 . ZZip -- 把 ZIP 中的文件入读到数组中, [文件名-内容] . 4月 demo . 5月 demo . 关键技术 . 绘图管理 . 脏矩形算法 . 条件: 当重绘区范围很小时 . 卡马克卷轴 . 条件: 当重绘区范围很小时 . 注意: . 当重绘区很多时, 重新绘制全部是最快的 . 重回全部, 可兼容硬件加速的情况 . 独立出来, 对上层透明. 将来可比较不同算法的差异 . 地图层次维护 . u8 标志位掩码 . 人物显示 . 尝试渲染傲剑中的资源 . 内容 . SceneDemo 组织结构调整 . 资源异步加载机制 // wait, 先分析 地图背景/对象 的异步加载机制 . 分组管理 . 跟踪进度 . 开始/暂停/结束 下载 . 下载后的处理 . 加载 多个 资源列表 . loadAll( list, callback ) . 完成后, 调用某个函数 . 继续加载 . 取消加载 . 看一下 bulkloader ? . 傲剑分析 . 地图背景 . 加载过程 . ThreadData -- 以队列方式, 依次加载每个背景图 . LoadData -- 加载数据, 管理重试次数 . 加载完成后, 保存到图片缓存, 并添加为自己的孩子 . 渲染过程 . 各 MapZone.showContainer 被添加为 Layer(自己) 的孩子, 因此直接显示背景 . 地图移动式, 超出视野的图片被删除(有误差范围) . 地图对象 . 加载过程 . . 渲染过程 . 脏矩形 . 建立和场景一样尺寸的 对象层 位图 . 效果对象 . 预加载机制 . 地图/人物 完成加载之前, 显示虚拟图片 . 绘图管理 . 方案: . 带脏矩形 . 全屏绘制 -- 优先选择! 因为 AS 的计算效率低下, 重新绘制可能是更好的. . 兼容设计 . 收集所有绘图元素, 然后一次性绘制 . 后期, 看效果, 选择 全屏绘制/脏矩形绘制 . 方便启用 硬件加速绘制 . 绘图元素 . 变更计数器 . 绘图内容, 标志 . 矩形范围 . 上一次矩形范围, 通过唯一ID, 由管理器维护 . 重绘原则 . 如果有变更, 则全部绘制 . 否则, 取所有重绘区, 与自己相交, 部分重绘 -- 这里尽量减少矩形的个数 . 接口 . updateRenderQueue . 实现步骤 . 地图绘制 . 人物绘制 . 界面管理器 . FLEX 中的组件 . styleChanged . createChildren -- 每当组件被添加到父容器中时, 由 flex 自动调用. . commitProperties -- 修改组件属性时, 当 invalidateProperties/addChild 时由 flex自动调用 . measure -- 设置组件默认尺寸, 当 invalidateSize/addChild 时由 flex 自动调用 . layoutChrome -- 设置组件边框区域, 当 invalidateDisplayList . 此为更新边框区域 . updateDisplayList -- 由 样式改变 导致的外观修改, 非整个组件外观. 类似 PAINT 消息. 此为更新内容区域 . setActualSize -- 设置尺寸 . move -- 设置位置 . 绘制 皮肤/样式/边框, 或用 Graphics 绘制 . 布局管理 -- 插件形式 . HBOX/VBOX . 设置百分比尺寸 . 固定尺寸: 无法被外部修改, 内部可随时调整 . 百分比: 可任意调整 . 默认尺寸 . 方式 . 已知父容器尺寸, 设置子控件尺寸 . 设置各子控件的百分比尺寸 . 重新排列布局 . 已知子控件尺寸, 设置父容器尺寸 . 计算子控件的最小尺寸 . 管理类 . 总管 -- UIManager . 普通窗口/对话框 -- StateManager . 菜单 -- MenuManager . ToolTips -- TipsManager . 拖放 -- DragDropManager . 鼠标 -- MouseManager . 其它 -- LayoutManager . 资源组织 . res . data . avatar . iconitp85KnLnlmo . map . maps . mc . sound . uiRes . 角色创建界面时的零散图片 . 待办内容 . 数据同步机制 . 资源加载机制 . 地图背景, 角色图片 的临时加载, 及加载动画 . 配置信息需要提前加载, 无法临时加载 . 地图绘制 . 角色换装机制 . 动画系统 . 需求 . 兼容不同外观格式(不同部位) . 兼容 2D/3D . 3D 实现方案 . 角色控制器 . 武器的收放 . 移动/跳高 . Entity/SubEntity . Mesh 网格的实例 . 可附属其它对象: 武器/效果/ . Mesh/SubMesh . 网格模型, 具体数据 . 动画(Animation), 单一动画(单动作) . 包含 多方向 的动画帧序列 . 单一动作 . 声音(Sound) . 独立声音 . 动画模板(Animation Template) . 用于编辑器检索, 规则设定, 约束, 常量设定 . ID/类型/动作/部位 . 在不同状态/方向时, 各部位的绘制先后顺序/层次 . 8方向绘制次序 [0] = 1,2,3,4,5,6,7,8 [1] = 2,3,4,5,2,3,4,1 ... [7] = 1,2,3,4,5,6,7,3 . 人物A: . 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡 . 部位: 头, 上身, 下身, 武器, 披风 . 人物B: . 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡, 骑乘站立, 骑乘走, 骑乘跑, 骑乘攻击, 骑乘死亡 . 部位: 身体, 武器 . 效果: . 动作: 开始, 循环, 结束 . 部位: 中心(默认), 溅射 . 动作外观(ActionFace), 动画集合, 单一动画(多动作), 复合动画, 基本动画, AnimSet . 对应一个部位 . 角色不同的部位, 可任意搭配. 因此以部位为单位 . 动画模板ID . 该模板下, 每个动作的的动画定义: 动画ID, 循环标志(Stop/Loop/Hide) . 所属部位 . 功能 . 定义在不同 动作 下的动画资源 . 每一个项, 对应一个独立的动画ID . 部位: 头, 上身, 下身, 武器, 影子 . 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡 . 层次: Y值, priority, 和部位相关 . 部位外观 . 所属部位: 头, 上身, 下身, 武器, 影子 . 动作: 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡 . 效果外观 . 开始/循环/结束 . 发射方式: 由技能定义 . 定义不同 动作 时, 动画定义: . 动作ID, 动画ID . 模板ID: 人物A . 部位: 武器 . 动作定义 . 站立, ani001, . 走, ani002 . 跑, . 对象外观(ObjectFace), 外观定义, 角色动画, AnimMatrix . ID . 动画模板 . 每个部位的部位外观ID . 对于角色, 这些外观ID可自定义, 以实现换装 . 例如: 头部 ani001 上身 ani002 下身 ani003 . avatar 对象框架 . 游戏对象(GameObject) . 外观ID列表, 记录在这里 . 外观ID: 不同部位的外观ID列表 . 不同角色, 拥有不同的外观列表 . 主角, 拥有最详细的外观列表 . NPC, 拥有最少, 比如只有1个外观ID . 外观ID 有默认值, 并且可自定义 . 玩家可换装 . 默认外观: 身体400 . 默认为裸体 . 其它外观, 由装备确定 . 每个部位, 只能有1个显示动画 . 当前值 = 装备值 || 默认值 . 其它信息 . 角色控制器 . 包含: 角色, NPC, 装饰, 爆炸, 发射物 . 例如: ID NAME AnimationSetId 001 老江湖 003 . 角色(Avatar) > 游戏对象 . AI 状态 . 坐标/动作/方向 . 状态 . 独立/骑乘 . 和具体资源独立, 外观ID . 换装/自定义部位?? . 重定义部位的定tipsLayer义 . 这些部位动画, 都必须有各自的 动作/状态 下的动画 . 由具体装备的道具决定 . 道具 -> 装备后的外观ID . 搜索所有已穿戴的装备, 得到装备的外观ID列表, 每个部位同时只有1个 . 状态, 动作 . 关联 . 装备: 帽子/上衣/裤子/鞋/护腿/护腕/手套/披风/项链/戒指/盾牌/武器(主手/副手/射击) ID . 关联 . 类似 ObjectState, 只记录状态, 不维护具体的动作? . 例如 移动+攻击 是合法的, 对于不同的外观, 显示为不同的效果 . 效果(Effect) > 游戏对象 . 玩家(Player) . 玩家可以控制某个角色 . 控制自己 . 控制NPC, 怪物 . 杂项 . 动画定义 . 资源 . 播放时间 ( 动画播放时间, 服务端CD) . 部位ID . 帽子/躯体/披风/武器 等 . 对象组合 . 坐骑/主人 . 中心点对齐+偏移 . 动作: . 站立, 走, 跑, 跳跃, 攻击1, 攻击2, 受伤, 死亡 . 部位: . 身体(头/上身/下身), 武器 . 特殊 . NPC, 只有5个动作(站立/跑/攻击/被攻击/死亡) . NPC, 部位很少, 身体/武器 是一个整体, 一个图片资源 . 关联 . 坐骑 . 以主对象(人物)为主要控制, 次对象(坐骑)为次要 . 例如走路, 控制的是人, 而坐骑是依据人的当前状态(走路)来显示自己的状态 . 关系: 骑乘者, 被骑乘 . 内容: . 骑乘者骑上坐骑后, 获得坐骑BUFF, 提高运动速度 . 移动时, 是移动骑乘者. 被骑乘对象的坐标, 跟随着移动者, 并且在解除骑乘关系时更新坐标 . 2选1的选择, 随便选哪个都一样. . 如果骑乘者有其它BUFF, 如 马鞭道具, 可提高移动速度. 则使用 骑乘者 更合理. . 多人骑乘 . 以 主骑乘者 为主, 坐骑/次骑乘者 为次 . 战斗/攻击 . 施法阶段, 可被打断 . 攻击阶段, 计算命中率, 立即扣血? -- 服务端是预先计算火球飞行时间, 然后设置定时器后扣血 . 状态 . 独立 . 骑乘 . 角色外观定义/外观编辑器 . 角色数据: . 发射物 . 效果 . 功能的需求 . 骑乘/关联 . 坐骑可以坐多个人 . 以 主骑乘者 为主, 次骑乘者/被骑乘者 为次 . 骑乘后, 拥有骑乘技能? . 例如: WOW 北极试炼中, 战马的破甲/冲刺 . 方案A: // cancel . 技能属于角色 . 技能有要求: 骑乘状态 . 方案B: . 技能属于坐骑 . 骑乘后, 把新技能添加到 特殊技能栏 . 要求: . 特殊技能栏 . 骑乘时, 添加特殊技能 . 附属动画 . 效果对象, 附属在角色身上 . Q: 是否有独立的坐标? . 例如 战士冲锋时, 留在身后的带状光芒 . 变身 . 角色可以变身/隐身, 控制NPC/怪物 . 相同游戏对象, 不同外观: 外观A -> 角色A; 外观B -> 角色A . 角色 -> mat1, mat2, mat3 在多个外观中切换, 这种切换没有过渡动画, 是立即完成的. 各 mat 互相独立 . 角色变身后, 技能改变 . 保存角色的 1# 技能栏 . 改变角色外观 . 把 怪物技能 放到 1# 技能栏中 . 变身结合后, 恢复 1# 技能栏 . 要求: . 单角色 多外观, 并可自由切换 . 切换时, 修改特殊技能 . 装备穿戴 . 搜索所有已穿戴的装备, 得到装备的外观ID列表, 每个部位同时只有1个 . 角色 . 外观ID列表 . 状态 . 中心点 . 角色中心点 . 关联对象对齐方式 中心点 . 方案: . 每个动画, 都是基于 "虚拟中心点" 的 . 默认时 . 虚拟中心点 位于角色动画的中心位置 // 傲视群雄 中需要修改 . 把各部位/武器 直接对齐中心, 即可紧密连接 . SceneObject 存在必要性 . 不需要 . 数据完全保存在 数据库, 是否还有必要存在 SceneObject ?? . 需要 . 数据库中, 没有发射对象/静态对象 . 发射时间(开始/结束), 坐标(开始/结束), 目标对象ID, 发射方式 . 变身时的技能 . 新动作: 变形进入, 变形出去 . 粒子系统 . 武器/装备 上的FM特效 . 性能 依赖于 FP11 的 molehill . molehill 最新动态如何, 是否兼容其它浏览器? // 最近没什么变化 . 暂缓: 以 目前FP10 为基础, 以后再添加特效. 否则, 连这个都无法实现了 . 角色系统 . 绘图层次结构 . 鼠标命中 . 技能 . 所有的动作, 都是技能, 包含普通攻击 . effect_id 表示了播放技能时, 效果的实现 . action_id 表示动作ID: attack, magic . 其它数据 . 隐藏时间, 最大追踪距离 . 释放技能 . 数据: 技能ID, 主动方, 被动方/位置 . 播放对应的动作 . 建立对应的效果动画 . 1动作: 武器上的光芒, 1动作 . 2动作: 雷电术, 含施法/命中 2个动作 . 3动作: 火球术, 含施法/追踪/命中 3个动作 . 技能效果 . 发射物对象 . 开始坐标, 结束坐标, 速度 . 发射方式: 立即到达, 直线, 追踪/导弹 // 效果定义 . 动画: 默认有多个方向, 仅对火球术特殊处理, 需要旋转 . 模拟游戏世界 . AI 决策, 随机移动 . 和游戏数据的关联 . 游戏对象, 保存在内存中, 而不是屏幕上? . 游戏对象, 只包含纯游戏数据, 不包含 动作/开始时间 等? . 场景(渲染器) . 地图信息 . 尺寸 . 名字 . 障碍, 寻径 . 遮挡 . 当前视区, 摄像机 . 对象列表 . 当前动作, 技能, 状态维护 . 层次结构 . 背景, 由地图完成? . 对象 . 信息 . 渲染器 . 精灵工厂 . 可建立 装饰物/对象/效果 . 外观, 可随意被替换, 或修改部位设置 . 必要性 . 数据保存在 data, 渲染时由 SceneRender 实现. 还有必要存在 精灵对象 吗? . 数据分析 . 对象 . 坐标 . 标志: 选中 . 动作, 开始时间 . 状态, . 方向 . 移动, 移动同步时间 . A* 路径 . 效果 . 坐标, 开始时间, 播放时间 . 坐标2 . 装饰物 . 坐标, 装饰物ID . 开发过程 . 显示对象 . 概述: . 负责从 游戏数据 到渲染通道 的转换 . 可以建立临时数据, 保存到 游戏数据 上(游戏数据被释放时, 通知显示对象) . 渲染过程: 便利所有的游戏数据, 为它建立临时数据, 得到渲染通道 . 纳入 render 包? . 显示对象:游戏对象 = N:1 // GameObject . 场景 ::= 显示对象管理器 // SceneObject . 效果对象设计 . 火球飞行是对方向旋转 // ok . 动作的同步问题 . 在每次角色播放动作(攻击/魔法)时, 同时添加效果动画 // 需要角色处理逻辑 . 效果动画自己负责销毁 . 方便的建立方式 . 利用 "池" 管理器, 只需提供入口参数, 就能建立动画 . 动画属性设置 . 利用 <matrix> 设置? <face> . 角色对象 . Q: 如果 显示对象 只是渲染方法, 那场景中保存什么? . 场景中保存显示对象? 对应于整理后的游戏数据, 如, 把 X/Y/尺寸 合并为 RECT ?? . 单个游戏数据, 可对应多个显示对象, 如发射群攻魔法 . Q: 显示对象 == 游戏对象 ?? . 处理和游戏对象的关联. . 合并2者??? . 某些游戏对象, 不需要显示对象?? . 不需要立即建立显示对象 . 或者, 有没有显示对象不重要. 因为 游戏数据 已经包含完整信息! . Q: 游戏对象, 应该有一种类继承的层次关系. 但游戏数据是独立的, 如何区分三者: 显示对象/游戏对象/游戏数据? . Q: 更新过程 // ok . 更新游戏数据?? 有必要?? . 逻辑处理, 都在服务端, ..客户端只是显示数据 . 更新 显示对象, 负责 游戏数据 的代理 . Q: 绘制过程 // ok . 绘制 显示对象 . Q: 游戏数据 包含很多信息, 是否还需要 显示/场景对象 ?? // ok . 游戏数据 不一定符合要求 . Q: 是否把 逻辑处理 独立出来?? . 建立效果动画 . 建立子对象 . 添加一个对象 . 删除一个对象 . 网络消息处理函数.... . 显示/场景对象 . 对 游戏数据 进行维护, 依赖 游戏数据 结构 . 命令控制 . 在场景内检索对象, 然后调用控制函数 . 更新周期 . 更新 游戏数据 中角色的坐标 . 绘制周期 . 根据坐标绘制动画 . 数据同步 . 新增对象, 首先建立场景对象, 然后请求对象详细数据 . 无法做成通用类库, 先实现再说!!! . 角色更新 . 在网络游戏中, AI 决策由服务端完成, 因此, 不需要做 AI . 一般更新 . 移动位置 . 更新状态 . 显示驱动? . 不可见的对象, 不需要更新 . 玩家输入 . 本地验证 . 发送到服务器 . 服务端消息 . 移动 . 更新到角色数据上 -- 非显示对象, 而是纯数据? . 技能(预备/发射) . 预备时间 读条 . 发射火球术 . 持续治疗 . 与地图系统的结合 . 界面调整 . xml 中支持 refname . 建立另一个控件的实例 . 如果发现有 refname 关键字, 则先建立它的实例(提供新的 style) . Q: 用 Panel 还是其它名字? // 任意 Container 都可以 . Q: style 是否封装一下? // NO . Q: class 类似继承? // YES . Q: id/name 混淆 <style name="skin001"> <style> <Panel name="p002" > <instance id="001" class="p001" style="002"/> <instance id="002" class="p001" style="002"/> </Panel>
相关文章:
- 从RTS游戏看游戏开发 2022-01-23
- Lua游戏开发----游戏搭建 2021-08-29
- 游戏开发入门(二)游戏开发概述 2021-08-05
- [游戏开发]iOS 游戏开发教程资源 2022-01-20
- 安卓游戏源码-android游戏源码开发-android游戏开发 2021-11-21
- unity游戏开发 发布android 游戏 (一) 2022-12-23