У меня есть частный метод - класс 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.
Большинство ошибок C#, с которыми вы сталкиваетесь, можете просто найти в google, и вы найдете вопрос stackoverflow, который должен помочь. если это не так, вы должны включить свое исследование по своему собственному вопросу. – Sayse
Вы пытаетесь отредактировать его как статическую переменную, но это не так, если вам нужно, чтобы он был статическим, статическим статическим статическим bool? win = null; – genichm
В дополнение к этому дубликат, пожалуйста, прочитайте https://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/ за советом по написанию хорошего вопроса. В частности, попробуйте придумать [mcve] - большая часть кода в этом вопросе не имеет значения. –