C# 输入字典的不同输入结果都是一样的

C# 输入字典的不同输入结果都是一样的,c#,dictionary,kinect,C#,Dictionary,Kinect,所以我把一些数据放进字典里。一个字符串(名字)和一根骨头(用来固定位置和东西)。我从kinect读取骨骼的位置,然后将其放入字典,然后将其保存到.txt文件中。现在我很困惑,因为它们都是一样的。有一段时间,我有一些标签显示了一些骨骼的不同位置,它们都在变化。那就是说这和我把它放进字典有关 这是我的输入法: JointCollection joints = skele.Joints; List<Bone> temp = current_bones;

所以我把一些数据放进字典里。一个字符串(名字)和一根骨头(用来固定位置和东西)。我从kinect读取骨骼的位置,然后将其放入字典,然后将其保存到.txt文件中。现在我很困惑,因为它们都是一样的。有一段时间,我有一些标签显示了一些骨骼的不同位置,它们都在变化。那就是说这和我把它放进字典有关

这是我的输入法:

        JointCollection joints = skele.Joints;
        List<Bone> temp = current_bones;
        Frame temp_f = new Frame(temp);
        Joint h_j = joints[JointType.Head];
        foreach (Joint j in joints)
        {
            try
            {
                switch (j.JointType)
                {
                    #region cases
                    case (JointType.Head):
                        temp_f.frame_bones["Head"].setPosition(j.Position.X, j.Position.Y, j.Position.Z);
                        break;
...Other stuff that basically repeats but with different jointtypes
                }
            }
            catch (Exception ex) { /*MessageBox.Show("Error getting joints: " + ex.Message);*/ }
        }
        if (recording)
        {
            if (newR)
            {
                bvhBuilder.resetAnimation();    //Resets a list of frames
                newR = false;
            }
            bvhBuilder.add_frame(temp_f);//adds a frame to the list
        }
我的BVHBuilder类中的相关内容:

List<Bone> current_bones = new List<Bone>();
    Frame current_frame;
    List<Frame> animation_frames = new List<Frame>();
    public BVHBuilder(List<Bone> bones)
    {
        current_bones = bones;
    }
public String build()
    {
        StringBuilder builder = new StringBuilder();
        builder.AppendLine(build_bones());
        builder.AppendLine(build_anim());
        return builder.ToString();
    }

 public String build_anim()
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("MOTION");
        sb.AppendLine("Frames: " + getFrameCount());
        sb.AppendLine("Frame Time: " + (float)((float)1/(float)30));
        foreach (Frame frame in animation_frames)
        {
            String line = "";
            int b_i = 0;
            float root_x = frame.root.x;
            float root_y = frame.root.y;
            float root_z = frame.root.z;
            Console.WriteLine("Root: (" + root_x + "," + root_y + "," + root_z + ")"); 
            for (int i = 0; i < frame.frame_bones.Count; i++)
            {
                Bone bone = frame.frame_bones.Values.ElementAt(i);
                line += (bone.x - root_x) + " ";
                line += (bone.y - root_y) + " ";
                if (b_i >= frame.frame_bones.Count) { line += (root_z - bone.z); }   //Don't want a space at the end
                else { line += (root_z - bone.z) + " "; }

                b_i++;
            }
            sb.AppendLine(line);
        }
        return sb.ToString();
    }
我知道这需要很多代码,但我已经试着调试了大概4个小时了。希望一双新的眼睛能帮我找到问题所在

顺便说一句,输出文件是这样的:

HIERARCHY
ROOT Hip_C
{
OFFSET 0 0 0
CHANNELS 3 Xposition Yposition Zposition
JOINT Spine
{
    OFFSET 0 0 0
    CHANNELS 3 Xposition Yposition Zposition
    JOINT Shoulder_C
    {
        OFFSET 0 0 0
        CHANNELS 3 Xposition Yposition Zposition
        JOINT Head
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
        }
        JOINT Shoulder_R
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Elbow_R
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
                JOINT Wrist_R
                {
                    OFFSET 0 0 0
                    CHANNELS 3 Xposition Yposition Zposition
                    JOINT Hand_R
                    {
                        OFFSET 0 0 0
                        CHANNELS 3 Xposition Yposition Zposition
                    }
                }
            }
        }
        JOINT Shoulder_L
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Elbow_L
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
                JOINT Wrist_L
                {
                    OFFSET 0 0 0
                    CHANNELS 3 Xposition Yposition Zposition
                    JOINT Hand_L
                    {
                        OFFSET 0 0 0
                        CHANNELS 3 Xposition Yposition Zposition
                    }
                }
            }
        }
    }
}
JOINT Hip_R
{
    OFFSET 0 0 0
    CHANNELS 3 Xposition Yposition Zposition
    JOINT Knee_R
    {
        OFFSET 0 0 0
        CHANNELS 3 Xposition Yposition Zposition
        JOINT Ankle_R
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Foot_R
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
            }
        }
    }
}
JOINT Hip_L
{
    OFFSET 0 0 0
    CHANNELS 3 Xposition Yposition Zposition
    JOINT Knee_L
    {
        OFFSET 0 0 0
        CHANNELS 3 Xposition Yposition Zposition
        JOINT Ankle_L
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Foot_L
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
            }
        }
    }
}
}



