Tôi mới bắt đầu với lập trình trong C# và tôi chỉ đang làm một trò chơi pingpong. Tôi đang sử dụng các chủ đề - một cho va chạm, một cho di chuyển, một cho bức tranh.trò chơi pingpong chạy nhanh hơn khi tôi mở STEAM - tại sao?
Câu hỏi của tôi là lý do tại sao chương trình chạy nhanh hơn, khi tôi mở hơi nước: D với tôi, nó có vẻ như một ý nghĩa vô nghĩa.Chúng tôi chậm hơn - quả bóng chậm hơn và các miếng đệm quá. Có vẻ như bộ xử lý là lười biếng để làm công việc hoặc một cái gì đó như thế. Nó đang xảy ra trong thời gian thực - tôi mở trò chơi, nó là chậm, tôi mở hơi nước, nó là nhanh hơn và sau đó tôi gần hơi nước và nó là chậm một lần nữa.
Suy nghĩ đầu tiên của tôi là vì thẻ đồ họa kép nhưng làm cho nó sử dụng thẻ nvidia không được trợ giúp.
tình huống khác: tôi mở trò chơi - chậm, mở skype - trò chơi là nhanh hơn, skype được nạp - Trò chơi được chậm, đóng skype - trò chơi là nhanh chóng, đóng skype - trò chơi là chậm ..
Làm thế nào để làm cho các trò chơi để sử dụng bộ vi xử lý luôn giống nhau?
mã của tôi tôi di chuyển phương pháp là
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;
Dưới đây là một số mã thêm về vụ va chạm với biên giới và các điểm đếm ... và nó và với waitevent.
waitevent.WaitOne(5);
Tôi đoán đó là vì việc ép xung tự động của bộ xử lý, nhưng tôi là một newbie ..: D
Dưới đây là toàn bộ điều trong một thread
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);
}
}
đây chính là loại điều khiến Windows rất rất, rất đáng sợ ... – wroniasty
Bạn nên giải thích chính xác những gì diễn ra nhanh hơn và chậm hơn. Do nhiều khung hình hơn có được hiển thị hay không, hoặc mã 'move()' của bạn chỉ hoạt động với các giá trị lớn hơn của 'pad1N' để bạn thấy các miếng đệm di chuyển nhanh hơn? – CodeCaster
Giá trị của pad1Down, pad2Up luôn là 0, -1 hoặc 1. Vì vậy, các chủ đề phải được nhanh hơn - nó lặp lại thường xuyên hơn –