本帖最后由 沙漠点灰 于 2013-4-22 23:15 编辑 lz只要技能树的话..粗略看了下截图,先从信息读取说吧 因为lz只要算法,所以从简,而且没有测试 技能等级读取 有 level_x = [xx,xx]的 就是
照截图的所说,没有level_0,所以,tree_level[0]就为nil值,建议初始化
最主要的就是各个图标的位置了, 首先为窗口定义两个实例变量@show_x,@show_y。这是为了节约内存, 但是考虑到现在内存灰常大,可以考虑把窗口显示位图初始化很大很大,具体有多大随你便,够用就行(别用硬编码)。 坐标更新时,先更新@show_x,@show_y。 然后把图标显示的坐标分别减去@show_x,@show_y。 不用的话直接修改ox,oy就行. lz如果善于发现的话,会发现,每个技能点占得宽度为它所有次级技能宽度之和,这就会用到递归算法了。 算法如下:
当然,仅仅是宽度而已,后边的也要加前面,每级清零,并加上位置修正,这个后面说。 把技能图标放到中间就行,一个遍历应该就能解决,在这个遍历中,放完每一个检查有没有父技能,有的话,头上插根天线,用 fill_rect,每个用一个数组存储每个父技能的子技能天线位置,父技能的子技能天线顶端相互连起来.再检查有没有子技能,有的话,接根地线, 就不用记录了,因为子技能会帮你接的。 上面说到位置修正,其实就是父技能的前个技能(如果有的话)的位置。 说到这,也差不多了,但是这,貌似还是很麻烦,所以建议lz直接自己封装一个Game_Skill_Tree类 Game_Actor下加一个实例变量
Game_Skill_Tree也是自然不会给出现成代码,不过至少得提供以下接口: father 父技能树对象 father_b 获取父技能前个树对象 x,y,width 等可读可写数据 上面的 search_next getWidth 因为封装成类了,所以参数自然就省了 不过说回来,成类了,search_next也可以用数组代替了. 话说这不蛋疼么,既然有现成的,还要自己写?( ̄▽ ̄") |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-7 19:19
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.