• 大小: 4.04M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2020-12-24
  • 标签: 游戏  飞机  

资源简介



import com.pic.SpriteCmd.MainState;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class PictureView extends View implements Runnable,SensorEventListener
{
private Context context;
private  int scrWidth;//屏幕的宽度
private  int scrHeight;//屏幕的高度
private  int MainTime = 0; //主计时器
private  Bitmap imgBackground = null;//背景图片
private  Bitmap imgBackground2 = null;
private ButtonUtil ButtonStart = null;//开始按钮
private ButtonUtil ButtonHelp = null;//帮助按钮
private ButtonUtil ButtonScore = null;
private ButtonUtil ButtonDetail = null;
private  Bitmap imgStart = null;//开始按钮对应的图片
private  Bitmap imgHelp = null;//帮助按钮对应的图片
private  Bitmap imgScore = null;
private  Bitmap imgDetail = null;
private ButtonUtil ButtonFirst = null;//选关界面第一关对应按钮
private ButtonUtil ButtonSecond = null;//选关界面第二关对应按钮
private Bitmap imgFirst = null;//第一关对应图片
private Bitmap imgSecond = null;//第二关对应图片

private Bitmap imgHelpDisplay = null;//帮助图片
private Bitmap imgScoreDisplay = null;//高分图片

private Bitmap imgDetailDisplay = null;
private ButtonUtil ButtonReturn = null;//返回按钮
private Bitmap imgReturn = null;//返回按钮对应图片

private ButtonUtil ButtonSound = null;//声音开关按钮
private Bitmap imgSoundOn = null;//开声音对应图片
private Bitmap imgSoundOff = null;//关声音对应图片
private Boolean is_SoundOn = true;//声音是否开
private Boolean is_LeverUp = false;//是否过关

private int DeadEnemyCnt = 0;//敌人死亡计数器     当死亡敌人个数达到某个数时   过关

private int LeverCnt = 0;//过关界面的计数器

private static MediaPlayer mediaPlayer = null;//声音播放对象
public enum GameState//游戏状态
{
GAMESTATE_MENU, //菜单
GAMESTATE_LEVELGUIDE, //关数提示,显示第一关,第二关 。。
GAMESTATE_HELP,
GAMESTATE_SCORE,
GAMESTATE_DETAIL,
GAMESTATE_GAME, //游戏
}
public  GameState GameState; // 游戏状态

public static final int STAR_NUM = 30;
public SpriteCmd rgSpriteCmd = new SpriteCmd();////主角SpriteCmd类对象实例化
public SpriteCmd rgCmdStar[] = new SpriteCmd[30];//星星对象
public SpriteCmd rgBulletCmd[] = new SpriteCmd[20];//主角子弹对象
public SpriteCmd rgEnemy1Cmd = new SpriteCmd();//敌人1的SpriteCmd类对象
public SpriteCmd rgEnemy2Cmd = new SpriteCmd();//敌人2对象
public SpriteCmd rgEnemy3Cmd = new SpriteCmd();//敌人3对象
public SpriteCmd rgEnemy4Cmd = new SpriteCmd();
public SpriteCmd rgEnemy5Cmd = new SpriteCmd();
public SpriteCmd rgBombCmds[] = new SpriteCmd[5];//敌人死亡时候爆炸的对象

private int LeverNum;//关数计数器

public Bitmap imgPlane;//主角飞机对应图片
public Bitmap imgStar;//星星对应图片
public Bitmap imgBullet;//子弹图片
public Bitmap imgEnemy1;//敌人1对应图片
public Bitmap imgEnemy2;//敌人2对象图片
public Bitmap imgEnemy3;
public Bitmap imgEnemy4;
public Bitmap imgEnemy5;
public Bitmap imgBomb; //炸弹对应图片
public Bitmap imgPassLerver;//过关图片
public SpriteCmd rgGameover = new SpriteCmd();
public Bitmap imgBloodBg;//血量框图片
public Bitmap imgBlood;//血量图片

public boolean IsRightKeyRealess = true;//右键是否释放
public boolean IsLeftKeyRealess = true;//左键是否释放
public boolean IsUpKeyRealess = true;//上键是否释放
public boolean IsDownKeyRealess = true;//下键是否释放

private SensorManager sm;//传感器管理器
private Sensor sensor;//重力传感器对象
public float x_sensor = 0;//重力传感器x方向的位置偏移
public float y_sensor = 0;//重力传感器y方向的位置偏移
public float z_sensor = 0;//重力传感器z方向的位置偏移


public SpriteCmd rgBackground1 = new SpriteCmd();//背景对象1
public SpriteCmd rgBackground2 = new SpriteCmd();//背景对象2
public SpriteCmd rgLerver = new SpriteCmd();//“恭喜过关”对象
public SpriteCmd rgBloodBg = new SpriteCmd();//“血量框”对象
public SpriteCmd rgBlood = new SpriteCmd();//“血量”对象
public boolean  Is_exit = false;//是否退出游戏
public PictureView(Context context)
{
      super(context);//调用父类的构造方法
      MainTime = 0; // 主计时清零
      sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
  sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);// 得到一个重力传感器实例
  sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
      new Thread(this).start(); //启动线程    通过start()方法找到run()方法
      this.context = context;
      Is_exit = false;
     
}
public void TurnToMenu()//进入菜单
{

imgBackground =((BitmapDrawable)getResources().getDrawable(R.drawable.bg1)).getBitmap();//背景图片

if (imgStart == null)
{
imgStart = ((BitmapDrawable)getResources().getDrawable(R.drawable.start)).getBitmap();//“开始游戏”的图片
}
if (imgHelp == null)
{
imgHelp = ((BitmapDrawable)getResources().getDrawable(R.drawable.help)).getBitmap();//“游戏帮助”的图片
}
if (imgScore == null)
{
imgScore = ((BitmapDrawable)getResources().getDrawable(R.drawable.score)).getBitmap();//“高分”的图
}
if (imgDetail == null)
{
imgDetail = ((BitmapDrawable)getResources().getDrawable(R.drawable.detail)).getBitmap();//“信息”的图
}
if (imgReturn == null)
{
imgReturn = ((BitmapDrawable)getResources().getDrawable(R.drawable.back)).getBitmap();//“返回”的图片
}
ButtonStart = new ButtonUtil(imgStart,(scrWidth - imgStart.getWidth())/2,100);//把“开始游戏”的图片与按钮绑定
ButtonHelp = new ButtonUtil(imgHelp,(scrWidth - imgHelp.getWidth())/2,200);
ButtonScore = new ButtonUtil(imgScore,(scrWidth - imgScore.getWidth())/2,300);
ButtonDetail = new ButtonUtil(imgDetail,(scrWidth - imgDetail.getWidth())/2,400);
ButtonReturn = new ButtonUtil(imgReturn,scrWidth - imgReturn.getWidth() - 10,scrHeight - 50);//把“返回”的图片与按钮绑定
GameState = GameState.GAMESTATE_MENU; //状态转换成菜单状态


}
public void TurnToLeverGuide()//进入选关
{
ReleaseImage(imgBackground);
imgBackground =((BitmapDrawable)getResources().getDrawable(R.drawable.bg2)).getBitmap();//背景图片

if (imgFirst == null)
{
imgFirst = ((BitmapDrawable)getResources().getDrawable(R.drawable.firstlever)).getBitmap();//“第1关”的图片
}
if (imgSecond == null)
{
imgSecond = ((BitmapDrawable)getResources().getDrawable(R.drawable.secondlever)).getBitmap();//“第2关”的图片
}
ButtonFirst = new ButtonUtil(imgFirst,(scrWidth - imgFirst.getWidth())/2,150);
ButtonSecond = new ButtonUtil(imgSecond,(scrWidth - imgSecond.getWidth())/2,300);
GameState = GameState.GAMESTATE_LEVELGUIDE;
}
public void TurnToHelp()//进入帮助
{
if (imgHelpDisplay == null)
{
imgHelpDisplay = ((BitmapDrawable)getResources().getDrawable(R.drawable.helpdisplay)).getBitmap();
}

GameState = GameState.GAMESTATE_HELP;
}
public void TurnToScore()//进入高分榜
{
if (imgScoreDisplay == null)
{
TextView a=new TextView(context);
a.setText("a");

//imgScoreDisplay = ((BitmapDrawable)getResources().getDrawable(R.drawable.scoredisplay)).getBitmap();
}

GameState = GameState.GAMESTATE_SCORE;
}
public void TurnToDetail()//进入信息
{
if (imgDetailDisplay == null)
{
imgDetailDisplay = ((BitmapDrawable)getResources().getDrawable(R.drawable.detaildisplay)).getBitmap();
}

GameState = GameState.GAMESTATE_DETAIL;
}
public void TurnToGame()//进入游戏
{  

LoadResource();

InitLever();//

GameState = GameState.GAMESTATE_GAME;


//////////为背景图定义了SpriteCmd类的两个对象,为背景图设定两个位置同时画出来////
rgBackground1.x = 0;
rgBackground1.y = -scrHeight;
rgBackground1.unLayer = 0;
rgBackground1.unWidth = scrWidth;  //背景图的宽度设为全屏
rgBackground1.unHeight = scrHeight;//背景图的宽度设为全屏

rgBackground2.x = 0;
rgBackground2.y = 0;
rgBackground2.unLayer = 0;
rgBackground2.unWidth = scrWidth;//背景图的宽度设为全屏
rgBackground2.unHeight = scrHeight; //背景图的宽度设为全屏
/////////////////////////////////////////////////////////////

imgSoundOn =((BitmapDrawable)getResources().getDrawable(R.drawable.bgsoundon)).getBitmap();
imgSoundOff =((BitmapDrawable)getResources().getDrawable(R.drawable.bgsoundoff)).getBitmap();
ButtonSound = new ButtonUtil(imgSoundOn,10,scrHeight - 20);


rgLerver.unWidth = 200;
rgLerver.unHeight = 40;
rgLerver.unLayer = 255;

rgGameover.unWidth = 200;
rgGameover.unHeight = 40;
rgGameover.unLayer = 255;

rgBloodBg.unWidth = 100;
rgBloodBg.unHeight = 32;
rgBloodBg.unLayer = 0;
rgBloodBg.x = 0;
rgBloodBg.y = 0;

rgBlood.unWidth = 96;
rgBlood.unHeight = 14;
rgBlood.unLayer = 0;
rgBlood.x = rgBloodBg.x;
rgBlood.y = rgBloodBg.y   10;

mediaPlayer = MediaPlayer.create(context, R.raw.game);
    mediaPlayer.start();
    mediaPlayer.setLooping(true);
is_LeverUp = false;
}


