anhchanghaudau
Youtube Master Race
- 25/2/06
- 51
- 0
trong game maker có sẵn show_mesage nhưng nó không đẹp và khi thay hình nền thì hình bị giãn, nút nhấn cũng không tùy biến vì không dùng font tiếng việt (nó dùng font của Windows thay vì dùng font trong resource. Mình có sưu tầm 1 bài nói về cách tạo dialog đơn giản để thông báo, số nút tùy ý
các bạn tạo 1 object tên objDialog
trong event Draw chèn đoạn mã sau :
Khi sử dụng tạo dialog như thế thì các object trong game như timer hay các bộ đếm khác, hay các object đang di chuyển sẽ dừng lại, đỡ mất công gọi íntance_deactivate_object ..... Dialog này hoạt động nhờ keyboard thôi, các bạn có thể tùy biến thêm nhiều button hơn, và thêm text, hoặc tạo mỗi loại dialog là 1 object.....
các bạn tạo 1 object tên objDialog
trong event Draw chèn đoạn mã sau :
Mã:
{
// vẽ nền cho dialog, có thể làm nửa trong suốt thì thay bằng hàm draw_sprite_ext
draw_set_font(fonDialog); //có thể dùng font tiếng việt (dùng GM6)
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
draw_sprite(sprDialog, -1, x, y);
if(self.active == 1)
draw_sprite(sprHiliteButton, -1, X1, Y1);
else
draw_sprite(sprNormalButton, -1, X1, Y1);
draw_text("Chào bạn", X1, Y1);
if(self.active == 2)
draw_sprite(sprHiliteButton, -1, X2, Y2);
else
draw_sprite(sprNormalButton, -1, X2, Y2);
draw_text("Tạm biệt", X1, Y1);
}
// trong event create
self.close = false;
// trong event step
if(self.close) instance_destroy(); // hủy dialog nếu dialog đã được chọn button
Sau đó ta tạo 1 script tên là ShowDialog(XDialog, YDialog)
{
var dialog = instance_create(XDialog, YDialog, objDialog);
// gán cho button được active
dialog.active = 1;
// cập nhật lại màn hình, dialog sẽ được vẽ ra
screen_redraw();
do
{
keyboard_wait(); // đợi phím
switch(keyboard_key)
{
case vk_enter:
// nếu chọn enter thì trả về phím đang chọn
dialog.close = true;
return dialog.active;
// tăng giảm nút hiện tại khi nhấn phím trái phải
case vk_left:
dialog.acitve -= 1;
break;
case vk_right:
dialog.acitve += 1;
break;
}
// nếu đã là nút thứ nhất mà còn nhấn left thì cho nhây qua 2
if(dialog.active < 1) dialog.active = 2;
// nếu đã là nút thứ hai mà còn nhấn right thì cho nhây qua 1
if(dialog.active > 2) dialog.active = 1;
// cập nhật lại dialog
}until(keyboard_key == vk_escape); // nếu người dùng nhấn escape thì đóng dialog
dialog.close = true;
return -1; // trả về -1 cho biết user không chọn nút nào
}
// Sau đó muốn gọi thì ta chèn
selectButton = ShowDialog(100, 100);
if(selectButton == 1)
.....
Khi sử dụng tạo dialog như thế thì các object trong game như timer hay các bộ đếm khác, hay các object đang di chuyển sẽ dừng lại, đỡ mất công gọi íntance_deactivate_object ..... Dialog này hoạt động nhờ keyboard thôi, các bạn có thể tùy biến thêm nhiều button hơn, và thêm text, hoặc tạo mỗi loại dialog là 1 object.....