Lập trình game java cơ bản - Vẽ hình lên frame

Xin chào các bạn, mấy ngày hôm nay bận chỉnh chu cái blog mà chưa có thời gian viết bài mới, mong các bạn thông cảm nha :p.

Hôm nay chung ta sẽ đi vào tìm hiểu cách load 1 hình ảnh lên frame (bài hôm trước chúng ta đã viết chữ lên frame được rồi đúng không nào.

Để thú vị ta sẽ vẽ hình chú chó nâu này nhé, các bạn có thể kiếm hình khác để vẽ :D
Rồi! Bài hôm trước chúng ta đã viết chữ lên frame bằng cách viết trực tiếp lên đối tượng JFrame, nhưng hôm nay chúng ta sẽ load hình lên đối tượng JPanel rồi sau đó mới add đối tượng này và JFrame của chúng ta để hiển thị. Với cách làm này thì ta sẽ vẽ lên JPanel xong xuôi đã rồi mới "dán" vào JFrame, và khi game chạy ta sẽ thấy nó "mượt" hơn :v (với game data nhiều mới thấy chứ load 1  đôi cái hình chắc cũng ko cảm nhận rõ lắm).

Chúng ta tiến hành tạo một thư mục để chứa hình ảnh, ở đây mình đặt tên là  "image ".

Bạn copy ảnh cần vẽ vào thư mục này.
Sau đó chúng ta sẽ tạo một class LoadImage kế thừa class JPanel.
Nhắc lại chút kiến thức trước: để kế thừa trong java ta dùng từ khóa extends.

Đầu tiên ở class LoadImage chúng ta sẽ khai báo 1 đối tượng:
private Image image;

Lưu ý: do Image là một lớp trừu tượng nên ta không thể tạo mới một đối tượng Image trực tiếp được.

Cho nên chúng ta sẽ cần dùng đến class ImageIcon (trong javadoc có nói qua về lớp này, bạn đọc để hiểu hơn, nôm na là nó sẽ load một hình, có thể từ đường dẫn chúng ta truyền vào, vv).

package com.blogspot.gameiter;

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class LoadImage extends JPanel {
    private Image image;
    public LoadImage() {
      ImageIcon imageIcon = new ImageIcon("image/cho_nau.jpg");
      image = imageIcon.getImage();
    }
}
Đây là cách để ta tạo đối tượng Image, hiểu nôm na là thằng imageIcon sẽ load ảnh từ file name chúng ta truyền vào, sau đó thằng image sẽ lấy hình đó từ thằng imageIcon.

Tiếp theo là vẽ hình lên đối tượng JPanel.

Lớp JPanel có phương thức painComponent(Graphics g) lớp này có chức năng vẽ các thành phần lên container.

Mẹo: để gõ nhanh trên eclipse ta gõ vài chữ đầu phương thức cần override rồi  nhấn tổ hợp phím Ctrl + Space, eclipse sẽ gợi ý tất cả phương thức liên quan.
Ở đây khi nhấn Ctrl + Space các bạn sẽ thấy nó hiện ra những hai phương thức painComponent(Graphics g),nhưng các bạn lưu ý dùng phương thức có access modifier  là protected nhé. Do ở đây ta dùng JPanel, mà JPanel kế thừa từ JComponent, còn nếu ta dùng Panel thì sẽ dùng phương thức có
Tiếp tục :D...
Sau khi thêm code vẽ hình vào ta sẽ có:
package com.blogspot.gameiter;

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class LoadImage extends JPanel {
    private Image image;
    public LoadImage() {
      ImageIcon imageIcon = new ImageIcon("image/cho_nau.jpg");
      image = imageIcon.getImage();
    }
    @Override
    protected void paintComponent(Graphics g) {
      g.drawImage(image, 100, 100, this); // Vẽ hình tại tọa độ (x, y) = (100, 100)
    }
    @Override
    public void paintComponents(Graphics g) {
      // Không dùng phương thức với JPanel
    }
}

Tham số this truyền vào ở đây có nghĩa là ta vẽ ngay trên JPanel LoadImage.
Xong, rất đơn giản để load hình đúng không nào các bạn. Bây giờ ta tạo 1 đối tượng JFrame và add nó vào chạy thử thôi :
Bài hôm nay kết thúc ở đây, xin chào và hẹn gặp lại các bạn :D.
SHARE

Xuho

  • Image
  • Image
  • Image
  • Image
  • Image

5 comments:

  1. ad ơi cho mình hỏi mình có tải ảnh vào file project trong máy nhưng lúc mở eclipse lên thì k thấy

    ReplyDelete
  2. 123bet mang đến trải nghiệm cá cược trực tuyến an toàn, giao diện dễ dùng cùng nhiều trò chơi hấp dẫn. Đăng ký nhanh, nạp rút tiện lợi và nhận ưu đãi mỗi ngày dành cho thành viên mới.
    Website: https://123bett.io/
    Địa chỉ: 86-549 Đ. Vĩnh Khánh, Khánh Hội, Hồ Chí Minh, Vietnam
    Điện thoại: 0938493847
    Email: 123bettio@gmail.com
    Hashtag: #123bet #123betoi #game123bet #trangchu123bet #link123bet

    ReplyDelete
  3. Hitclub là cổng game bài đổi thưởng đỉnh cao châu Á. Sân chơi uy tín với tỷ lệ nạp rút 1:1 siêu tốc, hệ thống chăm sóc khách hàng chuyên nghiệp hoạt động 24/7.
    Website: https://hitclub1.dev/
    Địa chỉ: 2 Trần Khắc Chân, Tân Định, Hồ Chí Minh, Vietnam
    Điện thoại: 0938938293
    Email: hitclub1dev@gmail.com
    Hashtag: #hitclub #hitclub1dev #taiapphitclub #apphitclub #trangchuhitclub

    ReplyDelete
  4. Vn88 cập nhật link vào mới nhất không bị chặn. Đăng ký tài khoản ngay hôm nay để trải nghiệm kho game đổi thưởng phong phú từ bắn cá, slot game đến các giải đấu thể thao đỉnh cao toàn cầu.
    Website: https://vn88.rehab/
    Địa chỉ: Hẻm 764 Phạm Văn Chiêu, Phường 15, Gò Vấp, Hồ Chí Minh, Việt Nam
    Điện thoại: 0383 033 149
    Email: vn88rehab@gmail.com
    Hashtag: #vn88 #vn88rehab #trangchuvn88 #linkvn88 #taivn88

    ReplyDelete
  5. Đăng ký tài khoản 789Club cá cược thả ga, nhận ngay code 50k trải nghiệm game bài, nổ hũ độc quyền. Hệ thống nạp rút tự động siêu tốc 1:1, hỗ trợ người chơi 24/7. Tham gia ngay!
    Website: https://kgsr.cn.com/
    Địa chỉ: 19 Nguyễn Tuân, Phường Thanh Xuân, Hà Nội, 100000, Việt Nam
    Điện thoại: 0974 744 788
    Email: 789clubb@gmail.com
    Hashtag: #789clubweb #789clubios #789clubtaixiu #tai789club #789clubandroid #789clubapk #game789club #789clubgame #789clubconggamedoithuong #taigame789club apk #gamebai789club #taigame789clubios #789clubdoithuong24/7 #bet789club

    ReplyDelete