0
Tải bản đầy đủ (.doc) (56 trang)

Sự va chạm của các sprite có đờng biên hình chữ nhật:

Một phần của tài liệu LẬP TRÌNH TRÒ CHƠI LINES CHO ĐIỆN THOẠI TRÊN J2ME (Trang 39 -40 )

Trong lập trình game thì kiểm tra sự va chạm giữa các nhân vật hoặc giữa nhân vật với các đối tợng khác thờng xuyên đợc tính đến. Ví dụ để cho nhân vật không phép đợc di chuyển ra ngoài khung màn hình thì phải nhận biết đợc khi nào nhân vật va chạm với biên để nếu có chạm đờng biên thì sẽ đổi hớng di chuyển ngợc lại. Lớp Sprite hỗ trợ 3 chức năng nhận biết sự va chạm với 3 đối t- ợng khác nhau là Image, Sprite và TiledLayer.

+ public boolean collidesWith(Image image, int x, int y, Boolean pixelLevel): cho biết liệu có sự va chạm giữa Sprite với một ảnh không. PixelLevel xác định kiểu va chạm là tính theo từng điểm ảnh hay tính theo đờng biên hình chữ nhật của Sprite.

+ public boolean collidesWith(Sprite s, Boolean pixelLevel): cho biết liệu Sprite có va chạm với một Sprite khác không phơng thức này chỉ đòi hỏi hai tham số: tham số Sprite (đã bao gồm vị trí ảnh của nó trên màn hình) và tham số pixelLevel thì tơng tự phơng thức thứ nhất.

+ public boolean collidesWith(TiledLayer t, Boolean pixelLevel): xác định liệu Sprite có va chạm với một TiledLayer nào đó hay không. Phơng thức này dùng để xác định Sprite có va chạm với đối tợng nào đó trong bản đồ hay không? Chú ý các đối tợng trong bản đồ ở đây chỉ không là các nhân vật chuyển động.

Theo mặc định thì chế độ xác định va chạm là theo đờng biên hình chữ nhật của đối tợng. Chế độ này có đặc điểm là thao tác nhanh tuy nhiên va chạm chỉ mang tính tơng đối, ví dụ có một Sprite kích thớc 32x32 tuy nhiên phần hình ảnh của Sprite đó lại chỉ nằm trong phạm vi hạn hẹp từ (8, 8) -> (24, 24) trong khung đờng biên của Sprite.

Để khắc phục nhợc điểm này lớp Sprite cung cấp một phơng thức cho phép xác định lại khung hình chữ nhật.

public void defineCollisionRectangle(int x, int y, int width, int height); Với ví dụ trên để xác định va chạm với độ chính xác cao hơn hơn thì ta định nghĩa lại khung hình chữ nhật nh sau:

Sprite.defineCollisionRectangle (8, 8, 16, 16);

Bây giờ nhận biết va chạm sẽ chính xác hơn. Mặc dù vậy tính toán va chạm vẫn dựa trên biên hình chữ nhật nhỏ hơn. Để có thể xác định chính xác sự va chạm ta dùng chế độ xác định va chạm theo Pixel.

Pixel Collision – va chạm theo biết va chạm theo Pixel xảy ra khi các điểm ảnh của một bitmap giao với các điểm ảnh tơng ứng của một bitmap khác. Tuy nhiên chế độ này đòi hỏi nhiều chi phí về thời gian hơn phơng pháp xác định theo đờng biên chữ nhật.

Một phần của tài liệu LẬP TRÌNH TRÒ CHƠI LINES CHO ĐIỆN THOẠI TRÊN J2ME (Trang 39 -40 )

×