Я делаю очень простую вещь, моя цель - переместить один скелет в зависимости от положения другого скелета, для этого я основываюсь на позиции HipCenter. (Этот алгоритм может быть неправильным, этот вопрос касается исключения, возникающего в цикле foreach)
Вот мой фактический код:
public static Skeleton MoveTo(this Skeleton skOrigin, Skeleton skDestiny)
{
Skeleton skReturn = skOrigin; // just making a copy
// find the factor to move, based on the HipCenter.
float whatToMultiplyX = skOrigin.Joints[JointType.HipCenter].Position.X / skDestiny.Joints[JointType.HipCenter].Position.X;
float whatToMultiplyY = skOrigin.Joints[JointType.HipCenter].Position.Y / skDestiny.Joints[JointType.HipCenter].Position.Y;
float whatToMultiplyZ = skOrigin.Joints[JointType.HipCenter].Position.Z / skDestiny.Joints[JointType.HipCenter].Position.Z;
SkeletonPoint movedPosition = new SkeletonPoint();
Joint movedJoint = new Joint();
foreach (JointType item in Enum.GetValues(typeof(JointType)))
{
// Updating the position
movedPosition.X = skOrigin.Joints[item].Position.X * whatToMultiplyX;
movedPosition.Y = skOrigin.Joints[item].Position.Y * whatToMultiplyY;
movedPosition.Z = skOrigin.Joints[item].Position.Z * whatToMultiplyZ;
// Setting the updated position to the skeleton that will be returned.
movedJoint.Position = movedPosition;
skReturn.Joints[item] = movedJoint;
}
return skReturn;
}
Использование F10 для отладки все работает нормально во втором проходе в цикле foreach. Когда я прохожу во второй раз в foreach, я получаю исключение в этой строке
skReturn.Joints[item] = movedJoint;
Исключение говорит:
JointType index value must match Joint.JointType
Но на самом деле ценностью является Позвоночник.
Что случилось?
Joints
по индексу? Завтра я попытаюсь раскрутить свой Kinect и протестировать цикл, чтобы посмотреть, смогу ли я воспроизвести его. - person Nicholas Pappas   schedule 25.11.2012