Я начинаю программировать в С#, и я просто играю в пинг-понг. Я использую нити - один для столкновения, один для перемещения, один для рисования.
Мой вопрос в том, почему программа работает быстрее, когда я открываю пар: D мне кажется глупостью. Замедление медленнее, я имею в виду - мяч медленнее и подушки тоже. Похоже, процессор ленив, чтобы сделать работу или что-то в этом роде. Это происходит в реальном времени - я открываю игру, она медленная, я открываю пар, это быстрее, а затем я закрываю пар, и он медленный снова.
Моя первая мысль заключалась в том, что это потому, что двойная видеокарта, но использующая карту nvidia, не помогает.
Другая ситуация: я открываю игру - медленный, открытый скайп - игра быстрее, скайп загружен - игра медленная, закрытие скайпа - игра быстрая, закрытая скайп - игра медленная..
Как заставить игру использовать процессор всегда одинаково?
мой код я move метод
public void move()
{
DelegateSetScore d = new DelegateSetScore(SetScore);
while (!isDisposing)
{
pad1.Y = pad1.Y + 4 * pad1Down + 4 * pad1Up;
if (pad1.Y < 0) { pad1.Y = 0; }
if (pad1.Y + pad1.Height > HEIGHT) { pad1.Y = HEIGHT - pad1.Height; }
pad2.Y = pad2.Y + 4 * pad2Down + 4 * pad2Up;
if (pad2.Y < 0) { pad2.Y = 0; }
if (pad2.Y + pad2.Height > HEIGHT) { pad2.Y = HEIGHT - pad2.Height; }
ball.X = ball.X + 6 * ballXDirection;
ball.Y = ball.Y + 2 * ballYDirection;
Вот еще один код о столкновении с границами и подсчете очков... и он и с waitevent.
waitevent.WaitOne(5);
Я предполагаю, что это происходит из-за автоматического разгона процессора, но я новичок..: D
Вот все в одном потоке
public void bigthread()
{
DelegateSetScore d = new DelegateSetScore(SetScore);
while (!isDisposing)
{
//move
pad1.Y = pad1.Y + 4 * pad1Down + 4 * pad1Up;
if (pad1.Y < 0) { pad1.Y = 0; }
if (pad1.Y + pad1.Height > HEIGHT) { pad1.Y = HEIGHT - pad1.Height; }
pad2.Y = pad2.Y + 4 * pad2Down + 4 * pad2Up;
if (pad2.Y < 0) { pad2.Y = 0; }
if (pad2.Y + pad2.Height > HEIGHT) { pad2.Y = HEIGHT - pad2.Height; }
ball.X = ball.X + 6 * ballXDirection;
ball.Y = ball.Y + 2 * ballYDirection;
if (ball.X < 0)
{
ballXDirection = 1;
intScorePlayer2++;
this.BeginInvoke(d, intScorePlayer2, 2);
}
if (ball.X + ball.Width > WIDTH)
{
ballXDirection = -1;
intScorePlayer1++;
this.BeginInvoke(d, intScorePlayer1, 1);
}
if (ball.Y < 0)
{
ballYDirection = 1;
}
if (ball.Y + ball.Height > HEIGHT)
{
ballYDirection = -1;
}
//collision
if ((pad1.X + pad1.Width > ball.X) && (ball.X + ball.Width > pad1.X))
if ((pad1.Y + pad1.Height > ball.Y) && (ball.Y + ball.Height > pad1.Y))
{
ballXDirection = 1;
if (pad1Down == 1) { ballYDirection = 1; }
if (pad1Up == -1) { ballYDirection = -1; }
}
if ((pad2.X + pad2.Width > ball.X) && (ball.X + ball.Width > pad2.X))
if ((pad2.Y + pad2.Height > ball.Y) && (ball.Y + ball.Height > pad2.Y))
{
ballXDirection = -1;
if (pad2Down == 1) { ballYDirection = 1; }
if (pad2Up == -1) { ballYDirection = -1; }
}
//paint - platno is graphics from picturebox
Platno.Clear(Color.Black);
Platno.FillRectangle(Brushes.Orange, pad1);
Platno.FillRectangle(Brushes.Orange, pad2);
Platno.FillRectangle(Brushes.Green, ball);
waitevent.WaitOne(10);
}
}