cube开发日志

2010年8月-12月
1,mysql数据库
2,网络消息加密
3,设备丢失找回
4,登陆、记录上次登录的账号、登录后显示同场景玩家
5,聊天
6,地图 - 角色标志
7,移动、缩放、旋转边界限于自己的区(旋转可能粘到边界上,可通过缩小、移动离开边界)
8,编辑地形限于自己的区
9,去另一个场景
10,绘制 catching block,右键可取消
11,商城,买卖block、entity
12,炸弹 - 放置、检查、拆除
13,贴纸条
14,商城搜索、热搜词
15,制作女角色(带走路动作)
16,界面显示超出边界时自动调整
17,界面显示信息:名字、钱、地图、坐标
18,自动更新
19,商城、聊天框随窗口移动
20,系统消息为红色
21,贴纸条由消耗钱改为奖励钱
22,地图四角显示坐标
23,地图上指向角色图标时显示角色名
24,炸弹、防弹衣的攻防、升级
25,成功炸了别人后可以抢对方的一些钱(2%, 5%)
26,选中不灵敏的问题(OnIdle限制了帧速率,view.OnMessage未限,OnMessage执行多次才执行一次comeon)

2010-07-09
1,换鼠标指针

2010-06-19
1,模型贴图

2010-06-10
1,没激活动画的模型一次传送多个,激活动画的单独传,一次传一个(包括动画矩阵数据)
2,地形数据一次传输量也增大一倍
3,传输次数少了6、7倍,速度快很多

2010-06-08
1,模型初始属性可拉伸、可变色、可解组、可拷贝

2010-06-06
1,角色可以跳

2010-06-04
1,模型移动操作简化为平面移动(贴地面),和垂直移动两种

2010-04-15
1,窗口模式

2010-04-14
1,动画减为6桢,重新编辑角色走路动作
2,ctrl+右键:角色不转,只转视角

2010-04-08
1,写日志加锁
2,一次收到多个中转消息的处理
3,peerServer有client角色数据时也要发消息
4,client与peerServer传输完数据后发消息给p2pServer

2010-03-18
1,不能直连的,通过p2pserver中转

2010-02-27
1,YES,找到一个掉线的bug,p2pServer在发送某些消息后没将IOType设回zero_read

2010-01-23
1,完成网络库直接对engine进行读写的改造   

2010-01-13
1,entity及其aniMatrix数据都改成现从engine取得,接收到的也直接对engine中的数据赋值
   这样就能在客户端看到实时传输过来的数据,又不用预先申请固定内存。
   通过加锁解决netlib调用client函数改engine数据可能与client::OnIdle调用engine冲突的问题
2,修正判断角色是否存在的bug。(一个变量写错了,导致取不到正确的值)

2009-11-26
1,    entity动画矩阵中的浮点数改变了的才传输,采用一字节索引加数据的方法

2009-11-23
1,clientScene 禁止编辑模型及动画,传输模型矩阵数据去掉m_mRotationMatrix、m_mMoveRotateMatrix

2009-11-14
1,连接peerServer时,先清空数据,地形数据边传输边更新、渲染

2009-11-01
1,镜头回复加快
2,标题栏显示场景列表的玩家数
3,掉线重连

2009-10-25
1,聊天界面显示初始欢迎语

2009-09-09
1,完成p2p穿透的改造和测试,两端同时connect,只有这样才能连通
   (还是有部分NAT不能穿透,这些不能穿透的打算用服务器中转)

2009-07-08
1,Entity的几个需传输的BOOL属性用一个DWORD变量按位表示
   
2009-07-05
1,建造迷宫

2009-07-04
1,地形高度编辑提供归零操作
   
2009-06-28
1,制作图标
2,修复模型会被地标贴图染色的问题(因为绘制地表后没有关闭贴图状态)
3,调整光源

2009-06-23
1,去掉标题栏
2,说明文档放到aboutDlg

