Làm một dialog thông báo tùy ý trong Game Maker

Thảo luận trong 'Demo - Project' bắt đầu bởi anhchanghaudau, 5/5/06.

  1. anhchanghaudau

    anhchanghaudau Youtube Master Race

    Tham gia ngày:
    25/2/06
    Bài viết:
    51
    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 :
    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.....
     
  2. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    {@: GM mà chỉ đưa script thì đố mà chạy được , dùng nhìu resources thế kia mà, làm 1 cái example đi bạn :@}
     
  3. anhchanghaudau

    anhchanghaudau Youtube Master Race

    Tham gia ngày:
    25/2/06
    Bài viết:
    51
    ok, sorry, mình nghĩ đó chỉ là mấy cái sprite button bình thường
    linkdown nè :
    KeyboardDialog.zip
     
  4. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    {@: thanks nha, cái này hay đó ----------downloading----------------:@}
     

Chia sẻ trang này