今天是学习clanLib的时间,因为下午又想打游戏了,所以今天只搞了4个多钟头而已。
今天仔细的看了看ExampleGUIStyle例子程序,发现clanLib中自定义的gui同库本身的GUI功能一样强大。所以嘛,如果真的要完整的一套自定义的介面,自然也会麻烦不少。因此尽量使用GUIStyleSilver这个样式就是明智之举拉。嗯,我已经在盘算把整个游戏的介面做得规矩一点,GUI介面只要能运做,看起来不会气人就行啦,当然那时的GUI绝对不会是最终版本,最终版本的介面?我个人的爱好是象星际那样吧,可是对于象炸弹人这样可爱型的小游戏又似乎有点不合适呵。这个可运行的游戏已经在我脑子里跑了很久很久了,为了防止我的热情减退,我打算以尽快的方式把游戏运行起来。最后再对介面一步一步的进行调整。另外,如果逻辑代码写累了,也可以转到介面代码上修修,调节一心情,呵呵。
clanLib中的控件,最复杂的就是listbox同treeview这两个控件了。并且在文档中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_than、equal函数。
Listbox 与及 treeview的item_height都是可以设置的,listbox是统一设置。Treeview则是要一个一个设置。
Treeview同treeitem的关系其实有点象普通的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_TreeView同CL_TreeItem的关系。理解上,CL_TreeItem与CL_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; 其它 , 比如火焰,游戏炸弹