MOTION
Frames: 210
 Frame Time: 0.03333334
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

…这种情况持续了一段时间

您只在每个的前做了一次临时,但您总是将相同的列表添加到字典中


此外,您还可以使用
BVHBuilder.add_frame
,当该页面上似乎没有声明任何
add_frame
时。。。我想你的意思是框架或者省略了代码。

你只在每个前做了一次temp\u f,但是你总是把相同的列表添加到字典中


此外,您还可以使用
BVHBuilder.add_frame
,当该页面上似乎没有声明任何
add_frame
时。。。我想你的意思是
Frame
或者省略了代码。

嗯,这可能与Frame类的一些问题有关吧?因为我创建了一个列表并将数据直接放入其中,现在它工作正常。

好吧,它可能与frame类的一些问题有关?因为我创建了一个列表,并将数据直接放入其中,现在效果很好。

这应该是我在这方面见过的最长的问题了!我知道。。我没有别的办法问它xD。这应该是我见过的最长的问题了!我知道。。我没有别的办法问它xD.Ya。我不知道怎么。。。顺便说一句,这是.addframe:public void add_frame(frame frame){animation_frames.add(frame);}Ya。我不知道怎么。。。顺便说一句,这是.addframe:public void add_frame(frame frame){animation_frames.add(frame);}
class Frame
{
    public Dictionary<String, Bone> frame_bones = new Dictionary<String, Bone>();
    public Bone root = null;
    int root_pos = 0;

    public Frame(List<Bone> bones)
    {
        int i = 0;
        foreach (Bone b in bones)
        {
            frame_bones.Add(b.name,b);
            if (b.root) { root_pos = i; root = b; }
            i++;
        }
    }
}
private void saveAnim()
    {
        int times = 0;
        String path = "";
        Boolean exists = true;
        while (exists)
        {
            path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\" + "nectrecord" + times + ".txt";
            exists = File.Exists(path);
            times++;
        }
        currP = path;
        Console.WriteLine(currP);
        StreamWriter sw = new StreamWriter(currP);
        String write = bvhBuilder.build();
        int max_i = write.Length;
        progressBar1.Maximum = max_i;
        int c_i = 0;
        foreach (char c in write)
        {
            sw.Write(c);
            c_i++;
            progressBar1.Value = c_i;
        }
        sw.Flush();//make sure everything wrote
        sw.Close();
        MessageBox.Show("Saved to :" + currP);
    }
HIERARCHY
ROOT Hip_C
{
OFFSET 0 0 0
CHANNELS 3 Xposition Yposition Zposition
JOINT Spine
{
    OFFSET 0 0 0
    CHANNELS 3 Xposition Yposition Zposition
    JOINT Shoulder_C
    {
        OFFSET 0 0 0
        CHANNELS 3 Xposition Yposition Zposition
        JOINT Head
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
        }
        JOINT Shoulder_R
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Elbow_R
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
                JOINT Wrist_R
                {
                    OFFSET 0 0 0
                    CHANNELS 3 Xposition Yposition Zposition
                    JOINT Hand_R
                    {
                        OFFSET 0 0 0
                        CHANNELS 3 Xposition Yposition Zposition
                    }
                }
            }
        }
        JOINT Shoulder_L
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Elbow_L
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
                JOINT Wrist_L
                {
                    OFFSET 0 0 0
                    CHANNELS 3 Xposition Yposition Zposition
                    JOINT Hand_L
                    {
                        OFFSET 0 0 0
                        CHANNELS 3 Xposition Yposition Zposition
                    }
                }
            }
        }
    }
}
JOINT Hip_R
{
    OFFSET 0 0 0
    CHANNELS 3 Xposition Yposition Zposition
    JOINT Knee_R
    {
        OFFSET 0 0 0
        CHANNELS 3 Xposition Yposition Zposition
        JOINT Ankle_R
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Foot_R
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
            }
        }
    }
}
JOINT Hip_L
{
    OFFSET 0 0 0
    CHANNELS 3 Xposition Yposition Zposition
    JOINT Knee_L
    {
        OFFSET 0 0 0
        CHANNELS 3 Xposition Yposition Zposition
        JOINT Ankle_L
        {
            OFFSET 0 0 0
            CHANNELS 3 Xposition Yposition Zposition
            JOINT Foot_L
            {
                OFFSET 0 0 0
                CHANNELS 3 Xposition Yposition Zposition
            }
        }
    }
}
}



MOTION
Frames: 210
 Frame Time: 0.03333334
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05713073 -0.009174455 -0.2937571 0.2087359 -0.2028138 -0.902887 0.2087359 -0.2028138 -0.9028869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0