2013-07-24 25 views
1

希望你能帮上忙。对一些人来说,陷入一个简单的问题,我是一个小菜鸟。试图做的是让Silverlight/C#中的图像对象从画布的顶部随机放置,此时它从右向左移动。Silverlight C#图像对象

这是来自对象类。

namespace LOLWordGame 
{ 
    public class LetterA : ContentControl, IGameEntity 
    { 
     private int speed = 0; 

     public LetterA() 
     { 
      Image LetterImage = new Image(); 
      LetterImage.Height = 45; 
      LetterImage.Width = 45; 
      LetterImage.Source = new BitmapImage(new Uri("images/a.png", UriKind.RelativeOrAbsolute)); 
      this.Content = LetterImage; 

      Random random = new Random(); 
      Canvas.SetLeft(this, -20); 
      Canvas.SetTop(this, random.Next(250, 850)); //randomly 
      speed = random.Next(1, 5); 
     } 

     public void Update(Canvas c) 
     { 
      Move(Direction.Down); 
      if (Canvas.GetLeft(this) < 100) 
      { 
       c.Children.Remove(this); 
      } 
     } 

     public void Move(Direction direction) 
     { 
      Canvas.SetLeft(this, Canvas.GetLeft(this) - speed); 
     } 
    } 
} 

在此先感谢。

回答

0

对于一个解决方案:也许你应该使用Canvase.SetTop Method而不是SetLeft方法?希望这可以帮助。

次要的..我敢肯定下面的代码不是解决你的问题,但我重构了一下。尝试使用collection initializers。你有一个方法Move,你只能调用一次,该方法只有一行代码:没有理由在我看来这样做的方法。此外,该方法需要一个参数,但不在方法内部使用它。

public class LetterA : ContentControl, IGameEntity 
{ 
    private int speed = 0; 

    public LetterA() 
    { 
     var letterImage = new Image() 
     { 
      Height = 45, 
      Width = 45, 
      Source = new BitmapImage(new Uri("images/a.png", UriKind.RelativeOrAbsolute)) 
     }; 
     Content = letterImage; 

     var random = new Random(); 
     Canvas.SetLeft(this, -20); 
     Canvas.SetTop(this, random.Next(250, 850)); 
     speed = random.Next(1, 5); 
    } 

    public void Update(Canvas c) 
    { 
     Canvas.SetLeft(this, Canvas.GetLeft(this) - speed); 
     if (Canvas.GetLeft(this) < 100) 
      c.Children.Remove(this); 
    } 
} 
+0

感谢您的帮助Abbas –