2009-06-23
1,存储、传递entity的循环播放属性,
    这样访问一个场景时可看到设置为循环播放的entity在播放动画
   
2009-06-22
1,peers列表可上下翻页
   
2009-06-21(夏至)
1,p2pServer按EntityCount对peerList排序
2,在线奖励游戏币

2009-06-16
1,首次登录即加载默认场景,场景可改名和描述
2,重写地形索引数据

2009-06-14
1,编辑主角
2,每个peer第一次访问p2pServer时分配peerID,之后再登录就用这个固定ID
    P2PServer把下一个可分配ID保存到物理文件,所以该文件应随P2PServer执行程序一起移动
   
2009-06-10
1,访问场景,角色在指定位置出现(出生地),此区域不能放置物品
2,修复聊天消息中文换行的bug

2009-06-09
1,雾化
2,限制不能靠近边界

2009-06-08
1,修正旋转镜头只绕x轴不饶z轴的问题,根据镜头朝向决定绕哪个轴

2009-06-07
1,聊天消息的中文截取和换行
2,角色显示名字,用名字颜色区分性别

2009-06-04
1,增加聊天功能(无滚动条,只显示最近五条信息)

2009-05-31
1,来访问的角色走路时播放动画

2009-05-30
1,访问另一场景时,向原场景发送离开消息,原场景据此删除rolePos数据,并向自己的clients列表广播
2,peerServer定时向peerClients发送msgTick,一段时间(3分钟)收不到反馈则认为peerClient掉线,关闭socket

2009-05-29
1,主角移动、转动时传worldMatrix改为传rolePos和fAngle,减少数据量
2,peerClient收完role的数据后主动要PosDir数据
3,收到posDir之前不画role

2009-05-28
1,p2pServer所用iocp收消息加锁(同一个key也可能在不同线程,所以需要加锁)。
2,生成消息时用placement new,不再反复申请释放内存

2009-05-25
1,收发消息不再共用buffer,发消息用每个msg的buffer,
    收消息用和每个连接关联的packet的buffer。
   
2009-05-19
1,把消息收发模型改为可同时收发多个msg

2009-05-18
1,发现peerServer会把两个消息当做一个来处理(此时RecvSize > DataSize)

2009-05-17
1,把logMsg改成公共函数,可供所有模块调用(调试幽灵bug有力的工具,早就应该有)

2009-05-14
1,peerClient的角色数据通过peerServer广播

2009-05-12
1,修复存储entity时没判断是否本地数据的问题,(导致数据越来越多,帧速率下降)

2009-05-06
1,peerClient的hero在peerServer的位置同步

2009-05-03
1,把部分网络库对客户端的回调函数换成通过消息传递,一来更自然,第二可避免客户端回调函数和onIdle的线程冲突

2009-04-27
1,peerServer的hero在peerClient的位置同步

2009-04-12
1,修复连接peerServer有时画不出东西的问题,原因是由netlib直接调用client的
    函数更新clientScene的entity,有可能引起变量冲突,相当于多线程变量冲突,
    解决办法是由netlib设置标志位,在client的主循环中查看标志位,再更新clientScene的entity

2009-04-11
1,主角在其他场景可见
   
2009-04-09
1,网络消息传送动画矩阵,使peerClient能看见peerServer的entity动画

2009-04-05
1,完成网络库部分基于消息通信的改造
   
2009-03-25
1,客户端与p2pServer通信部分网络消息的改造

2009-03-23
1,完成P2PServer的网络消息改造

2009-02-21
1,主角模型换成制作的机器人,移动时播放走路动画
   
2009-02-16
1,完成机器人走路动画的制作

2009-02-13
1,组合模型编辑动画的任意桢
2,修复激活动画时中间空几桢后面的动画位置不正确的问题

2009-01-07
1,多重组合模型的动画编辑

2009-01-05
1,更方便的编辑(面内移动)

12-30
1,限制fps

12-28
1,编辑任意桢动画

12-19
1,查看任意桢动画

