我正在尝试为我最喜欢的游戏之一制作一个关卡阅读器应用程序,简单地说这就是我目前想要实现的目标:
级别文件的前 8 个字节:
0100000001000000
它声明网格版本 = 1 和顶点版本 = 1。
我制作了一个 GUI,其中有一个树视图,在树中它有标题,在标题中它有顶点和网格版本。我想用这些数据填充这些。
现在这是我的第一个问题出现的地方:
我想在它自己的类中完成所有阅读(例如,HeaderData、MaterialData)等,只是为了使代码更清晰。因为我在另一个类中这样做,
所以我不知道如何从所述类访问我的树视图(如果我在 Form 类中,我可以只做 treeView1.whatever,但我不知道如何从另一个类。
注意:我试过Levelreader.Form1.treeView1,但它不存在)。
public void button1_Click(object sender, EventArgs e)
{
using (OpenFileDialog fileDialog = new OpenFileDialog())
{
if (fileDialog.ShowDialog() != DialogResult.Cancel)
{
textBox1.Text = fileDialog.FileName;
using (BinaryReader fileBytes = new BinaryReader(new MemoryStream(File.ReadAllBytes(textBox1.Text))))
{
//Get the hex data in bytearray format
//This won't be displayed
int length = (int)fileBytes.BaseStream.Length;
byte[] hex = fileBytes.ReadBytes(length);
//File.WriteAllBytes(@"c:\temp_file.txt", hex);
//This is what's displayed.
//Remember to make changes to the byte array
//and then update the view.
string tempStr = BitConverter.ToString(hex).Replace("-", " ");
richTextBox1.Text = tempStr;
richTextBox1.ScrollBars = RichTextBoxScrollBars.ForcedVertical;
//Instantiate the class
Header temp = new Header();
temp.HeaderData(hex);
}
}
}
}
这是在命名空间 LevelReader 中的 Form1 类中读取文件然后实例化 Header() 类的方法。然后我调用 HeaderData,并在该类中获得网格和顶点版本。
namespace SceneStuff
{
public class Header
{
public void HeaderData(byte[] hex)
{
//First 4 Bytes = Mesh Version
//Second 4 Bytes = Vertex Version
byte[] meshVersion = hex.Take(4).ToArray();
byte[] vertexVersion = hex.Skip(4).Take(4).ToArray();
}
}
}
在这个方法中,我想使用这些数据来填充我的树视图。例如,我更改了关卡中的一些信息,例如将网格版本更改为 2,我想要,当我按“编译关卡”(在我的应用程序 GUI 中)从 TreeView 中读取时,我相信这将是最好的那样。但是,如果您有建议,请说明,因为我是 C# 新手!
总而言之,这是我的两个问题:
1)如何从另一个命名空间/类访问我的树视图?
2)您对改进我的代码有什么建议吗?(以及我计划编译关卡的方式?)
谢谢!
PS我为文字墙道歉!>_<
编辑:
我还有另一个问题是我似乎无法填充我的节点。
它是这样创建的:
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Mesh Version");
及以下:
treeNode2.Name = "meshVersion";
treeNode2.Text = "Mesh Version";
我尝试添加 treeNode2 作为对我的方法的引用,但这不起作用。
我试图用它来选择它,treeView1.SelectedNode = treeView1.Nodes[1].Nodes[1];
但这似乎也不起作用。
(这是 GUI 的图像Nodes[1].Nodes[1]
,我认为这表明我正在尝试访问(我正在尝试访问 Mesh 版本)http://i.imgur.com/hahhG.png
所以我需要做的是访问该 PRE EXISTING NODE 并向其中添加一个子节点。在这种情况下,我似乎找不到任何详细说明它的教程,而且我不明白它足以满足他们的教程以满足我的需要.
非常感谢。