2016-06-21 39 views
1

我創建了PlayPage.xaml,PlayPage.xaml.cs和Game.cs文件。 PlayPage.xaml.cs有兩個變量windowWidth和windowHeight。UWP app .cs文件從xaml.cs繼承靜態變量

我想從Game.c中訪問兩個公共靜態變量。

Game.cs:

namespace UwpApp 
{ 
    class Game 
    { 
     static Rectangle rectangle; 
     PlayPage pg = new PlayPage(); 

     //Create a rectangle 
     public Rectangle draw() 
     { 
      rectangle = new Rectangle(); 
      rectangle.Width = 70; 
      rectangle.Height = 70; 
      rectangle.Fill = new SolidColorBrush(Colors.Green); 
      Canvas.SetLeft(rectangle, randPos()); 
      Canvas.SetTop(rectangle, randPos()); 
      return rectangle; 
     } 

     //Create a random X and Y position 
     private Int32 randPos() 
     { 
      Random rnd = new Random(); 
      Debug.WriteLine(pg.windowWidth); 
      return rnd.Next(0 , (int)pg.windowWidth); 
     } 
    } 
} 

PlayPage.xaml.cs:

namespace UwpApp 
{ 
    /// <summary> 
    /// An empty page that can be used on its own or navigated to within a Frame. 
    /// </summary> 
    public partial class PlayPage : Page 
    { 
     DispatcherTimer timer; 
     Rectangle rect; 
     bool isTapped; 
     public static double windowWidth, windowHeight; 

     Game game = new Game(); 

     public PlayPage() 
     { 
      this.InitializeComponent(); 

      startCounter.Visibility = Visibility.Collapsed; 
      isTapped = false; 
     } 

     private void Load_Variable(object sender, RoutedEventArgs e) 
     { 
      windowWidth = canvas.ActualWidth; 
      windowHeight = canvas.ActualHeight; 
     } 

     //Counter animation. (Number opacity, fall) 
     private void counterAnimation() 
     { 
       startCounter.Visibility = Visibility.Visible; 

       //Set Counter Horizontal Align 
       double left = (canvas.ActualWidth - startCounter.ActualWidth)/2; 
       Canvas.SetLeft(startCounter, left); 

       Storyboard storyboard = new Storyboard(); 

       DoubleAnimation opacityAnim = new DoubleAnimation(); 
       DoubleAnimation fallAnim = new DoubleAnimation(); 

       opacityAnim.From = 1; 
       opacityAnim.To = 0; 
       opacityAnim.Duration = new Duration(TimeSpan.FromSeconds(1)); 
       opacityAnim.AutoReverse = false; 
       opacityAnim.RepeatBehavior = new RepeatBehavior(3); 

       Storyboard.SetTarget(opacityAnim, this.startCounter); 
       Storyboard.SetTargetProperty(opacityAnim, "(UIElement.Opacity)"); 

       fallAnim.From = -115; 
       fallAnim.To = canvas.ActualHeight/2; 
       fallAnim.Duration = new Duration(TimeSpan.FromSeconds(1)); 
       fallAnim.AutoReverse = false; 
       fallAnim.RepeatBehavior = new RepeatBehavior(3); 

       Storyboard.SetTarget(fallAnim, this.startCounter); 
       Storyboard.SetTargetProperty(fallAnim, "(Canvas.Top)"); 

       storyboard.Children.Add(opacityAnim); 
       storyboard.Children.Add(fallAnim); 

       storyboard.Begin(); 
     } 

     //Countdown Timer 
     private void countDown() 
     { 
      timer = new DispatcherTimer(); 
      timer.Tick += startCounter_CountDown; 
      timer.Interval = new TimeSpan(0, 0, 1); 
      timer.Start(); 
     } 

     //Change Countdown value 
     private void startCounter_CountDown(object sender, object e) 
     { 
      int counterNum = int.Parse(startCounter.Text); 
      counterNum -= 1; 
      startCounter.Text = counterNum.ToString(); 

      if (counterNum == 1) 
      { 
       timer.Stop(); 
       StartedGame(); 
      } 
     } 

     //Tap or Click to start the game 
     private void TapToStart(object sender, TappedRoutedEventArgs e) 
     { 
      if(!isTapped) 
      { 
       isTapped = true; 
       counterAnimation(); 
       countDown(); 
       this.TapToStartText.Visibility = Visibility.Collapsed; 
      } 
     } 

     //Create rectangles 
     private void StartedGame() 
     { 
      rect = game.draw(); 
      canvas.Children.Add(game.draw()); 
      Debug.WriteLine(windowWidth.ToString()); 
     } 
    } 
} 

一兩件事:我得到一個錯誤這條線:播放頁PG =新的播放頁() ; Error (pic)

回答

3

圖片中的錯誤是由於無限遞歸,正如它所說。遊戲的構造函數實例化一個新的PlayPage。 PlayPage的構造函數實例化一個新遊戲。其中實例化新的PlayPage。其中實例化新的遊戲。並繼續。

靜態成員通過類名而不是實例來訪問。像這樣:

PlayPage.windowWidth 
+1

此外,在UWP中最好避免使用「靜態」數據。 –

+0

它的工作!非常感謝你的幫助。 – Mark