12-09
1,模型动画控制放到属性面板中
2,模型动画循环播放

12-02
1,相对模型方向播放动画

12-01
1,组合模型各部分分开编辑,统一播放

11-20
1,存取动画矩阵数据

11-19
1,组合模型初步激活

11-18
1,单体模型初步激活

10-05
1,地面高度由地形高度和碰撞的block的上表面决定
2,主角可跨上一定高度(一米)的台阶
3,修复“编辑entity时某个attachment处于focused状态,按'Q'结束编辑状态,选中失灵”的问题
    -- 在把focused entity设为NULL的同时,把focused attachment也设为NULL

09-24
1,主角与entity碰撞后向两边探测,沿entity边缘滑动

09-16
1,相机和地面的碰撞

09-15
1,摄像机旋转、移动、拉伸后记录下一位置,统一检测碰撞
2,摄像机弹性回复

09-05
1,摄像机移动时的碰撞检测

08-28
1,开始做摄像机的碰撞检测

08-26
1,对entity的碰撞检测细化到block
2,更精确的碰撞检测,根据obbox原理,将主角bbox用block变化矩阵
    反向变化后与block初始bbox检测相交

08-24
1,基于主角bbox和entity的bbox的主角行走碰撞检测

08-23
1,基于主角位置和entity的bbox的主角行走碰撞检测

08-17
1,交易记录完成

08-12
1,交易记录

08-04
1,公告板数据传输

07-30
1,本地公告板

07-09
1,修正entity list中的entity放到地面不能点选的问题,原因是clone时没有算bbox
2,根据属性对通过交易获得的entity的编辑操作进行限制
3,修正属性框出来后还要再点entity才能显示entity属性的问题

07-08
1,如果entity是买来的,则entity的扩展属性中,只允许修改是否可卖和价格

07-07
1,entity list中的entity可删除

07-06
1,stored entity拖放
2,在peerclient只允许转动镜头和选中entity,不允许对entity进行编辑

07-04
1,预览entity旋转
2,根据预览entity的size确定相机与entity距离,使预览entity与预览区域大小匹配

07-03
1,entity列表中选中的entity预览

07-01
1,entity的id, name, note放入IWTOEntity接口
2,更新stored entity列表

06-30
1,增加listDlg基类,peerList,entityList继承该类

06-29
1,entity增加名字属性
2,增加listStoreEntity,存放仓库里的entity

06-27
1,将mainCharactor和camera重构成singleton模式
2,交易entity

06-19
1,client为netlib提供回调函数,netlib收到消息需要客户端做出响应或需要从客户端取数据时
    调用此函数
   
06-09
1,传送除了block数据,还加了Entity数据,peerClient可以查看peerServer的entity属性

06-04
1,GroupEntity也加了ID,这样每个Entity都有ID作为标识

05-29
1,读取和存储交易相关属性

05-20
1,模型加上与交易有关的属性

05-10
1,天空球

05-05
1,主角改成静态变量
2,存储主角的位置数据

05-02
1,主角随地形高低起伏
2,主角初始位置是存储的相机位置和相机lookat点的中间
3,控制步速

04-28
1,键盘控制移动主角,相机随之移动
2,相机围绕主角旋转,拉伸也以主角为参照

04-26
1,重构处理输入消息的模式,不再立刻响应消息,而是记录状态,在主循环中处理;
2,找到画主角后基本模型不能透明显示的原因,是因为调用了SetTextureStageState
    改变了color和alpha的取值。
   
04-16
1,找到主角模型画不出的原因,是因为在engineManager里只对focusScene进行了
    comeOn,包含主角模型的scene没有comeOn,导致骨骼矩阵数据没有赋值。

04-14
1,添加绘制主角模型,编辑器能画出来,客户端画不出,

04-06
1,修正peerclient连接不同peerServer出现地址复用错误(10048)的问题,
    peerClient每次产生新端口,peerServer则仍然在一个端口监听
