2016-11-23 4 views
-2

У меня есть частный метод - класс ball.cs в witch. Я хочу изменить тип bool из класса margins.cs, но я получаю ошибку. Ссылка на объект требуется для не- статическое поле, метод или свойство «PingPong.Margins.win». Может кто-нибудь мне помочь?Как я могу устранить эту ошибку? C#

это код мяч класс:

namespace PingPong 
{ 
public class Ball 
{ 

    private PictureBox ball; 
    Random rand= new Random(); 
    Player leftSidePlayer, rightSidePlayer; 

    int xSpeed, ySpeed; 

    public Ball(PictureBox aBall, Player leftSidePlayer, Player rightSidePlayer) 
    { 

     this.ball = aBall; 
     this.leftSidePlayer = leftSidePlayer; 
     this.rightSidePlayer = rightSidePlayer; 
     xSpeed = 1; 
     ySpeed = 2; 
     resetBall(); 
    } 

    internal void processmove() 
    { 
     var bottom = Margins.bottomOfWorld - ball.Height; 
     DoMove(); 

     if(ball.Location.Y >= bottom || ball.Location.Y <= Margins.topOfWorld) 
     { 
      ySpeed *= -1; 
     } 

     if (ball.Location.X <= Margins.leftOfWorld) 
     { 
      Score(leftSidePlayer); 
     } 
     else if (ball.Location.X >= Margins.rightOfWorld - ball.Width) 
     { 
      Score(rightSidePlayer); 
     } 

     if ((leftSidePlayer.paddle.Bounds.IntersectsWith(ball.Bounds)) || (rightSidePlayer.paddle.Bounds.IntersectsWith(ball.Bounds))) 
     { 
      xSpeed *= -1; 
      if ((ySpeed <= 6 && ySpeed >=-6) && (xSpeed <= 5 && xSpeed >=-5)) 
      { 
       if(ySpeed < 0) 
       { 
        ySpeed -= 1; 
       }else 
       { 
        ySpeed += 1; 
       } 

       if (xSpeed < 0) 
       { 
        xSpeed -= 1; 

       } 
       else 
       { 
        xSpeed += 1; 
       } 
      } 
     } 


    } 

    private int DoMove() 
    { 
     var bottom = Margins.bottomOfWorld - ball.Height; 
     ball.Location = new Point(ball.Location.X + xSpeed, Math.Max(Margins.topOfWorld, Math.Min(bottom, ball.Location.Y + ySpeed))); 
     return bottom; 
    } 

    private void Score(Player winningPlayer) 
    { 
     winningPlayer.scoreNumber++; 

     if(winningPlayer.scoreNumber == 7) 
     { 
      if(winningPlayer == leftSidePlayer ) 
      { 
       Margins.win = true; 
      }else if(winningPlayer == rightSidePlayer) 
      { 
       Margins.win = false; 
      } 


     } 


     resetBall(); 
    } 

    private void resetBall() 
    { 
     ball.Location = new Point((Margins.leftOfWorld + Margins.rightOfWorld)/2, (Margins.bottomOfWorld + Margins.topOfWorld)/2); 
     do 
     { 
      xSpeed = rand.Next(-3, 3); 
      ySpeed = rand.Next(-3, 3); 
     } while(Math.Abs(xSpeed) + Math.Abs(ySpeed) <= 3); 

    } 

} 

}

и это код поля класса:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace PingPong 
{ 
    public class Margins 
    { //Marimea ferestrei 1000; 600 
     public const int topOfWorld = 0, bottomOfWorld = 560, leftOfWorld =0, rightOfWorld = 1000; 
     public bool? win = null; 
    } 
} 

ошибка я получаю в частном ничтожной счет, когда я использую margins.win = true и margins.win = false.

+0

Большинство ошибок C#, с которыми вы сталкиваетесь, можете просто найти в google, и вы найдете вопрос stackoverflow, который должен помочь. если это не так, вы должны включить свое исследование по своему собственному вопросу. – Sayse

+0

Вы пытаетесь отредактировать его как статическую переменную, но это не так, если вам нужно, чтобы он был статическим, статическим статическим статическим bool? win = null; – genichm

+1

В дополнение к этому дубликат, пожалуйста, прочитайте https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ за советом по написанию хорошего вопроса. В частности, попробуйте придумать [mcve] - большая часть кода в этом вопросе не имеет значения. –

ответ

0

Теперь у вас есть класс с некоторыми статическими (или постоянными) переменными. Кроме того, существует переменная экземпляра win. Это означает, что вам нужно создать экземпляр Margins, чтобы его можно было установить или установить.

Если вам действительно нужен статический класс, так как всегда может быть только один Margins экземпляр, сделать класс и его статические переменные:

public static class Margins 
{ //Marimea ferestrei 1000; 600 
    public const int topOfWorld = 0, bottomOfWorld = 560, leftOfWorld =0, rightOfWorld = 1000; 
    public static bool? win = null; 
} 

Если нет, то сделать правильный экземпляр Margins:

private Margins margins = new Margins(); 

this.margins.win = true;