void InitLever()
{
int i;
switch (LeverNum) {
case 1:   //第一关
rgSpriteCmd.unWidth = 36;
rgSpriteCmd.unHeight = 34;
rgSpriteCmd.x = (scrWidth - rgSpriteCmd.unWidth)/2;
rgSpriteCmd.y = scrHeight - rgSpriteCmd.unHeight;
rgSpriteCmd.unLayer = 0;
rgSpriteCmd.unSpriteIndex = 0;
rgSpriteCmd.CurrentState = MainState.enSTAND;
rgSpriteCmd.WalkCount = 0;
rgSpriteCmd.IsHurt = false;
rgSpriteCmd.IsLeftStop = false;
rgSpriteCmd.IsRight = false;
rgSpriteCmd.IsTopStop = false;
rgSpriteCmd.IsDownStop = false;


//敌人初始化
rgEnemy1Cmd.unWidth = 35;
rgEnemy1Cmd.unHeight = 30;
rgEnemy1Cmd.unLayer = 255;



rgEnemy3Cmd.unWidth = 35;
rgEnemy3Cmd.unHeight = 30;
rgEnemy3Cmd.unLayer = 255;
rgEnemy3Cmd.IsRight = false;

rgEnemy4Cmd.unWidth = 35;
rgEnemy4Cmd.unHeight = 30;
rgEnemy4Cmd.unLayer = 255;
rgEnemy4Cmd.IsRight = false;
break;
case 2:  //第二关
rgSpriteCmd.unWidth = 36;
rgSpriteCmd.unHeight = 34;
rgSpriteCmd.x = (scrWidth - rgSpriteCmd.unWidth)/4;
rgSpriteCmd.y = scrHeight - rgSpriteCmd.unHeight;
rgSpriteCmd.unLayer = 0;
rgSpriteCmd.unSpriteIndex = 0;
rgSpriteCmd.CurrentState = MainState.enSTAND;
rgSpriteCmd.WalkCount = 0;
rgSpriteCmd.IsHurt = false;

rgSpriteCmd.IsLeftStop = false;
rgSpriteCmd.IsRight = false;
rgSpriteCmd.IsTopStop = false;
rgSpriteCmd.IsDownStop = false;

//敌人初始化
rgEnemy1Cmd.unWidth = 35;
rgEnemy1Cmd.unHeight = 30;
rgEnemy1Cmd.unLayer = 255;
rgEnemy2Cmd.unWidth = 35;
rgEnemy2Cmd.unHeight = 30;
rgEnemy2Cmd.unLayer = 255;
rgEnemy3Cmd.unWidth = 35;
rgEnemy3Cmd.unHeight = 30;
rgEnemy3Cmd.unLayer = 255;
rgEnemy3Cmd.IsRight = false;
rgEnemy4Cmd.unWidth = 35;
rgEnemy4Cmd.unHeight = 30;
rgEnemy4Cmd.unLayer = 255;
rgEnemy5Cmd.unWidth = 35;
rgEnemy5Cmd.unHeight = 30;
rgEnemy5Cmd.unLayer = 255;
rgEnemy5Cmd.IsRight = false;
break;
default:
break;
}

////星星的初始化///////////////////////////////
for (i = 0; i < STAR_NUM; i  = 1)
{
rgCmdStar[i] = new SpriteCmd();//每颗星星都实例化SpriteCmd类对象
}
for (i = 0; i < STAR_NUM; i  = 2) //偶数个星星的图片索引值为0
{
rgCmdStar[i].unSpriteIndex = 0;
}
for (i = 1; i < STAR_NUM; i  = 2) //基数个星星的图片索引值为1
{
rgCmdStar[i].unSpriteIndex = 1;
}

for (i = 0; i < STAR_NUM; i   )
{
rgCmdStar[i].unWidth = 3; //每颗星星图片的宽度和高度
rgCmdStar[i].unHeight = 3;
rgCmdStar[i].x = scrWidth/STAR_NUM*i   10;//每颗星星图片绘制在屏幕上的位置
rgCmdStar[i].y = scrHeight/STAR_NUM*i;
}


//////////////每颗子弹实例化SpriteCmd类对象,初始化////////
for(i=0;i<20;i  )
{
rgBulletCmd[i] = new SpriteCmd();
}
for(i=0;i<20;i  )
{
rgBulletCmd[i].unWidth = 16;
rgBulletCmd[i].unHeight = 14;
rgBulletCmd[i].unLayer = 255;
}
     
//////////////每个炸弹实例化SpriteCmd类对象,初始化////////
for(i=0;i<5;i  )
{
rgBombCmds[i] = new SpriteCmd();
}

for(i=0;i<5;i  )
{
rgBombCmds[i].unWidth = 40;
rgBombCmds[i].unHeight = 40;
rgBombCmds[i].unLayer = 255;
}
DeadEnemyCnt = 0;
LeverCnt = 0;

}
void LoadResource()
{
ReleaseImage(imgBackground);
imgBackground =((BitmapDrawable)getResources().getDrawable(R.drawable.bg2)).getBitmap();
imgBackground2=((BitmapDrawable)getResources().getDrawable(R.drawable.bg3)).getBitmap();
imgPassLerver = ((BitmapDrawable)getResources().getDrawable(R.drawable.passlevel)).getBitmap();
imgBloodBg = ((BitmapDrawable)getResources().getDrawable(R.drawable.bloodbg)).getBitmap();
imgBlood = ((BitmapDrawable)getResources().getDrawable(R.drawable.blood)).getBitmap();
imgStar = ((BitmapDrawable)getResources().getDrawable(R.drawable.star)).getBitmap();
imgPlane = ((BitmapDrawable)getResources().getDrawable(R.drawable.plane)).getBitmap();//主机
imgBullet = ((BitmapDrawable)getResources().getDrawable(R.drawable.bullet)).getBitmap();
imgEnemy1 = ((BitmapDrawable)getResources().getDrawable(R.drawable.enemy1)).getBitmap();
imgEnemy2 = ((BitmapDrawable)getResources().getDrawable(R.drawable.enemy2)).getBitmap();
imgEnemy3 = ((BitmapDrawable)getResources().getDrawable(R.drawable.enemy3)).getBitmap();
imgEnemy4 = ((BitmapDrawable)getResources().getDrawable(R.drawable.enemy4)).getBitmap();
imgEnemy5= ((BitmapDrawable)getResources().getDrawable(R.drawable.enemy5)).getBitmap();

imgBomb = ((BitmapDrawable)getResources().getDrawable(R.drawable.zhadan)).getBitmap();

}
    public void run()
{
long frameElapse, frameTick;
try
        {
            frameTick = System.currentTimeMillis(); // 本次执行起始时间
            if(!Is_exit)
            {
              while (true)
                  {
                      frameElapse = System.currentTimeMillis() - frameTick; // 画一帧所用的时间

                      if (frameElapse < 80) // 如果不足80毫秒
                      {
                          Thread.sleep((80 - frameElapse)); // 线程休眠,保证画一帧的时间为80毫秒
                      }
      postInvalidate(); // 刷新屏幕
                      frameTick = System.currentTimeMillis(); // 本次执行结束时间
                  }
            }
            else
            {
            return;
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
}
    protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
        scrWidth = w; // 获取屏幕宽度
        scrHeight = h; // 获取屏幕高度
super.onSizeChanged(w, h, oldw, oldh);
TurnToMenu();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
///////绘制屏幕   
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
MainTime   ; // 主计时时间增加
if (MainTime == 100000000)
{
MainTime = 0;
}


if (rgBackground1.y >= 0) {
rgBackground1.y = -scrHeight;
}
if (rgBackground2.y >= scrHeight) {
rgBackground2.y = 0;
}
switch (GameState)
{
case GAMESTATE_MENU: //画菜单
DrawMenu(canvas);
break;
case GAMESTATE_LEVELGUIDE:
DrawLeverGuide(canvas);
break;
case GAMESTATE_HELP:
DrawHelp(canvas);
break;
case GAMESTATE_SCORE:
DrawScore(canvas);
break;
case GAMESTATE_DETAIL:
DrawDetail(canvas);
break;
case GAMESTATE_GAME:
DrawGame(canvas);
    default:
break;
}
}
public void DrawMenu(Canvas canvas)
{
DisplayImage(canvas, imgBackground,imgBackground.getWidth(), imgBackground.getHeight());

ButtonStart.drawButton(canvas, null);
ButtonHelp.drawButton(canvas, null);
ButtonScore.drawButton(canvas,null);
ButtonDetail.drawButton(canvas,null);
ButtonReturn.drawButton(canvas, null);
}
public void DrawLeverGuide(Canvas canvas)
{
DisplayImage(canvas, imgBackground,imgBackground.getWidth(), imgBackground.getHeight());

ButtonFirst.drawButton(canvas, null);
ButtonSecond.drawButton(canvas, null);
ButtonReturn.drawButton(canvas, null);
}
public void DrawHelp(Canvas canvas)
{
DisplayImage(canvas,imgHelpDisplay,imgHelpDisplay.getWidth(),imgHelpDisplay.getHeight());
ButtonReturn.drawButton(canvas, null);
}
public void DrawScore(Canvas canvas)
{
//DisplayImage(canvas,imgScoreDisplay,imgScoreDisplay.getWidth(),imgScoreDisplay.getHeight());
Paint paint = new Paint();

paint.setTextSize(22);//设置字体大小
paint.setColor(Color.BLUE);
//paint.setTypeface();//设置字体类型
        canvas.drawText("用户名", 50, 50, paint);

//paint.setTypeface();//设置字体类型
Paint paint1 = new Paint();

paint1.setTextSize(22);//设置字体大小
paint1.setColor(Color.BLUE);

canvas.drawText("分数", 150,50, paint1);
//canvas.drawText("o", 33, 33, 11, scrWidth, null);
ButtonReturn.drawButton(canvas, null);
}
public void DrawDetail(Canvas canvas)
{
DisplayImage(canvas,imgDetailDisplay,imgDetailDisplay.getWidth(),imgDetailDisplay.getHeight());
ButtonReturn.drawButton(canvas, null);
}
public void DrawGame(Canvas canvas)
{
int i,j;
if (rgSpriteCmd.x < 0) {//到达地图左边界
rgSpriteCmd.IsLeftStop = true;
rgSpriteCmd.x = 0;
}
else {
rgSpriteCmd.IsLeftStop = false;
}


if (rgSpriteCmd.x   rgSpriteCmd.unWidth > scrWidth) {//到达地图右边界
rgSpriteCmd.IsRigtStop = true;
rgSpriteCmd.x = scrWidth - rgSpriteCmd.unWidth;
}
else {
rgSpriteCmd.IsRigtStop = false;
}
if (rgSpriteCmd.y < 0) {//到达地图上边界
rgSpriteCmd.IsTopStop = true;
rgSpriteCmd.y = 0;
}
else {
rgSpriteCmd.IsTopStop = false;
}


if (rgSpriteCmd.y   rgSpriteCmd.unHeight > scrHeight) {//到达地图下边界
rgSpriteCmd.IsDownStop = true;
rgSpriteCmd.y = scrHeight - rgSpriteCmd.unHeight;
}
else {
rgSpriteCmd.IsDownStop = false;
}

////主机与敌机的碰撞判断及处理///////////////////////////////
if ((CheckHitEnemy(rgSpriteCmd, rgEnemy1Cmd) || CheckHitEnemy(rgSpriteCmd, rgEnemy2Cmd)
|| CheckHitEnemy(rgSpriteCmd, rgEnemy3Cmd)) || CheckHitEnemy(rgSpriteCmd, rgEnemy4Cmd)
|| CheckHitEnemy(rgSpriteCmd, rgEnemy5Cmd)&& !rgSpriteCmd.IsHurt) {
rgSpriteCmd.CurrentState = MainState.enHURT;
rgSpriteCmd.ProtectCount = 18;
rgSpriteCmd.IsHurt = true;
rgBlood.unWidth -= 19;
if (rgBlood.unWidth < 0) {
rgBlood.unWidth = 96;
}
}


/////主机子弹与敌机1的碰撞////////////////////////////////
for(i=0;i<20;i  )
{
if (CheckHitEnemy(rgBulletCmd[i], rgEnemy1Cmd)) {
rgBulletCmd[i].unLayer = 255;
rgEnemy1Cmd.unLayer = 255;
for (j = 0; j < 5; j  ) {
if(rgBombCmds[j].unLayer == 255)
{
rgBombCmds[j].unLayer = 0;
rgBombCmds[j].x = rgEnemy1Cmd.x   15;
rgBombCmds[j].y = rgEnemy1Cmd.y   15;
rgBombCmds[j].WalkCount = 0;
rgBombCmds[j].unSpriteIndex = 0;
break;
}
}
DeadEnemyCnt  ;
}
}

////////主机子弹与敌机2的碰撞//////////////////////////////
for(i=0;i<20;i  )
{
if (CheckHitEnemy(rgBulletCmd[i], rgEnemy2Cmd)) {
rgBulletCmd[i].unLayer = 255;
rgEnemy2Cmd.unLayer = 255;
for (j = 0; j < 5; j  ) {
if(rgBombCmds[j].unLayer == 255)
{
rgBombCmds[j].unLayer = 0;
rgBombCmds[j].x = rgEnemy2Cmd.x   15;
rgBombCmds[j].y = rgEnemy2Cmd.y   15;
rgBombCmds[j].WalkCount = 0;
rgBombCmds[j].unSpriteIndex = 0;
break;
}
}
DeadEnemyCnt  ;
}
}

/////主机子弹与敌机3的碰撞/////////////////////////////////
for(i=0;i<20;i  )
{
if (CheckHitEnemy(rgBulletCmd[i], rgEnemy3Cmd)) {
rgBulletCmd[i].unLayer = 255;
rgEnemy3Cmd.unLayer = 255;
for (j = 0; j < 5; j  ) {
if(rgBombCmds[j].unLayer == 255)
{
rgBombCmds[j].unLayer = 0;
rgBombCmds[j].x = rgEnemy3Cmd.x   15;
rgBombCmds[j].y = rgEnemy3Cmd.y   15;
rgBombCmds[j].WalkCount = 0;
rgBombCmds[j].unSpriteIndex = 0;
break;
}
}
DeadEnemyCnt  ;
}
}
/////主机子弹与敌机4的碰撞/////////////////////////////////
for(i=0;i<20;i  )
{
if (CheckHitEnemy(rgBulletCmd[i], rgEnemy4Cmd)) {
rgBulletCmd[i].unLayer = 255;
rgEnemy4Cmd.unLayer = 255;
for (j = 0; j < 5; j  ) {
if(rgBombCmds[j].unLayer == 255)
{
rgBombCmds[j].unLayer = 0;
rgBombCmds[j].x = rgEnemy4Cmd.x   15;
rgBombCmds[j].y = rgEnemy4Cmd.y   15;
rgBombCmds[j].WalkCount = 0;
rgBombCmds[j].unSpriteIndex = 0;
break;
}
}
DeadEnemyCnt  ;
}
}
/////主机子弹与敌机5的碰撞/////////////////////////////////
for(i=0;i<20;i  )
{
if (CheckHitEnemy(rgBulletCmd[i], rgEnemy5Cmd)) {
rgBulletCmd[i].unLayer = 255;
rgEnemy5Cmd.unLayer = 255;
for (j = 0; j < 5; j  ) {
if(rgBombCmds[j].unLayer == 255)
{
rgBombCmds[j].unLayer = 0;
rgBombCmds[j].x = rgEnemy5Cmd.x   15;
rgBombCmds[j].y = rgEnemy5Cmd.y   15;
rgBombCmds[j].WalkCount = 0;
rgBombCmds[j].unSpriteIndex = 0;
break;
}
}
DeadEnemyCnt  ;
}
}

/////炸弹的处理////////////////////////////////////
for(i=0;i<5;i  )
{
if (rgBombCmds[i].unLayer != 255) {
if (rgBombCmds[i].WalkCount < 5) {
rgBombCmds[i].unSpriteIndex = rgBombCmds[i].WalkCount;
}
else {
rgBombCmds[i].unLayer = 255;
}
rgBombCmds[i].WalkCount  ;
}
}

////////////画背景/////////////////////////
DrawSprites(canvas,imgBackground,rgBackground1);//第二个参数是要画的图片,第三个参数要画在屏幕上的位置等信息
DrawSprites(canvas,imgBackground,rgBackground2);
rgBackground1.y  = 10;
rgBackground2.y  = 10;

/////////////画血量/////////////////
DrawSprites(canvas,imgBloodBg,rgBloodBg);
DrawSprites(canvas,imgBlood,rgBlood);

/////////////画分数//////////
Paint paint2 = new Paint();
        paint2.setTextSize(22);//设置字体大小
paint2.setColor(Color.WHITE);

canvas.drawText("分数:",370,50, paint2);
int m=DeadEnemyCnt*76;
String l=m "";
Paint paint3 = new Paint();
paint3.setTextSize(22);//设置字体大小
paint3.setColor(Color.WHITE);
canvas.drawText(l,420,50,paint3);
///////过关判断//////////////////////////
if (DeadEnemyCnt > 30 && LeverNum == 1) {
is_LeverUp = true;
}

////过关处理    主机、敌机、主机子弹全部消失   背景音乐停播     初始化恭喜过关 以及画出来
if (is_LeverUp) {


LeverCnt  ;
rgSpriteCmd.unLayer = 255;
rgEnemy1Cmd.unLayer = 255;
rgEnemy2Cmd.unLayer = 255;
rgEnemy3Cmd.unLayer = 255;
rgEnemy4Cmd.unLayer = 255;
for (i = 0; i < 5; i  ) {
rgBulletCmd[i].unLayer = 255;
}
mediaPlayer.pause();
rgLerver.unLayer = 0;
rgLerver.x = (scrWidth - rgLerver.unWidth)/2;
rgLerver.y = (scrHeight - rgLerver.unHeight)/2   MainTime%2*3;
DrawSprites(canvas,imgPassLerver,rgLerver);//画出“恭喜过关”
if(LeverCnt == 40)//当计数器到40时进去下一关
{
LeverNum  =1;

TurnToGame();

}
}


//////每帧各星星的位置并画出来////////////////////////////
for (i = 0; i < STAR_NUM; i   )
{
if (rgCmdStar[i].y   rgCmdStar[i].unHeight > scrHeight)
{
if (MainTime %2 == 0) {
rgCmdStar[i].x = scrWidth/STAR_NUM*i   10;
}
else {
rgCmdStar[i].x = scrWidth/STAR_NUM*(STAR_NUM - i)   10;
}

rgCmdStar[i].y = 0;
}
else
{
rgCmdStar[i].y  = 5;
}
DrawSprites(canvas,imgStar,rgCmdStar[i]);
}

///////画“返回”和“声音”按钮//////////
ButtonReturn.drawButton(canvas, null);
ButtonSound.drawButton(canvas, null);
  
/////子弹重新初始化///////////////////////
for(i = 0;i<20;i  )
{
if (rgBulletCmd[i].unLayer == 255 && MainTime%2 == 0 && !is_LeverUp) {
rgBulletCmd[i].unLayer = 0;
rgBulletCmd[i].x = rgSpriteCmd.x   10;
rgBulletCmd[i].y = rgSpriteCmd.y - 10;
break;
}
}

/////子弹的运动以及走出屏幕后的处理
for(i = 0;i<20;i  )
{
if (rgBulletCmd[i].unLayer != 255) {
rgBulletCmd[i].y -= 35;
if (rgBulletCmd[i].y < -10) {
rgBulletCmd[i].unLayer = 255;
}
}
}

///画子弹
for(i=0;i<20;i  )
{
DrawSprites(canvas,imgBullet,rgBulletCmd[i]);
}

///////敌人1初始化 以及运动,画敌机1//////////////////
if(rgEnemy1Cmd.unLayer == 255 && !is_LeverUp)
{
rgEnemy1Cmd.unLayer = 0;
rgEnemy1Cmd.x = (scrWidth - rgEnemy1Cmd.unWidth)/2; //屏幕x方向中间
rgEnemy1Cmd.y = scrHeight/5 ;

}
else {
rgEnemy1Cmd.y  =14;
if (rgEnemy1Cmd.y > scrHeight) {
rgEnemy1Cmd.unLayer = 255;
}
}
DrawSprites(canvas,imgEnemy1,rgEnemy1Cmd);//画敌机1;由imgEnemy1和rgEnemy1Cmd构成敌机1,imgEnemy1代表图条,rgEnemy1Cmd代表绘制位置等



///////敌人2初始化 以及运动,画敌机2//////////////////
if (rgEnemy2Cmd.unLayer == 255 && !is_LeverUp) {
rgEnemy2Cmd.unLayer = 0;
rgEnemy2Cmd.x = 0;
rgEnemy2Cmd.y = scrHeight/4;
}
else {
rgEnemy2Cmd.x  =5;
rgEnemy2Cmd.y  =10;
if (rgEnemy2Cmd.y > scrHeight){
rgEnemy2Cmd.unLayer = 255;
}
}
DrawSprites(canvas,imgEnemy2,rgEnemy2Cmd);//画敌机2;由imgEnemy2和rgEnemy2Cmd构成敌机2
  

///////敌人3初始化 以及运动,画敌机3//////////////////
if (rgEnemy3Cmd.unLayer == 255 && !is_LeverUp) {
rgEnemy3Cmd.unLayer = 0;
rgEnemy3Cmd.x = scrWidth - rgEnemy3Cmd.unWidth;//屏幕x方向最右边
rgEnemy3Cmd.y = scrHeight/3;
}
else {
if (rgEnemy3Cmd.IsRight) {
rgEnemy3Cmd.x  =8;
}
else {
rgEnemy3Cmd.x -=8;
}
if (rgEnemy3Cmd.x < 0) {
rgEnemy3Cmd.IsRight = true;
}
if (rgEnemy3Cmd.x > scrWidth - rgEnemy3Cmd.unWidth) {
rgEnemy3Cmd.IsRight = false;
}
}
DrawSprites(canvas,imgEnemy3,rgEnemy3Cmd);//画敌机3;由imgEnemy1和rgEnemy3Cmd构成敌机3,敌机1和敌机3使用相同的图片,不同的初始位置和移动

//////敌人4初始化 以及运动,画敌机4//////////////////
if (rgEnemy4Cmd.unLayer == 255 && !is_LeverUp) {
rgEnemy4Cmd.unLayer = 0;
rgEnemy4Cmd.x = scrWidth ;//屏幕x方向最右边
rgEnemy4Cmd.y = (scrHeight-rgEnemy4Cmd.unWidth)/2;
}
else {
if (rgEnemy4Cmd.IsRight) {
rgEnemy4Cmd.y  =5;
rgEnemy4Cmd.x -=5;
if (rgEnemy4Cmd.y > scrHeight||rgEnemy4Cmd.y< -scrHeight||rgEnemy4Cmd.x< -scrWidth) {
rgEnemy4Cmd.unLayer = 255;}
}
else {
rgEnemy4Cmd.y -=5;
if (rgEnemy4Cmd.y > scrHeight||rgEnemy4Cmd.y< -scrHeight||rgEnemy4Cmd.x< -scrWidth) {
rgEnemy4Cmd.unLayer = 255;}
}
if (rgEnemy4Cmd.y < (scrWidth - rgEnemy4Cmd.unWidth)/2) {
rgEnemy4Cmd.IsRight = true;
}
}
DrawSprites(canvas,imgEnemy4,rgEnemy4Cmd);//画敌机4
///////////////画5
if(rgEnemy5Cmd.unLayer == 255 && !is_LeverUp)
{
rgEnemy5Cmd.unLayer = 0;
rgEnemy5Cmd.x = rgEnemy5Cmd.unWidth; //屏幕x方向中间
rgEnemy5Cmd.y = (scrHeight - rgEnemy5Cmd.unHeight)/2 ;

}
else {
rgEnemy5Cmd.x  = 5;
if (rgEnemy5Cmd.x > scrWidth) {
rgEnemy5Cmd.unLayer =0;
}
}
DrawSprites(canvas,imgEnemy5,rgEnemy5Cmd);//画敌机5
/////画炸弹///////////////
for(i=0;i<5;i  )
{
DrawSprites(canvas,imgBomb,rgBombCmds[i]);
}

////画主机///////////////////
DrawSprites(canvas,imgPlane,rgSpriteCmd);

//主机各个状态下的处理   索引变化以及速度变化
if (rgSpriteCmd.CurrentState == MainState.enSTAND) {
rgSpriteCmd.unSpriteIndex = MainTime/2%2;
}
else if (rgSpriteCmd.CurrentState == MainState.enWALKRIGHT) {
rgSpriteCmd.WalkCount  ;
rgSpriteCmd.unSpriteIndex = 3;
if (rgSpriteCmd.WalkCount < 5) {
rgSpriteCmd.x  = 8;
}
else {
if (IsRightKeyRealess) {
rgSpriteCmd.CurrentState = MainState.enSTAND;
}
else {
rgSpriteCmd.CurrentState = MainState.enWALKRIGHT;
}
rgSpriteCmd.WalkCount = 0;
}
}
else if (rgSpriteCmd.CurrentState == MainState.enWALKLEFT) {
rgSpriteCmd.WalkCount  ;
if (rgSpriteCmd.WalkCount < 5) {
rgSpriteCmd.x -= 8;
rgSpriteCmd.unSpriteIndex = 2;
}
else {
if (IsLeftKeyRealess) {
rgSpriteCmd.CurrentState = MainState.enSTAND;
}
else {
rgSpriteCmd.CurrentState = MainState.enWALKLEFT;
}
rgSpriteCmd.WalkCount = 0;
}
}
else if (rgSpriteCmd.CurrentState == MainState.enWALKUP) {
if (IsUpKeyRealess && y_sensor > -1 && y_sensor < 1) {
rgSpriteCmd.CurrentState = MainState.enSTAND;
}
else {
rgSpriteCmd.unSpriteIndex = 0;
rgSpriteCmd.y -= 10;
}
}
else if (rgSpriteCmd.CurrentState == MainState.enWALKDOWN) {
if (IsDownKeyRealess && y_sensor > -1 && y_sensor < 1) {
rgSpriteCmd.CurrentState = MainState.enSTAND;
}
else {
rgSpriteCmd.unSpriteIndex = 0;
rgSpriteCmd.y  = 10;
}
}
else if (rgSpriteCmd.CurrentState == MainState.enHURT) {
rgSpriteCmd.unSpriteIndex = MainTime%2 - 1;
rgSpriteCmd.ProtectCount--;
if (rgSpriteCmd.ProtectCount == 0) {
rgSpriteCmd.CurrentState = MainState.enSTAND;
rgSpriteCmd.IsHurt = false;
}
}
}
  
///////把图片画成全屏///////////////////////////////////////////
public  void DisplayImage(Canvas canvas, Bitmap bitmap,int width, int height)
{
    if(bitmap!=null)
    {
    Rect scrRect = new Rect(); //绘制区域在屏幕上的矩形范围
        scrRect.left = 0; //绘制区域左上角顶点在屏幕上的x坐标
        scrRect.top = 0; //绘制区域左上角顶点在屏幕上的y坐标
        scrRect.right = scrWidth;//width; //绘制区域右下角顶点在屏幕上的x坐标
        scrRect.bottom = scrHeight;//height; //绘制区域右下角顶点在屏幕上的y坐标
        Rect imgRect = new Rect(); //绘制区域在图片上的矩形范围
        imgRect.left = 0; //绘制区域左上角顶点距离图片左上角的x坐标
        imgRect.top = 0; //绘制区域左上角顶点距离图片左上角的y坐标
        imgRect.right = 0   width; //绘制区域右下角顶点距离图片左上角的x坐标
        imgRect.bottom = 0   height; //绘制区域右下角顶点距离图片左上角的y坐标
        canvas.drawBitmap(bitmap, imgRect, scrRect, null); //绘制图片
    }
   
}
///////////////////////////////////////////////////////////////////////////

  ////////画精灵(相对于屏幕的相对位置)//////////////////////
public   void DrawSprites(Canvas canvas, Bitmap bitmap, SpriteCmd spriteCmd)
{
if (spriteCmd.unLayer != 255) {
DisplayImage(canvas,
bitmap, //要画的图片
spriteCmd.x, //图片左上角画在屏幕上的x位置
spriteCmd.y, //图片左上角画在屏幕上的y位置
spriteCmd.unWidth, //图片的宽度
spriteCmd.unHeight, //图片的高度
0, //要画的图片在整个图片中的x方向位置
spriteCmd.unSpriteIndex * spriteCmd.unHeight); //要画的图片在整个图片中的y方向位置
}
}
//画图片
//参数依次为画布Canvas对象,位图对象,在屏幕上的x坐标,在屏幕上的y坐标,
//绘制的宽度,绘制的高度,在图片上的x坐标,在图片上的y坐标
public  void DisplayImage(Canvas canvas, Bitmap bitmap, int scrX, int scrY, int width, int height, int imgX, int imgY)
{
if(bitmap!=null)
{
Rect scrRect = new Rect(); //绘制区域在屏幕上的矩形范围
scrRect.left = scrX; //绘制区域左上角顶点在屏幕上的x坐标
scrRect.top = scrY; //绘制区域左上角顶点在屏幕上的y坐标
scrRect.right = scrX   width; //绘制区域右下角顶点在屏幕上的x坐标
scrRect.bottom = scrY   height; //绘制区域右下角顶点在屏幕上的y坐标

Rect imgRect = new Rect(); //绘制区域在图片上的矩形范围
imgRect.left = imgX; //绘制区域左上角顶点距离图片左上角的x坐标
imgRect.top = imgY; //绘制区域左上角顶点距离图片左上角的y坐标
imgRect.right = imgX   width; //绘制区域右下角顶点距离图片左上角的x坐标
imgRect.bottom = imgY   height; //绘制区域右下角顶点距离图片左上角的y坐标

canvas.drawBitmap(bitmap, imgRect, scrRect, null); //绘制图片
}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//触屏事件
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public boolean onTouchEvent(MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN: // 当触摸到屏幕
IsRightKeyRealess = false;
IsLeftKeyRealess = false;
IsUpKeyRealess = false;
IsDownKeyRealess = false;
switch (GameState)
{
case GAMESTATE_MENU:
onTouchEventInMenu(event); // 菜单界面的触屏事件处理
break;
case GAMESTATE_LEVELGUIDE:
onTouchEventLeverGuide(event);// 选关界面的触屏事件处理
break;
case GAMESTATE_HELP:
onTouchEventHelp(event);// 帮助界面的触屏事件处理
break;
case GAMESTATE_SCORE:
onTouchEventScore(event);// 分数界面的触屏事件处理
break;
case GAMESTATE_DETAIL:
onTouchEventHelp(event);// 信息界面的触屏事件处理
break;
case GAMESTATE_GAME:
onTouchEventInGame(event);// 游戏界面的触屏事件处理
break;
default:
break;
}
return true;
case MotionEvent.ACTION_UP:// 当手抬起,离开屏幕
IsRightKeyRealess = true;
IsLeftKeyRealess = true;
IsUpKeyRealess = true;
IsDownKeyRealess = true;
return true;
default:
break;
}
return super.onTouchEvent(event);
}
public void onTouchEventInMenu(MotionEvent event)// 菜单界面的触屏事件处理
{
float x, y;
x = event.getX();
y = event.getY();
if (ButtonStart.isClick(x, y)) {
TurnToLeverGuide();
}
else if (ButtonHelp.isClick(x, y)) {
TurnToHelp();
}
else if (ButtonScore.isClick(x, y)) {
TurnToScore();
}
else if (ButtonDetail.isClick(x, y)) {
TurnToDetail();
}
else if (ButtonReturn.isClick(x, y)) {
Is_exit = true;
CloseGame();
}
}

public void onTouchEventLeverGuide(MotionEvent event)// 选关界面的触屏事件处理
{
float x, y;
x = event.getX();
y = event.getY();
if (ButtonReturn.isClick(x, y)) {
TurnToMenu();
}
else if (ButtonFirst.isClick(x, y)) {
LeverNum = 1;
TurnToGame();
}
else if (ButtonSecond.isClick(x, y)) {
LeverNum = 2;
TurnToGame();
}
}


public void onTouchEventHelp(MotionEvent event)// 帮助界面的触屏事件处理
{
float x, y;
x = event.getX();
y = event.getY();
if (ButtonReturn.isClick(x, y)) {
TurnToMenu();
}
}
public void onTouchEventScore(MotionEvent event)// 帮助界面的触屏事件处理
{
float x, y;
x = event.getX();
y = event.getY();
if (ButtonReturn.isClick(x, y)) {
TurnToMenu();
}
}
public void onTouchEventInGame(MotionEvent event)// 游戏界面的触屏事件处理
{
float x, y;
x = event.getX();
y = event.getY();

//////处理返回键///////////////////////////////
if (ButtonReturn.isClick(x, y)) {
TurnToMenu();
mediaPlayer.pause();
}
///////////////////////////////////////////

///////////////声音处理///////////////////////////
else if(ButtonSound.isClick(x, y)){
if (is_SoundOn) {
ButtonSound.setButtonPic(imgSoundOff);
is_SoundOn = false;
mediaPlayer.pause();
}
else {
ButtonSound.setButtonPic(imgSoundOn);
is_SoundOn = true;
    mediaPlayer.start();
    mediaPlayer.setLooping(true);
}
}
//////////////////////////////////////////////////

///////////////根据触摸点的位置判断主角飞机的运动状态////////////////////
if ((x- rgSpriteCmd.x - rgSpriteCmd.unWidth/2) > (y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2)
&& (x- rgSpriteCmd.x - rgSpriteCmd.unWidth/2) > -(y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2)
&& !rgSpriteCmd.IsRigtStop && rgSpriteCmd.CurrentState != MainState.enHURT &&!ButtonSound.isClick(x, y)){
rgSpriteCmd.CurrentState = MainState.enWALKRIGHT;//向右走
}
else if ((x - rgSpriteCmd.x - rgSpriteCmd.unWidth / 2 < (y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2))
&& (x- rgSpriteCmd.x - rgSpriteCmd.unWidth/2) < -(y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2)
&& !rgSpriteCmd.IsLeftStop && rgSpriteCmd.CurrentState != MainState.enHURT &&!ButtonSound.isClick(x, y)){
rgSpriteCmd.CurrentState = MainState.enWALKLEFT;//向左走
}
else if ((y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2) <  (x - rgSpriteCmd.x - rgSpriteCmd.unWidth / 2)
    && (y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2) < - (x - rgSpriteCmd.x - rgSpriteCmd.unWidth / 2)
    && !rgSpriteCmd.IsTopStop && rgSpriteCmd.CurrentState != MainState.enHURT &&!ButtonSound.isClick(x, y)){
rgSpriteCmd.CurrentState = MainState.enWALKUP;//向上走
}
else if ((y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2) >= (x - rgSpriteCmd.x - rgSpriteCmd.unWidth / 2)
&& (y - rgSpriteCmd.y - rgSpriteCmd.unHeight / 2) >= -(x - rgSpriteCmd.x - rgSpriteCmd.unWidth / 2)
&& !rgSpriteCmd.IsDownStop && rgSpriteCmd.CurrentState != MainState.enHURT &&!ButtonSound.isClick(x, y)){
rgSpriteCmd.CurrentState = MainState.enWALKDOWN;//向下走
}

}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


public Boolean  CheckHitEnemy(SpriteCmd Cmd,SpriteCmd SpCmd) {
if (Cmd.unLayer!=255 && SpCmd.unLayer != 255) {
if (Cmd.x   Cmd.unWidth > SpCmd.x && Cmd.x < SpCmd.x   SpCmd.unWidth &&
    Cmd.y   Cmd.unHeight > SpCmd.y && Cmd.y < SpCmd.y   SpCmd.unHeight) {
return true;
}
}
return false;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub

}
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
x_sensor = event.values[0]; // 手机横向翻滚
// x>0 说明当前手机左翻 x<0右翻
y_sensor = event.values[1]; // 手机纵向翻滚
// y>0 说明当前手机下翻 y<0上翻
z_sensor = event.values[2]; // 屏幕的朝向
// z>0 手机屏幕朝上 z<0 手机屏幕朝下

}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////


////////////退出游戏时释放所有资源///////////////////////////////////////////////////////////////////////////////////////
public void CloseGame()
{
FreeAppData(); // 释放应用所有资源
((picture)this.getContext()).CloseActivity(); // 关闭应用

}
public void FreeAppData()
{
//释放图片资源
ReleaseImage(imgPlane);
ReleaseImage(imgStar);
ReleaseImage(imgStar);
ReleaseImage(imgEnemy1);
ReleaseImage(imgEnemy2);
ReleaseImage(imgEnemy3);
ReleaseImage(imgEnemy4);
ReleaseImage(imgBomb);
ReleaseImage(imgPassLerver);
ReleaseImage(imgBloodBg);
ReleaseImage(imgBlood);
ReleaseImage(imgBackground);
ReleaseImage(imgStart);
ReleaseImage(imgHelp);
ReleaseImage(imgScore);
ReleaseImage(imgDetail);
ReleaseImage(imgFirst);
ReleaseImage(imgSecond);
ReleaseImage(imgHelpDisplay);
ReleaseImage(imgScoreDisplay);
ReleaseImage(imgDetailDisplay);
ReleaseImage(imgReturn);
ReleaseImage(imgSoundOn);
ReleaseImage(imgSoundOff);

if (mediaPlayer != null)
{
mediaPlayer.stop(); // 停止播放声音
mediaPlayer.release(); // 释放mediaPlayer资源
mediaPlayer = null; // 对象置空
}

// 释放声音资源

}
public static void FreeMedia()
{
if (mediaPlayer != null)
{
mediaPlayer.stop(); // 停止播放声音
mediaPlayer.release(); // 释放mediaPlayer资源
mediaPlayer = null; // 对象置空
}
}
public static Bitmap ReleaseImage(Bitmap bitmap)
{
if (bitmap != null && !bitmap.isRecycled())
        {
//bitmap.recycle(); // 用于回收该bitmap所占用的内存
bitmap = null; // 将bitmap置空
        }

return null; // 返回空,将原图片对象置为空
}

}


