Làm cách nào để Game flappy bird console c++ bớt giật?

Mình đang học làm game trên console
mọi người cho mình hỏi làm cách nào để nó bớt giựt không ?không biết là có liên quan gì đến tiến trình không

3 Likes

Trông hay hay mà giật quá bạn ơi @_@

3 Likes

vẫn chưa tìm được cách xử lí bạn,đang hóng cáo thủ

Lập trình game trong console thì mọi hoạt động từ nhân vật cho tới khung cảnh hay kẻ thù được đưa vào queue để xử lý. Cái gì gọi trước thì thực hiện trước (ví dụ khung cảnh chuyển động 1 bước rồi mới thực hiện kiểm tra người dùng có nhấn phím hay không).
Giải pháp tốt nhất chỉ có thể là dùng multi-thread. Trong C++ cơ bản có thư viện thread.h
http://www.cplusplus.com/reference/thread/thread/
Cái gì hoạt động độc lập không bị ai tác động (ví dụ khung cảnh chuyển động) thì nên đưa vào 1 thread riêng.

Mình chưa làm thử thread trong console nên chưa rõ lắm. Bạn tìm hiểu thử xem.

3 Likes

mình cũng tìm hiểu qua r nhưng vẫn còn khó khăn,nhung dù sao cũng cám ơn bạn :smile:

mình đoán là bạn xài clear screen rồi mới vẽ, hoặc hàm vẽ có sử dụng endl nhiều, hay xài << nhiều?

  • đừng xài clear screen: xài goto(x,y) để xóa vị trí các ống cũ (output khoảng trắng thay vì ‘|’)
  • xài goto(x,y) để vẽ vị trí các ống mới
  • mặt đất/trần thì nên << 1 chuỗi " - - - " hay “- - - -” thay vì << từng ký tự.

tuy nhiên cách vẽ “tay” này rất cực, nếu phải làm chi tiết như vậy thì ko đáng, tìm thư viện đồ họa nào đó mà vẽ.

hoặc cũng có thể là main loop ko cho nghỉ, vẽ liên tục? Nên include windows.h và xài hàm Sleep(milisecond) để hạn chế frame rate:

while (true) //main loop
{
    //xử lý events
    //vẽ
    Sleep(15); //"nghỉ" 15 ms, hay hạn chế frame rate khoảng 60 fps
}
3 Likes
void ClearConsole()
{
	HANDLE hOut;
	COORD Position;
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	Position.X = 0;
	Position.Y = 0;
	SetConsoleCursorPosition(hOut, Position);
}

đây là hàm xóa của mình

để mình thử cho ngủ xem thử

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?