在我们的游戏中,我们有一个典型的技术树,目前是手工编辑的 - 非常难以维护和容易出错:http://igmarauders.isotx.com/library/images/a/a3/Techtree-july26-2011-vehicles-resized.png
如果可能的话,我想在HTML表单中生成这个,但我不知道从哪里开始。也许这里的人们已经解决了类似的问题,可以指出我正确的方向吗?
一些技术细节:
Assault Archos LvL 1
,Assault Archos LvL 2
)通过属性从较高级别链接到较低级别(并且较高级别始终具有较低级别作为先决条件也是如此)Technology
(上部)和Vehicles
(下部)。最后:
提前致谢。我在谷歌上搜索过,但我发现的所有“复杂树”例子与我的相比都很幼稚:)
编辑:以下是一些JSON格式的示例数据:http://pastebin.com/Fa3JcnRw
编辑2 :另外,如果重要,我们在服务器端使用PHP,但我愿意接受替代方案 - 例如,我们可以在构建脚本中生成静态HTML。
答案 0 :(得分:3)
我已经将另一个想法混在一起,你可以看到它 http://jsfiddle.net/jedidiah/sTj3E/4/embedded/result/
我们的想法是只列出每个级别的列中的所有项目,然后当您点击其中一个项目时,它会突出显示所需的技术。
我认为让你的头脑比所有的线更容易,认为它不会一目了然地给你概述,你必须点击。
编辑:您可以在此处查看代码http://jsfiddle.net/jedidiah/sTj3E/4/,原谅这种混乱,只是一个简单的例子来了解这个想法。
答案 1 :(得分:1)
所以,虽然我不能给你一个工作的演示,因为我根本没有时间找出所有的连接,这就是我的建议;
您想要的实际上是基于系统原始数据的复杂流程图。为了使它像你的例子那样创建结构是不可能的。可以建立的连接太复杂,无法使用您提供的有限数据...
但是,可以制作包含所有项目和关系(行)的html结构(网格)。
这些行本身很容易here is a plugin,这将允许您与不少于3个流行的JS库(jQuery,Mootools,YUI3)建立实际连接。从那里,您可以在html节点之间构建所需的结构。
我会将节点保存在一个表中,您可以根据它们的级别从那里分配2d网格中的默认位置,但是从那里它需要一些人工输入,可能是拖放系统,这会移动节点到网格中的不同位置,做一些crud动作。
这绝对是可能的,但是很多工作。问题是你正在尝试做几乎与Visio功能匹配的东西。
如果你不能胜任这项任务,我建议你采取不同的方式来形象化关系。像@Jedidiah那样的事情是一个好的开始。
如果有其他人希望使用这个插件/想法做点什么我祝他们好运,我现在没有时间,对不起。
答案 2 :(得分:0)
如果您无法调整或扩展现有内容,您肯定需要使用canvas。
(看起来你做了很多工作 - 但很有意思。)
答案 3 :(得分:0)
没有一个简单的解决方案。
我建议考虑为这棵树生成一个SVG(标准矢量图形)文件。 SVG基本上是一个XML文件,它使用坐标,填充,渐变等来描述画布上的各种对象。所有现代浏览器都内置了对SVG文件的支持。
您可以使用PHP或几乎任何语言来生成SVG文件的XML代码。
我已经玩了一点点,如果你创建一些XML模板然后只替换从一个元素到另一个元素不同的部分,我发现它非常有用。让我举个例子:在你的图表中,你有蓝色方框,里面有文字。这可能是您为其创建模板XML的单元(您可以使用InkScape,然后只查看它创建的SVG文件)。然后只需替换XML代码中的坐标和文本。 PHP中的“sprintf”是一个很好的工具。
使用SVG有一些很大的优势: - 文件非常小 - 完全可缩放而不会降低质量(因为它是基于矢量而不是基于像素的)。 - 可以在网页中显示为嵌入对象。
编写代码需要一段时间,毫无疑问,但它会产生高质量的结果。