Pham_loi
Chức vụ: 08:47:18, 29-07-2015 |
nhân vật và Sprite
Bài này sẽ chỉ cho bạn cách tạo ra những nhân vật trong game như thế nào, khác với map là những ô vuông được sắp xếp theo một trật tự cố định, nhân vật thì có nhiều sự chuyển động hơn và class Sprite cho phép chúng ta làm được điều đó:
Công thức
<?php
Sprite s=new Sprite(ảnh nguồn,dài sprite, cao sprite); //nếu ảnh nguồn có dài và cao là bội số của dài và cao sprite thì ta tạo được một sprite động (tức là chiều dài và chiều cao ảnh nguồn sẽ chia hết cho chiều dài và chiều cao của ảnh nguồn), khi đó chúng ta có thể cho hiển thị một frame nào đó ra ngoài bằng cách gọi s.setFrame(index frame). Còn về setPosition và paint thì tượng tự như tiledlayer.
?>
Copy code
Sprite s=new Sprite(ảnh nguồn,dài sprite, cao sprite); //nếu ảnh nguồn có dài và cao là bội số của dài và cao sprite thì ta tạo được một sprite động (tức là chiều dài và chiều cao ảnh nguồn sẽ chia hết cho chiều dài và chiều cao của ảnh nguồn), khi đó chúng ta có thể cho hiển thị một frame nào đó ra ngoài bằng cách gọi s.setFrame(index frame). Còn về setPosition và paint thì tượng tự như tiledlayer.
?>
Copy code
Bây giờ chúng ta tạo một class mới, class này có tác dụng tạo một Sprite mới từ một ảnh nguồn và cho hiển thị tại frame chỉ định cũng như một điểm xuất hiện trên graphics.
add.java
<?php
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class add{
private Sprite s;
public add(){}
void addsprite(Graphics g,Image im,int f,int x,int y){
s=new Sprite(im,32,32);
s.setFrame(f);
s.setPosition(x,y);
s.paint(g);
}
}
?>
Copy code
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class add{
private Sprite s;
public add(){}
void addsprite(Graphics g,Image im,int f,int x,int y){
s=new Sprite(im,32,32);
s.setFrame(f);
s.setPosition(x,y);
s.paint(g);
}
}
?>
Copy code
Để dùng class này vào trong class map bài trước ta thêm vào map.java như sau( ở đây tôi dùng một ảnh nguồn gồm 4 frame
):
<?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 add sp=new add();
private Graphics g=getGraphics();
int w=getWidth();
int h=getHeight();
private Image t,ch;
private TiledLayer tl;
private int x=w/2,y=h/2,f=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
};
public map(vd main){
super(false);
this.main=main;}
void start(){
Thread t=new Thread(this); t.start();}
public void run()
{
try{
ch=Image.createImage("/s.png");
t=Image.createImage("/t.png");}catch(Exception e){}
tl=new TiledLayer(10,10,t,32,32);
for(int i=0;i<map.length;i++){
int col=i%10;
int row=(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);
sp.addsprite(g,ch,f,w/2,h/2);
flushGraphics();
try{Thread.sleep(30);}catch(Exception e){}//cho ngung mot thoi gian
}
}
void input(){
int k=getKeyStates();
if(k==UP_PRESSED){y+=3; f=1;}
if(k==LEFT_PRESSED){x+=3; f=2;}
if(k==RIGHT_PRESSED){x-=3; f=3;}
if(k==DOWN_PRESSED){y-=3; f=0;}
}
}
?>
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 add sp=new add();
private Graphics g=getGraphics();
int w=getWidth();
int h=getHeight();
private Image t,ch;
private TiledLayer tl;
private int x=w/2,y=h/2,f=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
};
public map(vd main){
super(false);
this.main=main;}
void start(){
Thread t=new Thread(this); t.start();}
public void run()
{
try{
ch=Image.createImage("/s.png");
t=Image.createImage("/t.png");}catch(Exception e){}
tl=new TiledLayer(10,10,t,32,32);
for(int i=0;i<map.length;i++){
int col=i%10;
int row=(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);
sp.addsprite(g,ch,f,w/2,h/2);
flushGraphics();
try{Thread.sleep(30);}catch(Exception e){}//cho ngung mot thoi gian
}
}
void input(){
int k=getKeyStates();
if(k==UP_PRESSED){y+=3; f=1;}
if(k==LEFT_PRESSED){x+=3; f=2;}
if(k==RIGHT_PRESSED){x-=3; f=3;}
if(k==DOWN_PRESSED){y-=3; f=0;}
}
}
?>
Copy code
Chỉnh sửa lúc 2016-07-11 05:59 bởi Pham_loi
: 0 ♥
Trực Tuyến:
Khách: 1