前言:最 近闲来无事,而且也是因为刚接触安卓不久,所以萌生了以后在开发web 项目的过程中同样开发安卓手游,因前一段时间项目需要独立完成了一款功能型手机app ,该App比较简单,全是按钮操作,也就是Activity之间的相互传值与过渡,所以对安卓的基本知识有了一定了解,在我的印象当中,感觉安卓手游是比 较困难的,但是有困难就要克服,所以有了开发游戏的念头。
上一篇文章中写到了飞机的发射子弹,在本文中,将继续完善代码,该代码也是最终的代码,本游戏至此开发结束,游戏界面很粗糙,毕竟不是专业开发游 戏,而且游戏很多功能并未完成,比如说:随机出现一个”能量球”等等,这几天完成这个小游戏,纯属炼手操作,只是达成了其中的逻辑(部分逻辑)开发,接下 来把子弹攻击飞机的代码贴上来。
首先修改代码:BulletRunnable.java中的run方法,增加代码:
这里的功能就是判断在发射子弹的时候,判断其子弹的位置和飞机的位置是否相同,相同则发生planeBoom();
Java代码
1. holder.unlockCanvasAndPost(canvas);
2.
3. if (!isEnemyBullet()) {
4. 70);
5. // 从所有的敌机中判断
6.
7. if (enemyPlanes != null && enemyPlanes.size() > 0) {
8. for (int i = 0, size = enemyPlanes.size(); i < size; i++) {
9. ImageButton enemyPlan = enemyPlanes.get(i);
10.
11. if (bullet.getX() > enemyPlan.getX()
12. 2)
13. && bullet.getY() > enemyPlan.getY()
14. 2)) {
15.
16. if (emPlanes != null && emPlanes.size() > 0) {
17. EnemyPlane plane = emPlanes.get(i);
18. if(plane != null){
19. 1);
20. if (emPlanes.get(i).getLife() <= 0) {
21. true);
22. }
23. }
24.
25. }
26. false);
27. // 子弹消失
28. }
29. }
30. }
31. else {
32. 30);
33. // 此时是子弹打中了你控制的飞机
34. if (bullet.getX() > yourPlane.getX()
35. 2)
36. && bullet.getY() > yourPlane.getY()
37. 2)) {
38.
39.
40. 1);
41.
42. if (yourPlane.getLife() <= 0) {
43. // 此时你的飞机不能再进行发射
44. false);
45. // 发生爆炸
46.
47. }
48. // 子弹消失
49. false);
50. // 立马跳出
51. break;
52. }
53. }
54.
55.
发生planeBoom()代码:
Java代码
- /*
1. *
2. * 飞机爆炸效果
3. */
4. private void planeBoom(Plane plane,boolean isEnemy) {
5.
6. // 声明爆炸效果
7. new PlaneBoomRunnable(context, holder);
8. boomRunnable.setPlane(plane);
9. boomRunnable.setIsenemy(isEnemy);
10. // 爆炸
11. new Thread(boomRunnable).start();
12. }
这里新建了一个PlaneBoomRunnable .java 类,具体代码如下:
Java代码
1. package com.pm_road.fireair.thread;
2.
3. import android.content.Context;
4. import android.graphics.Canvas;
5. import android.graphics.Color;
6. import android.graphics.Paint;
7. import android.graphics.PorterDuff.Mode;
8. import android.view.SurfaceHolder;
9.
10. import com.pm_road.fireair.bean.Plane;
11.
12. /**
13. * 飞机爆炸
14. * @ClassName: PlaneBoomRunnable
15. * @Description: 飞机爆炸效果
16. * @author lipeng
17. * @date 2014-11-11 上午11:27:01
18. *
19. */
20. public class PlaneBoomRunnable implements Runnable{
21.
22. //飞机爆炸中的plane
23. private Plane plane;
24. //上下文
25. private Context context;
26. //
27. private SurfaceHolder holder;
28.
29. private Boolean isenemy;
30. public PlaneBoomRunnable(Context context, SurfaceHolder holder) {
31. super();
32.
33. this.context = context;
34. this.holder = holder;
35. }
36.
37. @Override
38. public void run() {
39.
40. Canvas canvas = holder.lockCanvas();
41. canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
42.
43. new Paint();
44. paint.setColor(Color.BLUE);
45. canvas.drawText(“BOOM”, plane.getX(), plane.getY(), paint);
46. 5, plane.getY()+5, paint);
47. 10, plane.getY()+10, paint);
48. 15, plane.getY()+15, paint);
49. holder.unlockCanvasAndPost(canvas);
50. false);
51.
52. }
53.
54. public Plane getPlane() {
55. return plane;
56. }
57.
58. public void setPlane(Plane plane) {
59. this.plane = plane;
60. }
61.
62. public Boolean getIsenemy() {
63. return isenemy;
64. }
65.
66. public void setIsenemy(Boolean isenemy) {
67. this.isenemy = isenemy;
68. }
69.
70. }
此时,在BulletRunnable.java中缺少两个属性:
Java代码
1. private List<ImageButton> enemyPlanes;
2. private List<EnemyPlane> emPlanes;
将这两个属性也同样添加至PlaneRunnable.java 和MySurfaceView.java 中,同样要加入get set方法 ,
在PlaneRunnable.java的run方法中添加如下代码:该代码表示,如果你控制的飞机被炸掉之后,其它飞机也要停止。
Java代码
1. // 发射子弹
2. if(yourPlane.isShot()){
3. shotOneBullet();
4. else{
5. //如果你控制的飞机,停止射击了,所有的飞机也要停止
6. false);
7. Message msg = handler.obtainMessage();
8. 2;
9. handler.sendMessage(msg);
10. }
在该方法的最下面加上,通知主UI,更新飞机爆炸
Java代码
1. if (isEnemyPlane()) {
2. Message msg = handler.obtainMessage();
3. 3;
4. msg.obj = enemyPlaneImg;
5. int) plane.getY();
6. handler.sendMessage(msg);
7. null;
8. }
在MainActivity.java,的handler中增加判断方法:
Java代码
1. case 3:
2. ImageButton enemyImg = (ImageButton) msg.obj;
3. enemyImg.setVisibility(View.GONE);
4. 0);
5. 0);
6. break;
7.
8.
至此,所有的代码结束,时间周期比较短,总共下来大概三天左右,其它功能暂时不会进行开发,现在的达到的功能为:随机出现几架敌机,敌机会垂直运 行,并隔一段时间不停发射子弹,你控制一架飞机也会垂直方向向上发射子弹,打中敌机后,敌机会出现BOOM字样,该架敌机消失,如果你控制的飞机让敌机打 中5次,则弹出提示GAME OVER 。