Hi, Khách!
|
vẽ nền, bản đồ, khung cảnh
Trong game nhân vật của chúng ta không phải chỉ di chuyển trong một không gian nhỏ hẹp, mà đó thật sự là một thế giới rộng lớn. tuy nhiên tất cả chỉ là sự sắp xếp có tính tóan từ trước chỉ bằng vài hình ảnh cơ bản. có thể nói cũng như việc dùng gạch xây nhà, từ những viên gạch giống nhau nhưng cách sắp xếp khác nhau sẽ cho ra nhưng ngôi nhà khác nhau.
Vậy chúng ta hay xem cách xây dựng một thế giới rộng lớn từ những hình ảnh đơn giản như thế nào nhé.
Chúng ta cần chuẩn bị:
- một ảnh bao gồm nhiều ô nhỏ mỗi ô là một viên gạch
- một array chỉ định cách sắp xếp các viên gạch tạo thành map.
* hiểu một chút về TiledLayer:
Công thức
<?php
TiledLayer tl=new TiledLayer(số cột, số dòng, ảnh nguồn, dài mỗi ô trong ảnh nguồn, rộng mỗi ô trong ảnh nguồn);
tl.setCell(col,row,index tile);
tl.setPosition(int x, int y);// vẽ từ điểm nào trên màn hình
tl.paint(Graphics); // vẽ tl vào graphics
?>
Copy code
TiledLayer tl=new TiledLayer(số cột, số dòng, ảnh nguồn, dài mỗi ô trong ảnh nguồn, rộng mỗi ô trong ảnh nguồn);
tl.setCell(col,row,index tile);
tl.setPosition(int x, int y);// vẽ từ điểm nào trên màn hình
tl.paint(Graphics); // vẽ tl vào graphics
?>
Copy code
Tôi thì không có năng khiếu cho lắm khi vẽ hình trên máy tính nhưng tạm thời ta sẽ sử dụng tấm hình dưới đây làm gạch
Và map được tạo ra bằng phần mềm tiled map editor, như sau:
<?php
Int[ map=={
4,4,4,1,1,4,4,4,4,4,
4,4,1,1,4,4,4,4,4,4,
4,4,1,1,4,4,1,1,4,4,
4,4,1,1,3,1,1,4,4,4,
4,4,1,1,1,1,1,1,4,4,
4,4,4,4,1,1,1,2,4,4,
1,4,4,4,1,1,4,4,4,4,
1,4,4,4,1,1,4,4,4,1,
1,4,4,4,4,4,4,4,4,1,
1,1,4,4,4,4,4,4,1,1
};
?>
Copy code
Int[ map=={
4,4,4,1,1,4,4,4,4,4,
4,4,1,1,4,4,4,4,4,4,
4,4,1,1,4,4,1,1,4,4,
4,4,1,1,3,1,1,4,4,4,
4,4,1,1,1,1,1,1,4,4,
4,4,4,4,1,1,1,2,4,4,
1,4,4,4,1,1,4,4,4,4,
1,4,4,4,1,1,4,4,4,1,
1,4,4,4,4,4,4,4,4,1,
1,1,4,4,4,4,4,4,1,1
};
?>
Copy code
Xem code hoàn chỉnh dưới đây để thấy nó hoạt động như thế nào:
map.java
<?php
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class map extends GameCanvas implements Runnable
{
private vd main;
private Graphics g=getGraphics();
int w=getWidth();
int h=getHeight();
private Image t;
private TiledLayer tl;
private int x=0,y=0;
private boolean play=true;
private int[ map={
4,4,4,1,1,4,4,4,4,4,
4,4,1,1,4,4,4,4,4,4,
4,4,1,1,4,4,1,1,4,4,
4,4,1,1,3,1,1,4,4,4,
4,4,1,1,1,1,1,1,4,4,
4,4,4,4,1,1,1,2,4,4,
1,4,4,4,1,1,4,4,4,4,
1,4,4,4,1,1,4,4,4,1,
1,4,4,4,4,4,4,4,4,1,
1,1,4,4,4,4,4,4,1,1
}; // dài và rộng là 10 <=> 100 phần tử, 4 và 1 là khung thứ 1 và khung thứ 4 trong ảnh nguồn mà TiledLayer tạo ra ở dưới.
public map(vd main){
super(false);
this.main=main;}
void start(){
Thread t=new Thread(this);
t.start();}
public void run()
{
try{t=Image.createImage("/t.png");}catch(Exception e){}
tl=new TiledLayer(10,10,t,32,32);//tạo tiled layer với 10 cộ, 10 dòng, mỗi ô 10x10
for(int i=0;i<map.length;i++){
int col=i%10;//lay du cua i/10
int row=(i-col)/10;//lay nguyen cua (i-col)/10
tl.setCell(col,row,map[i);}
while(play){ input();
g.setColor(0x000000);
g.fillRect(0,0,w,h);
tl.setPosition(x,y);
tl.paint(g);
flushGraphics();
try{Thread.sleep(30);}catch(Exception e){}//cho ngung mot thoi gian
}
}
void input(){
int k=getKeyStates();
if(k==UP_PRESSED){y++;}
if(k==LEFT_PRESSED){x++;}
if(k==RIGHT_PRESSED){x--;}
if(k==DOWN_PRESSED){y--;}
}
}
?>
Copy code
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class map extends GameCanvas implements Runnable
{
private vd main;
private Graphics g=getGraphics();
int w=getWidth();
int h=getHeight();
private Image t;
private TiledLayer tl;
private int x=0,y=0;
private boolean play=true;
private int[ map={
4,4,4,1,1,4,4,4,4,4,
4,4,1,1,4,4,4,4,4,4,
4,4,1,1,4,4,1,1,4,4,
4,4,1,1,3,1,1,4,4,4,
4,4,1,1,1,1,1,1,4,4,
4,4,4,4,1,1,1,2,4,4,
1,4,4,4,1,1,4,4,4,4,
1,4,4,4,1,1,4,4,4,1,
1,4,4,4,4,4,4,4,4,1,
1,1,4,4,4,4,4,4,1,1
}; // dài và rộng là 10 <=> 100 phần tử, 4 và 1 là khung thứ 1 và khung thứ 4 trong ảnh nguồn mà TiledLayer tạo ra ở dưới.
public map(vd main){
super(false);
this.main=main;}
void start(){
Thread t=new Thread(this);
t.start();}
public void run()
{
try{t=Image.createImage("/t.png");}catch(Exception e){}
tl=new TiledLayer(10,10,t,32,32);//tạo tiled layer với 10 cộ, 10 dòng, mỗi ô 10x10
for(int i=0;i<map.length;i++){
int col=i%10;//lay du cua i/10
int row=(i-col)/10;//lay nguyen cua (i-col)/10
tl.setCell(col,row,map[i);}
while(play){ input();
g.setColor(0x000000);
g.fillRect(0,0,w,h);
tl.setPosition(x,y);
tl.paint(g);
flushGraphics();
try{Thread.sleep(30);}catch(Exception e){}//cho ngung mot thoi gian
}
}
void input(){
int k=getKeyStates();
if(k==UP_PRESSED){y++;}
if(k==LEFT_PRESSED){x++;}
if(k==RIGHT_PRESSED){x--;}
if(k==DOWN_PRESSED){y--;}
}
}
?>
Copy code
Chỉnh sửa lúc 2016-07-10 20:55 bởi Pham_loi
Trực Tuyến:
Khách: 1





