游戏开发

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>
posted @ 2012-07-14 09:22  谜一样的Code  阅读(224)  评论(0)    收藏  举报