2,与服务器断开连接后将客户端peer列表清空
3,服务器iocp收数据后立刻执行PostQueuedCompletionStatus,似乎io操作还没有完全执行完,
    会发生995错误,暂时解决办法是在PostQueuedCompletionStatus之前sleep(100)

03-31
1,修正连接第二个peerServer,前一个场景block未清除的问题

03-25
1,Peer client 访问peerServer时,之前的peerServer连接断开,连接线程结束
2,peerServer端口和peerClient端口从ini文件读取

03-24
1,修改界面编辑模型参数的响应机制,回车或失去焦点时才有效,而不再是有变动时就生效

03-23
1,修正删除组合的模型有内存泄露的问题,同样是因为Release(GroupEntity)后没有delete;
2,修正组合模型后位置不正确的问题,原因是计算组合模型bbox之前没有清空bbox数据
3,增加圆角长方体模型
4,修正缩放组合模型时尺寸数值变动过大的问题,原因是在更新每个被组合模型时,
    都更新了组合模型本身的size,导致组合模型的size被更新多次。

03-22
1,完成p2p穿越的改进,连接server的main端口成功后,连接server的hole端口两次,产生
    peerServer的serverHole端口和peerClient的clientHole端口,之后在自己的serverHole
    端口listen,等待peerClient的clientHole端口的连接。而不再每次都去连server的hole端口。

03-13
1,在进程结束时,结束PeerServer的Listen线程。
2,找到两处内存泄漏,一处是Release(GroupEntity)后没有delete
    (block只调用release就行了,由blockTable负责delete)
    第二处是regionManager.m_vecRegions没有delete,只清除了里面包含的region

03-10
1,修正地面的pick点y坐标最小值只能是0的问题(在初始数据及地形高度变化后,
    都重新计算了bbox,计算初始pick点时,取过bbox.A的平面)
2,模型冻结、解冻、对齐
3,平滑地形

03-09
1,既然模型编辑时不变换顶点数据了,就改为同一种类型的block用同一个BaseMesh了
2,完成模型的复制粘贴

03-08
1,修正缩放变量不正确的问题(取长度比例,而不是某一坐标的比例)
2,修正放置第一个模型后,全部模型处于选中状态的问题(m_vMultiSelectOrigPoint还没赋值)
3,修正0或1个模型也可以编组的问题
4,修正一次只能放一个模型的问题,只要不按'Q'键,一直可以放置选中的模型

03-07
1,开始写复制粘贴,看原型(prototype)模式

03-06
1,    界面设置模型参数根据组合模型重构
2,    多个选中模型可同时编辑
3,    存、取组合模型
4,    改正读取出来的模型不透明的问题(除了设置material外,还要设置顶点颜色值)
5,    限制模型移动和缩放的数值范围
6,    程序关闭时场景自动保存

03-05
1,    attachment的变换也重构成设置世界变换矩阵方式
    绘制过程以及FindFocusedAttachment函数中判断相交的过程中设置得到的世界变换矩阵
2,    增加一个反向(-1, 1, -1)的补光
3,    同时选中多个模型的删除
4,    相机的保存读取
5,    角度和弧度的转换改用dx的api:D3DXToRadian和D3DXToDegree

03-04
1,    实现模型框选
2,    改造模型顶点数据变化为设置世界变换矩阵
   
03-03
    因为要面试,再翻书,发现犯了个大错误,模型变换只需在变换后改变word matrix,
    在渲染和isIntersect等操作前进行世界变换就行了,而不是改变模型每个顶点的位置、法线等数据
   
02-29(今年闰年:)
    框选的实现思路:可用鼠标按下时的地面pick点和实时pick点形成的四边形
    在QTree中拣选备选Entity,确定一个过初始pick点,与视线垂直的平面,
    实时点选射线和该面交点为B点,pick点和B点确定BBox,视点到备选
    Entity的中心及BBox八个顶点的射线若与上述BBox相交,则该Entity被选中。
       
