2009-05-15 7 views
1

Je génère un ensemble d'images pour former un corps humain que je peux utiliser pour un moteur physique. Les images générées sont dans un contrôle utilisateur spécifique dans lequel je définis les dimensions et les coordonnées de chaque image. Ce contrôle utilisateur est ensuite chargé dans un autre contrôle utilisateur, mais pour une raison quelconque lorsque les images sont chargées, une image spécifique que j'ai nommé (rightBicep) se déplace vers la droite. Voici une capture d'écran:Silverlight spécifique Image se déplaçant vers la droite

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

I ont illustré les positions des images avec des lignes en pointillés, la ligne pointillée verte est référenceurs à l'endroit où l'image doit être situé, et la ligne pointillée rouge est l'endroit où l'image est montré. La chose étrange est l'image ci-dessous (appelé rightForearm) prend son LeftPosition de lui, et quand au cours du débogage, ils ont exactement la même valeur leftProperty. Voici la syntaxe:

 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(); 
     } 

Maintenant, toutes les valeurs que je suis en ajoutant ensemble sont un groupe de doubles I prédéfini et la faceRight de la propriété est de dertmine si le corps humain est confronté à droite ou à gauche pour déterminer où les positions des les parties du corps (puisque si la main droite regarde du côté gauche quand le corps humain tourne dans l'autre sens).

Si vous remarquez que rightforearm prend la propriété de gauche du rightbicep, alors techniquement il devrait s'afficher directement sous ce qu'il n'est pas. J'ai également débogué le contrôle de l'utilisateur et les deux ont la propriété left de -3.

PS. J'appelle les méthodes rightbicepLoaded et rightforearmLoaded lorsqu'un événement est appelé lorsque tous les événements imageOpened ont tous été déclenchés.

Des idées sur pourquoi cela se passe-t-il?

Répondre

0

Trouvé pourquoi, dans mon rapport de méthode, il devrait prendre hieght et la largeur, et je mets et je mis 2 hieghts à la place

Questions connexes