01/10/2018, 09:44
Làm game bằng Winforms C# bị giật
Mình đang thử làm game bắn tank đơn giản trên winforms. Cách mình làm là có một PictureBox (Màu đen ở trong hình) để vẽ tất cả các đối tượng lên trên đó. Mình xóa các đối tượng trên đó, rồi cập nhập các đối tượng xong lại vẽ lên lại; nhưng thấy giật quá, không biết tại sao.
Bài liên quan
Bạn nên làm 1 hàm update() và chạy suốt chương trình (loop), như thế sẽ tránh giật
Hi Nguyễn Đức Anh.
1 Bạn cần tìm hiểu các kiến thức cơ bản liên quan đến lập trình game.
2 Học kỹ C# WF đỂ BIẾT ƯU NHUỢC ĐIỂM CỦĂ NÓ>
3 WF không sinh ra lập trình game nên lựa chọn nền tảng khác.
ẾCh thấy code đâu không biết xem kiểu gì
Cái hàm Update đó như thế nào bạn? Hình như Winforms làm việc theo kiểu sự kiện. Hết sự kiện nó mới cập nhập lên form, vậy nếu mình làm vòng lặp trong sự kiện thì nó sẽ không xuất được lên màn hình nhỉ?
Code nhiều và tách ra nhiều file nên khó đưa lên đây. Đại khái là mình dùng một cái sự kiện của Timer, 1 millisecond nó sẽ gọi sự kiện một lần. Trong sự kiện đó gọi 3 hàm, Clear(), Update(), Draw().
Thứ nhất:
Màn hình và C# chỉ có refresh rate màn hình là 50-60Hz.
Nên gọi timer 1ms là lãng phí chẳng để làm gì chỉ tốn tài nguyên. Nếu dùng timer thì nên gọi tối thiểu 7ms.
Thứ 2: chỉ update khi có thay đổi.
Thứ 3: xem lại 3 hàm trong timer làm gì và như thế nào.
Mình muốn xem 3 hàm đó (vẽ lên bitmap ??)
Thứ 4: xem xét xem có thể chạy multi thread hay không.
Nếu đúng cách, C# vẫn xử lý được trên 100fps với khung hình 1280x1024.
Mình làm tầm bậy lắm. Mình còn chưa biết phân tích xem cần những lớp như thế nào, phương thức, thuộc tính nào. Mình copy lên đây là hàm lấy hình ảnh của xe tank theo hướng di chuyển với vẽ hình xe tank đó lên PictureBox dựa vào Graphics
Chỉnh thuộc tính DoubleBuffered của form thành true => hết giật.