02-28
1,解决了组合旋转,解组后缩放变形的问题(旋转和缩放前都根据moveRot恢复初始状态)
   
02-27
1,模型解组
2,旋转改为围绕模型旋转后的xyz轴
3,重构旋转模型法线的代码,放到一个函数中

02-26
1,修正读取场景后所有Entity都在QTree的根节点下的问题,等Entity变换位置后再放入QTree
2,完成模型组合功能

02-25
1,完成对基本模型的组合(composite)模式的重构,增加类Entity及其子类GroupEntity(包含若干Entity),
    block也改为Entity的子类,基本模型对外的接口统一为Entity
   
02-15
1,修正模型转动后光照面没有变化的问题(旋转时要更新normal数据)
2,增加删除模型操作
    (清除资源时不应改变id或m_scName,否则会造成资源管理map或hashMap中的数据得不到清除)
   
02-14
1,基本模型全部使用3DMax导出文件,包括:长方体、圆柱体、球体、三棱柱、四棱锥、圆锥、
    圆环、弹簧、阻尼器(以后可视需要增加)

02-13
1,修正打开无贴图模型后再新建地形或打开有贴图模型不显示贴图的问题
    (打开无贴图的模型时将Texture禁止了,之后没有恢复SetTextureStageState的设置)
2,修正用工具栏按钮打开模型文件后读取不到其他文件的问题
    (因为调用打开对话框后当前工作路径变了)
3,将编辑器的新建文件和打开文件操作统一风格
4,基本模型由3DMax导出文件读入,把WEGMesh的一些基本属性放到新增的基类WEGBaseMesh中,
    供block使用,基本模型也用MeshTable统一管理。(这下可以随便增加模型了)   
       
02-08
1,模型的位置、缩放,旋转角度可通过面板设置,也会实时显示在面板上

2008-01-21, 22
1, 改进模型的移动、缩放算法,使之更合理,移动方向与视线方向无关,只与物体本身方向有关。
    移动距离通过视线与模型编辑附件交点得到,而不再是鼠标点本身的坐标变化。
   
---------------------------------------------------------------------------------

2007-10月12-20日:
1,    在线client以列表形式供选择(以后可将列表变成地图)
    NetLib在线client list改变后回调客户端的函数更新客户端的列表
2,    将场景数据变量从doc提前到app中,也就是不再依赖doc,app中共有两个scene,
    一个是自身场景,一个是访问远端的场景数据,都在app初始化时创建。
3,    app初始化时读取硬盘默认位置场景数据,如果能读取到,说明用户已经创建过场景,
    禁用新建按钮,如果读取不到则新建按钮可用,用户可随时创建场景
    自建场景后点保存按钮则保存场景到硬盘默认位置供以后读取
4,    改成单文档模式了。(editor -> client)
5,    自建场景保存时让用户输入名字和主题。
6,    与服务器的连接情况反馈给客户端显示
7,    对远端场景需要设置操作限制。(不能操作模型、地形、不能保存)
        (通过在...View::PreTranslateMessage 和 ...App::OnIdle、App::OnSaveScene()
        中判断当前操作的scene是不是peer client scene)
8,    提供多种基本模型(目前有长方体、圆柱体、圆环体、球形体,还需更多)
9,    模型可编辑颜色
10,net lib 在uninit时先将m_pClientCallFunc和m_pClientInstance置空,
    以免再调用client的函数,这时程序正在关闭,client中有些变量失效,调用会引起错误
11,找到了服务器read 0 byte的问题所在,原因是新用户登陆,发送在线玩家给他,
    发到第13个,数据超出缓冲区大小了
12,找到了WSARecv不通知IOCP的问题所在,原因是在收发前未将overlap清零

10月1--12日:
1,    服务器使用重叠IO、完成端口;
2,    服务器主线程结束前等待所有线程结束并清除资源;
3,    用CriticalSection和Samophore保护可能竞争使用引起冲突的变量。