资源截图

代码片段和文件信息

/** Automatically generated file. DO NOT MODIFY */
package com.pic;

public final class BuildConfig {
    public final static boolean DEBUG = true;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件         475  2015-07-03 10:18  .classpath
     文件         845  2013-05-21 16:31  .project
     目录           0  2015-07-03 10:16  .settings\
     文件         177  2015-07-03 10:16  .settings\org.eclipse.jdt.core.prefs
     文件         981  2015-07-03 10:22  AndroidManifest.xml
     目录           0  2013-05-31 10:55  assets\
     目录           0  2015-07-03 10:30  bin\
     目录           0  2015-01-11 23:26  gen\
     目录           0  2015-01-11 23:26  gen\com\
     目录           0  2015-07-03 10:26  gen\com\pic\
     文件         149  2015-07-03 10:19  gen\com\pic\BuildConfig.java
     文件        2507  2015-07-03 10:26  gen\com\pic\R.java
     文件        1159  2012-12-20 10:04  proguard.cfg
     文件         562  2015-07-03 10:23  project.properties
     目录           0  2015-07-03 10:16  res\
     目录           0  2015-07-03 10:25  res\drawable-hdpi\
     文件        2051  2015-01-16 12:25  res\drawable-hdpi\back.png
     文件       21926  2015-01-16 13:10  res\drawable-hdpi\bg1.png
     文件       28904  2015-01-16 12:17  res\drawable-hdpi\bg2.png
     文件       20144  2015-01-16 14:52  res\drawable-hdpi\bg3.png
     文件        4127  2013-05-20 15:20  res\drawable-hdpi\bgsoundoff.png
     文件        4042  2013-05-20 15:20  res\drawable-hdpi\bgsoundon.png
     文件         130  2015-01-16 16:00  res\drawable-hdpi\blood.png
     文件        3783  2013-05-21 10:44  res\drawable-hdpi\bloodbg.png
     文件        3683  2013-05-20 15:45  res\drawable-hdpi\bullet.png
     文件        4623  2013-04-19 15:05  res\drawable-hdpi\cloud.png
     文件        3622  2015-01-16 12:24  res\drawable-hdpi\detail.png
     文件       58494  2015-01-16 12:37  res\drawable-hdpi\detaildisplay.png
     文件         818  2015-01-16 13:32  res\drawable-hdpi\enemy1.png
     文件         798  2015-01-16 14:14  res\drawable-hdpi\enemy2.png
     文件         762  2015-01-16 15:28  res\drawable-hdpi\enemy3.png
............此处省略81个文件信息

评论

共有 条评论