[Android Game] Bài 5: Tạo kẻ thù
Thực hiện:
Phát triển tiếp từ bài 4:http://thanhcs.blogspot.com/2014/05/android-game-chuyen-ong-va-tap-hop-oi.html
Ta sẽ tạo ra
các kẻ thù được chạy ra từ bên phải-> trái, các kẻ thù này có hình khác nhau
và tốc độ chạy cũng khác nhau. (thật ra nó hơi giống với lớp viên đạn).
Phần 1: Tạo class Enemies
(viên đạn).
1.
Tạo
một class mới tên Enemies.
2.
Trong
class vừa tạo tạo ra các biến toàn cục như mã dưới. Biến gồm x,y là tọa độ của
kẻ thù, hinh của kẻ thù và đặc biệt là 2 mảng tốc độ và mảng hình vì mỗi lần tạo
một đối tượng kẻ thù ta sẽ lấy ngẫu nhiên để ra một hình và tốc độ của nó trong
mảng. Biến e_ngnhien chính là tạo ngẫu nhiên 1 số rồi lấy hình và tốc độ để
hình thành nên kẻ thù.
intx;
inty;
Bitmap bitmap;
int []tocdo={10,20,50};
int []manghinh={R.drawable.cam,
R.drawable.le,
R.drawable.tao};
inte_ngnhien;
3.
Xây
một hàm tạo nhận vào resource và 2 biến chứa chiều rộng và chiều cao của canvas
(để ta lấy trục x). Trong hàm ta tạo ngẫu nhiên sau đó lấy hình theo ngẫu
nhiên. Tọa độ x của kẻ thù bằng chiều rộng canvas (bắt đầu từ phải), tọa độ y
là lấy ngẫu nhiên trong chiều cao canvas. Trong hàm doDraw ta sẽ vẽ đối tượng
và mỗi lần vẽ ta sẽ cập nhật lại trục x, bằng cách giảm x đi (vì chạy từ phải
-> trái). Các hàm còn lại linh tinh không dùng đến.
public
Enemies(Resources res,int rong_cv,int cao_cv)
{
Random rand=newRandom();
e_ngnhien=rand.nextInt(3);
Log.d("nn",""+e_ngnhien);
this.x=rong_cv;//x tuphai
int a=0+(int)(Math.random()*((cao_cv-0)+1));
this.y=a;
bitmap=BitmapFactory.decodeResource(res,manghinh[e_ngnhien]);
}
public
Enemies(Resources res,int x,int y, int hinh)
{
this.x=x;
this.y=y;
bitmap=BitmapFactory.decodeResource(res,
hinh);
}
publicvoid doDraw(Canvas
canvas)
{
canvas.drawBitmap(bitmap, x,y, null);
x-=tocdo[e_ngnhien]; //tru
vi chayphai sang trai
}
publicvoid setXY(int x,int y)
{
this.x=x;
this.y=y;
}
Phần 2 : viết trên
GamePanel.java
1.
Quay
về file “GamePanel.java” và khai báo các biến toàn cục.
ArrayList<Enemies>enemies=new
ArrayList<Enemies>();
intthoigiankethu=0;//thoigianrakethu,
10 sera
Enemiesmotkethu;
2.
Trong
hàm doDraw ta xây một hàm mới tên doDrawEnemies. Hàm này sẽ tạo ra kẻ thù và
thêm nó vào ArrayList tên enemies. Sau đó dùng for để vẽ lại từng kẻ thù một,
sau đó cũng dùng for để duyệt tất cả kẻ thù, kẻ thù nào đã ra khỏi canvas thì
xóa nó khỏi ArrayList.
//ve
tap hop kethu
publicvoid
doDrawEnemies(Canvas canvas)
{
if(thoigiankethu>=10)
{
thoigiankethu=0;
Enemies motkethu=newEnemies(getResources(),
canvas.getWidth(),canvas.getHeight());
enemies.add(motkethu);
}
for(int i=0;i<enemies.size();i++)
enemies.get(i).doDraw(canvas);
for(int i=0;i<enemies.size();i++)
if(enemies.get(i).y<0)
enemies.remove(i);
Log.d("viendan","so vien:
"+enemies.size());
}
3.
Quay
lên hàm onDraw ta bổ sung thêm lệnh để tăng thời gian kẻ thù lên, và gọi hàm
doDrawEnemies để vẽ kẻ thù ra, trong hàm vẽ sẽ xét biến thời gian kẻ thù để vẽ
kẻ thù ra.
…………………………………………………….
thoigiannapdan++;
thoigiankethu++;
if(myelement!=null)
{
myelement.doDraw(canvas);//ve
may bay
this.doDrawBullet(canvas);
//ve
tap hop viendan
this.doDrawEnemies(canvas);//ve
tap hop Enemies
}
…………………………………………………….
No comments: