Silverlight特定图像向右移动

时间:2009-05-15 17:10:31

标签: wpf silverlight

我正在生成一组图像以形成人体,以便我可以用于物理引擎。 生成的图像位于特定的用户控件中,我在其中设置每个图像的尺寸和坐标。然后将该usercontrol加载到另一个用户控件中,但由于某些原因,在加载图像时,我命名的一个特定图像(rightBicep)向右移动。这是一个截图:

alt text http://img193.imageshack.us/img193/592/imageshift.jpg

我用虚线说明了图像的位置,绿色的虚线表示图像的位置,红色的虚线表示图像的显示位置。

奇怪的是它下面的图像(称为rightForearm)从它获取它的LeftPosition,并且在调试期间它们具有完全相同的leftProperty值。这是语法:

        public void generateRightBicep(string imageUrl)
        {
            rightBicep = new Image();            
            rightBicep.Name = CharacterName + "rightbicep";
            Uri imageUri = new Uri(imageUrl, UriKind.Relative);
            LayoutRoot.Children.Add(rightBicep);

            rightBicep.Source = new BitmapImage(imageUri);
            rightBicep.ImageOpened += new EventHandler<RoutedEventArgs>(bodyPart_ImageOpened);

        }

       public void rightBicepLoaded()
        {
            var bi = waitTillImageLoad(rightBicep.Name);
            rightBicep.Height = elbowToArmpit + (2 * palm);
            rightBicep.Width = ratio(bi.PixelHeight, bi.PixelHeight, rightBicep.Height); // to be determined

            Vector2 topVector;
            topVector.X = (float)(Convert.ToDouble(torso.GetValue(Canvas.LeftProperty)) - palm);
            topVector.Y = (float)(Convert.ToDouble(neck.GetValue(Canvas.TopProperty)) + neck.Height);

            if (!faceRight)
            {
                perspectiveVectorHeight(ref topVector, ref rightBicep, torso.Width);
                rightBicep.Width = ratio(bi.PixelHeight, bi.PixelHeight, rightBicep.Height);
            }

            rightBicep.SetValue(Canvas.LeftProperty, Convert.ToDouble(topVector.X));
            rightBicep.SetValue(Canvas.TopProperty, Convert.ToDouble(topVector.Y));
            rightBicep.SetValue(Canvas.ZIndexProperty, rightBicepZindex);
            generateRightShoulder();
        }


public void generateRightForearm(string imageUrl)
        {
            rightForearm = new Image();
            rightForearm.Name = CharacterName + "rightforearm";
            Uri imageUri = new Uri(imageUrl, UriKind.Relative);
            LayoutRoot.Children.Add(rightForearm);
            rightForearm.Source = new BitmapImage(imageUri);
            rightForearm.ImageOpened += new EventHandler<RoutedEventArgs>(bodyPart_ImageOpened);

        }

 public void rightForearmLoaded()
        {
            var bi = waitTillImageLoad(rightForearm.Name);
            rightForearm.Height = (elbowToHandTip - handLength) + palm;
            rightForearm.Width = ratio(bi.PixelHeight, bi.PixelWidth, rightForearm.Height);

            Vector2 topVector;
            if (faceRight)
            {
                topVector.X = (float)(Convert.ToDouble(rightBicep.GetValue(Canvas.LeftProperty)));
                topVector.Y = (float)(Convert.ToDouble(rightBicep.GetValue(Canvas.TopProperty)) + rightBicep.Height - palm);
            }
            else
            {
                topVector.X = (float)(Convert.ToDouble(leftBicep.GetValue(Canvas.LeftProperty)));
                topVector.Y = (float)(Convert.ToDouble(leftBicep.GetValue(Canvas.TopProperty)) + leftBicep.Height - palm);

                perspectiveVectorHeight(ref topVector, ref rightForearm, torso.Width);
                rightForearm.Width = ratio(bi.PixelHeight, bi.PixelWidth, rightForearm.Height);
            }

            rightForearm.SetValue(Canvas.LeftProperty, Convert.ToDouble(topVector.X));
            rightForearm.SetValue(Canvas.TopProperty, Convert.ToDouble(topVector.Y));
            rightForearm.SetValue(Canvas.ZIndexProperty, rightForearmZIndex);
            generateRightElbow();
        }

现在我加在一起的所有值都是我预设的一组双打,属性faceRight是为了确定人体是朝右还是左,以确定身体部位的位置(因为如果是右手)当人体转向另一个方向时,看起来在左侧。)

如果您注意到右前方正在采用右侧股的左侧属性,那么从技术上来说,它应该显示在它下面而不是。我还调试了用户控件,并且左边的属性都是-3。

PS。当所有imageOpened事件都被触发时调用事件时,我调用方法rightbicepLoadedrightforearmLoaded

关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

找出原因,在我的方法比例中,它应该采用高度和宽度,然后我把它放到2个高度