9月第四周:
1,    两份场景数据,一份是自己的,供别人访问,另一份是自己正在访问的别人的场景,
    这两份场景在客户端进行相关调用时要有所区分(m_lpPeerClientScene, m_lpPeerServerScene)
2,    场景数据存储与载入
3, 根据模型数据的读写变量,增加需要收发的模型数据(四个矩阵变量)

9月份第三周:
1,    收发模型数据,改造地形数据的收发过程
2,    根据传输数据显示远端场景(地形、模型)
3,    玩家服务器数据实时更新
(    玩家服务器要有个连接自己的客户端的列表,场景更新时向列表中每个客户端发送数据
    客户端断开连接时,m_listPeerClient中去掉该客户端
)

9月份第一至二周:
1,    网络穿越
2,    场景传输数据规划
3,    索引服务器根据新连接和断开连接更新在线玩家列表,并通知其他玩家

2007-08-20 - 2007-08-30
1,    实验socket及select模型
2,    做成dll由窗口程序调用
3,    将每个socket放进线程
4,    窗口程序将数据结构打包由dll传输
5,    数据传输流程

2007-05 - 2007-08
1,    地形
2,    基本模型
3,    网络、服务器、P2P书籍阅读


====================
*    一些想法
====================
*    太阳光晕
*    模型可编辑贴图、透明度
*    地表多层纹理
*    场景的实时更新,可以后实现
*    要发送的网络数据应该使用缓存池模式
*    考虑多个客户端访问一个玩家服务器的情况
*    考虑网络不通及传输中断网的情况
*    收到非预期数据的情况
*    与服务器或与Peer server连接不上时要定时重连
=================================================================================

*    3d引擎和网络库牵连太多,独立性不够好

*    实现自由经济,虚拟物品由制造者所有,可自由交易,地图上的人数提供直观显示,
    提供聚集人气的手段,如赚钱椅、摇钱树等。
*    提供公共城镇,允许所有玩家在那里建设自己的建筑
**    玩家开始游戏时没有货币,也没有土地,可以通过劳动获得货币,购买获得不同大小的土地,
    在土地上面制作物品,物品可以买卖,如此玩家即可获得正向经济流。
**    低端玩家免费,玩家发展到一定规模时网络访问量增大,需要将其数据转移到服务器上,此时,
    玩家也有了可观的正向经济流(出租土地、出卖模型、广告收入等),变成高端玩家,对这样的高端
    玩家采取收费制,即,玩家赚到了钱(或获得了成就),才从他那里收取一定比例的钱。

=================================================================================
    DNA、基因
拥有一种基因可以使用一种基本模型(用来创造场景和主角)、
遇到和自己只差一个基因的玩家,可以吸收对方的基因,
从而增加一种基因,也就是可使用的基本模型多了一种。
拥有一种基因代表什么,表现?技能?

    如果能抓住别人扔出去是不是很好玩?
    拆别人的东西是不是很好玩?
        每个人只有特定颜色和形状的block,需要拆别人获得其他颜色和形状的,
        func1(color1, block1) >= func2(color2, block2),才能拆动,
        func1是拆除者函数,func2是防御者,总的原则是颜色和block种类越多越难拆,
        带有功能的建筑需要特定的颜色和block种类,例如摇钱树需要:
        red cube + green cylinder + blue ball + pink torus ......
    采取某种方法让别人的角色或建筑染毒,最好需要写点代码,或者需要破解数值,
        被染毒的会垮塌,或做奇怪的动作,或可以换贴图
    材料有限,颜色不能改,想要某个颜色的某种材料,要去拆别人的
    颜色和材料种类越多越难拆,到了一定程度就不能拆了
    暂用列表代替地图,
    每个peerServer开放的地块大小根据模型多少和访问量来决定,外围用不可编辑的高地禁止
        以后可用水面禁止,看起来是无边的大海
   
====================
后续计划:
====================
1,    脚本语言接口,使模型可控

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值