2006-03-21炸弹人游戏开发日志

来源:互联网 发布:天通银软件下载 编辑:程序博客网 时间:2024/05/16 19:30

今天是学习clanLib的时间,因为下午又想打游戏了,所以今天只搞了4个多钟头而已。

今天仔细的看了看ExampleGUIStyle例子程序,发现clanLib中自定义的gui同库本身的GUI功能一样强大。所以嘛,如果真的要完整的一套自定义的介面,自然也会麻烦不少。因此尽量使用GUIStyleSilver这个样式就是明智之举拉。嗯,我已经在盘算把整个游戏的介面做得规矩一点,GUI介面只要能运做,看起来不会气人就行啦,当然那时的GUI绝对不会是最终版本,最终版本的介面?我个人的爱好是象星际那样吧,可是对于象炸弹人这样可爱型的小游戏又似乎有点不合适呵。这个可运行的游戏已经在我脑子里跑了很久很久了,为了防止我的热情减退,我打算以尽快的方式把游戏运行起来。最后再对介面一步一步的进行调整。另外,如果逻辑代码写累了,也可以转到介面代码上修修,调节一心情,呵呵。

 

clanLib中的控件,最复杂的就是listboxtreeview这两个控件了。并且在文档中treeview控件并没有现成的方法能够从xml中生成。

 

设置控件client_area的方法:(此方法是我在自定义控件中的sig_resize事件代码中发现的)

       CL_Rect rect(4, 4, 4 + listbox_->get_width() - 8 , 4 + listbox_->get_height() - 8);

       listbox_->get_client_area()->set_position(rect);

 

Listbox有两个相关控件,CL_ListView以及CL_ListItem。其实在listbox的绘制与及数据处理,都是由CL_ListView完成,CL_ListItem纯粹只是存放一点数据的地方。从doc中也可以看出,

并没有一个CL_ListItem_Silver这个类。另外CL_ListView是可以实现排序的,这点也可以从CL_ListItem中重载了 “<” ,”==”操作符,以及提供的less_thanequal函数。

 

Listbox 与及 treeviewitem_height都是可以设置的,listbox是统一设置。Treeview则是要一个一个设置。

 

Treeviewtreeitem的关系其实有点象普通的CL_Component之间的关系。所以treeitem表现能力应该比Listitem强很多,因为在同一个treeview可以插入不同的treeitem,这点从

CL_TreeNode::insert_item的函数中放入的竟然不是CL_TreeItem,而是CL_Component猜到的(其实我还不确定,不过如果库是我设计的话,我会这么做)。并且每个Item不是由CL_TreeView绘制,而是象普通的父子CL_Component关系那样,由CL_TreeView通知CL_TreeItem绘制,

另外对于CL_TreeNode这个类,它是独立于GUI系统的。它的出现只是表达CL_TreeViewCL_TreeItem的关系。理解上,CL_TreeItemCL_TreeNode应该一一对应才对。

 

今天遗留的问题:

1. 为何CL_TreeNode的插入操作一个返回CL_TreeItem,一个返回CL_TreeNode?

  在该操作中的源码中CL_Component参数与CL_TreeItem的做用是一致的,是否在

  理解上应该把CL_Component等同于CL_TreeItem?只不过CL_TreeItem用得更多一些的缘故?那么CL_TreeNode::insert (new CL_TreeItem(“lable”))的方式是正确的罗?

2. 控件中的sig_get_preferred_size事件有什么用?

3. 我能在不扩展任何GUI控件的情况下,把鼠标拖放操作实现吗?

 

希望的事:

希望CL_TreeNode::get_component返回的值就是它的一个CL_TreeItem,今天我也没时间验证了。反正明天会用到这个函数,假如我是对的,那事情就方便很多啦。

 

 

另外,前几天散步的时候,已经把地图格式想好了:

Struct FILE

{

地图大小          (固定字节)

地图版本号        (固定字节)

各位玩家起启位置  (固定字节)

各种道具出现的数量(固定字节):注意,道具出现的总数量会同游戏中的砖头有关系

//背景数据

背景数据长度

背景数据

{

对象id,

Int x;

Int y;

}

 

//碰撞物数据

碰撞物数据长度

{

   对象id;

   Int x;

   Int y;

}
}

 

对于World中的数据结构有变动,其变动是,对于除人物外的其它数据,不记录其个数,而改为记录其对象在游戏中运行的ID(也可以是指针啦)

Struct WorldMap

{

   Int playerCount;

   Int GameBoxId;

   Int GamePrizeid;

}

 

List <CGameObject>      m_viewList;   用于对所有游戏物体进行排序,以合适的方式显视图象

List<CBackground>       m_background;游戏背景

List<CBox>              m_boxs;     游戏阻挡物

List<CPlayer>            m_players;   玩家

List<CPrize>             m_prizes;    游戏奖品

List<CGameObject>       m_others;    其它,比如火焰,游戏炸弹
原创粉丝点击