私はお気に入りのゲームの 1 つのレベル リーダー アプリケーションを作成しようとしています。
レベル ファイルの最初の 8 バイト:
0100000001000000
メッシュ バージョン = 1 および頂点バージョン = 1 と記載されています。
ツリービューがあり、ツリーにヘッダーがあり、ヘッダーに頂点とメッシュのバージョンがある GUI を作成しました。これらにこのデータを入力したいと思います。
ここで、最初の問題が発生
します。コードをきれいにするためだけに、すべての読み取りを独自のクラス (HeaderData、MaterialData など) で行いたいと考えています。私は別のクラスでこれを行っているため、その
クラスからツリービューにアクセスする方法がわかりません(フォームクラスにいた場合、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);
}
}
}
}
これは、クラス Form1 内の名前空間 LevelReader 内のメソッドで、ファイルを読み取り、クラス 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# を初めて使用するので、提案があれば教えてください。
要約すると、ここに私の2つの問題があります:
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の画像です(メッシュバージョンにアクセスしようとしてい
ます
)http://i.imgur.com/hahhG.pngする必要があるのは、その PRE EXISTING NODE にアクセスしてそれに子を追加することです.私は、これらの状況でそれを詳述するチュートリアルを見つけることができないようであり、私のニーズに合わせて彼らのチュートリアルを提供するのに十分であることを理解していません. .Nodes[1].Nodes[1]
本当にありがとう。