資源簡介
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.xm
?????目錄???????????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\bg
?????文件????????4042??2013-05-20?15:20??res\drawable-hdpi\bg
?????文件?????????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個文件信息
評論
共有 條評論