需要C#的帮助,问题是我自己将代码从VB.NET移植到C#I端口,然后检查翻译器,但我的问题是Error 14 'System.Collections.Generic.List<GTA.Vector2>' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.Collections.Generic.List<GTA.Vector2>' could be found (are you missing a using directive or an assembly reference?)
和代码问题
private void GraphicsEventHandler(object sender, GTA.GraphicsEventArgs e)
{
foreach (TSkeleton s in skeletonList)
{
if (s.bonePos2D.Count > 0)
{
//e.Graphics.DrawLine(s.bonePos2D.Item(0).X, s.bonePos2D.Item(0).Y, s.bonePos2D.Item(1).X, s.bonePos2D.Item(1).Y, 2, Color.White)
e.Graphics.DrawLine(s.bonePos2D.Item[1].X, s.bonePos2D.Item[1].Y, s.bonePos2D.Item[2].X, s.bonePos2D.Item[2].Y, s.sizeMulti, Color.Red);
e.Graphics.DrawLine(s.bonePos2D.Item[1].X, s.bonePos2D.Item[1].Y, s.bonePos2D.Item[3].X, s.bonePos2D.Item[3].Y, s.sizeMulti, Color.Red);
e.Graphics.DrawLine(s.bonePos2D.Item[2].X, s.bonePos2D.Item[2].Y, s.bonePos2D.Item[4].X, s.bonePos2D.Item[4].Y, s.sizeMulti, Color.Blue);
e.Graphics.DrawLine(s.bonePos2D.Item[3].X, s.bonePos2D.Item[3].Y, s.bonePos2D.Item[5].X, s.bonePos2D.Item[5].Y, s.sizeMulti, Color.Blue);
e.Graphics.DrawLine(s.bonePos2D.Item[4].X, s.bonePos2D.Item[4].Y, s.bonePos2D.Item[6].X, s.bonePos2D.Item[6].Y, s.sizeMulti, Color.Yellow);
e.Graphics.DrawLine(s.bonePos2D.Item[5].X, s.bonePos2D.Item[5].Y, s.bonePos2D.Item[7].X, s.bonePos2D.Item[7].Y, s.sizeMulti, Color.Yellow);
e.Graphics.DrawLine(s.bonePos2D.Item[6].X, s.bonePos2D.Item[6].Y, s.bonePos2D.Item[8].X, s.bonePos2D.Item[8].Y, s.sizeMulti, Color.Orange);
e.Graphics.DrawLine(s.bonePos2D.Item[7].X, s.bonePos2D.Item[7].Y, s.bonePos2D.Item[9].X, s.bonePos2D.Item[9].Y, s.sizeMulti, Color.Orange);
e.Graphics.DrawLine(s.bonePos2D.Item[1].X, s.bonePos2D.Item[1].Y, s.bonePos2D.Item[10].X, s.bonePos2D.Item[10].Y, s.sizeMulti, Color.Aqua);
e.Graphics.DrawLine(s.bonePos2D.Item[10].X, s.bonePos2D.Item[10].Y, s.bonePos2D.Item[11].X, s.bonePos2D.Item[11].Y, s.sizeMulti, Color.Aquamarine);
e.Graphics.DrawLine(s.bonePos2D.Item[10].X, s.bonePos2D.Item[10].Y, s.bonePos2D.Item[12].X, s.bonePos2D.Item[12].Y, s.sizeMulti, Color.Aquamarine);
e.Graphics.DrawLine(s.bonePos2D.Item[11].X, s.bonePos2D.Item[11].Y, s.bonePos2D.Item[13].X, s.bonePos2D.Item[13].Y, s.sizeMulti, Color.BlueViolet);
e.Graphics.DrawLine(s.bonePos2D.Item[12].X, s.bonePos2D.Item[12].Y, s.bonePos2D.Item[14].X, s.bonePos2D.Item[14].Y, s.sizeMulti, Color.BlueViolet);
e.Graphics.DrawLine(s.bonePos2D.Item[13].X, s.bonePos2D.Item[13].Y, s.bonePos2D.Item[15].X, s.bonePos2D.Item[15].Y, s.sizeMulti, Color.CadetBlue);
e.Graphics.DrawLine(s.bonePos2D.Item[14].X, s.bonePos2D.Item[14].Y, s.bonePos2D.Item[16].X, s.bonePos2D.Item[16].Y, s.sizeMulti, Color.CadetBlue);
e.Graphics.DrawLine(s.bonePos2D.Item[15].X, s.bonePos2D.Item[15].Y, s.bonePos2D.Item[17].X, s.bonePos2D.Item[17].Y, s.sizeMulti, Color.GreenYellow);
e.Graphics.DrawLine(s.bonePos2D.Item[16].X, s.bonePos2D.Item[16].Y, s.bonePos2D.Item[18].X, s.bonePos2D.Item[18].Y, s.sizeMulti, Color.GreenYellow);
for (Int16 c = 0; c <= 19; c++)
{
e.Graphics.DrawRectangle(s.bonePos2D.Item(c).X, s.bonePos2D.Item(c).Y, s.sizeMulti * 2, s.sizeMulti * 2, Color.White);
}
e.Graphics.DrawLine(s.bonePos2D.Item[0].X, s.bonePos2D.Item[0].Y, s.bonePos2D.Item[19].X, s.bonePos2D.Item[19].Y, s.sizeMulti * 4, Color.Red);
还有我创建骨骼的地方
foreach (TSkeleton s in skeletonList)
{
s.bonePos2D.Clear();
if (!s.p.isOnScreen)
continue;
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Head)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Neck)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftArmRoll)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightArmRoll)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftForearmTwist)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightForearmTwist)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftHand)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightHand)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftFinger1)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightFinger1)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Spine)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftThigh)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightThigh)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftCalfRoll)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightCalfRoll)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftFoot)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightFoot)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.LeftToe)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.RightToe)));
s.bonePos2D.Add(CoordToScreen(s.p.GetBonePosition(Bone.Head) + Vector3.WorldUp * 0.15f));
}
}
我在哪里创建列表
static List<TSkeleton> skeletonList = new List<TSkeleton>();
搜索解决方案但不成功。还有一个dll要求创建名为 ScriptHookDotNet
谢谢你的帮助。 此致,保罗。
答案 0 :(得分:2)
试试这个......
s.bonePos2D[1] //2nd bonePos2D item
答案 1 :(得分:1)
您只需要在每个列表访问中删除.Item
。那meass s.bonePos2D.Item[16].X
变为s.bonePos2D[16].X
。
这是因为C#了解如何正确使用indexers。 List<T>.Item
实际上是一个索引器,可以在文档中看到,因为它被定义为:public T this[int index] { get; set; }
on MSDN。