01/10/2018, 09:23

Cách để làm mượt màn hình console

Em đang làm game snake bằng C, mọi thứ xong xuôi rồi chỉ có một thứ mà em chưa ưng ý và cũng không biết làm sao đó là: Khi em vòng lặp chạy game snake thì cuối mỗi vòng lặp em đều system("cls") rồi đầu vòng lặp sẽ là vẽ cái map ra. Do đó màn hình e cứ chớp chớp nhìn rất đau mắt.
Có anh chị nào biết cách khắc phục không ạ? Em cám ơn

Trần Hoàn viết 11:27 ngày 01/10/2018
stackoverflow.com
DareDev1l

Console.Clear() blinking

c#, console
asked by DareDev1l on 12:04AM - 13 Feb 15
Henry viết 11:31 ngày 01/10/2018

e hỏi trong C mà

Trần Hoàn viết 11:36 ngày 01/10/2018

Nguyên tắc thì là như nhau
“Try to sum all your scene in 1 string than draw it at once, this will (hide) the blinking effect to a certain point”

Trần Minh Thắng viết 11:28 ngày 01/10/2018

Game của bạn có dùng FPS không? ý là thời gian hết 1 lần lặp của bạn quá ngắn, làm cho khoảng thời gian giữa hai lần xoá màn hình quá thấp, vừa xoá xong mắt bạn chưa kịp nhìn cái vừa vẽ lại xoá tiếp màn hình. Thử 30 FPS xem sao?

Henry viết 11:27 ngày 01/10/2018

mình làm game console mặc dù đã tăng thời gian delay lên hẳn 1s nhưng nó vẫn giật

Trần Minh Thắng viết 11:28 ngày 01/10/2018

mình có thể xem qua vòng lặp bạn dùng trong game được không, trình tự mấy cái hàm update trạng thái game với với xoá và vẽ lại màn hình?

Henry viết 11:28 ngày 01/10/2018

Văn Dương viết 11:26 ngày 01/10/2018

Console sinh ra có phải để làm game đâu mà đòi nó phải đáp ứng tiêu chí của game.
Muốn không nháy thì phải có buffer, không clear mà vẽ lại.

Henry viết 11:32 ngày 01/10/2018

thực sự e cũng có đi search thì thấy có cái từ buffer này nhưng e không hiểu buffer đây làm cái gì e vẫn chưa biết sử dụng thế nào

Văn Dương viết 11:25 ngày 01/10/2018

Hiện tại sau khi clear cậu sẽ chạy chương trình vẽ ra từng ký tự trên console ?? Như thế nó sẽ lâu, có delay nên sẽ thấy nó nháy.

Buffer nó là bộ đệm. Cậu sẽ vẽ nội dung ra bộ đệm. Sau khi vẽ xong ra bộ đệm mới clear và viết nội dung bộ đệm ra màn hình.
Bộ đệm sẽ được vẽ lúc chương trình đang delay.
Nôm na thế này:

while(1){
    Xulygame();
    Verabodem();
    Xoamanhinh();
    Hienthitibodem();
    Delay();
}
Henry viết 11:38 ngày 01/10/2018

bạn có thể nói rõ hơn về cái Verabodem(); ,Hienthitibodem(); được không?

Trần Hoàn viết 11:38 ngày 01/10/2018

“Try to sum all your scene in 1 string then draw it at once, this will (hide) the blinking effect to a certain point”

bộ đệm trong câu này là 1 string đấy

viết 11:35 ngày 01/10/2018

xài double buffering ấy, cái này hơi phức tạp

project cũ viết bằng C khó hiểu https://gitlab.com/tntxtnt/consolebrickgamesnake

có xài double buffering đi nữa thì nó vẫn lâu lâu bị giật, do framerate ko trùng khớp với refresh rate của màn hình

Bài liên quan
0