实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
package ninjarush.mainsurfaceview;
import java.text.AttributedCharacterIterator.Attribute;
import java.util.Vector;
import ninarush.enemy.Enemy;
import ninjarush.bulletclass.Bullet;
import ninjarush.dead.Dead;
import ninjarush.mainactivity.R;
import ninjarush.mainactivity.UserAchieve;
import ninjarush.music.GameMusic;
import ninjarush.relatedclass.Boss;
import ninjarush.relatedclass.GameMap;
import ninjarush.relatedclass.Game_Menu;
import ninjarush.relatedclass.Game_Over;
import ninjarush.relatedclass.Gameing_Bg;
import ninjarush.relatedclass.Loading;
import ninjarush.relatedclass.MyButton;
import ninjarush.relatedclass.Pause;
import ninjarush.relatedclass.Player;
import ninjarush.relatedclass.Tools;
import ninjarushh.food.Food;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.media.SoundPool;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class NinjaRushSurfaceView extends SurfaceView implements Runnable,
SurfaceHolder.Callback {
private Context context;
private SurfaceHolder holder;
private Canvas canvas;
private Paint paint;
private BitmapFactory.Options ops;
// 是否为第一次加载
private boolean isFirstLoadLoading;
private boolean isFirstLoadImage;
public static boolean flag;// 线程标记
public static int status;// 游戏界面的状态
public static int screenW, screenH;// 屏幕的宽和高
public static boolean isreset;// 是否重置
// 定义背景对象
private Gameing_Bg gameing_bg;
private Game_Over gameover;
// 定义Boss图片
public static Vector<Bitmap> vcboss;
private Bitmap bossBitmap;
// 定义Boss
private ninjarush.relatedclass.Boss boss;
//记录boss的死亡次数
private int bossDeadCount;
// 定义按钮对象
private MyButton mybutton;
// 游戏中背景三张图,以及暂停,和发飚按钮
private Bitmap bmpbg1, bmpbg2, bmpbg3, bmpbulletbnt, bmppause;
// 初始化游戏结束(失败)背景图片
private Bitmap bmpbg;
// Loading界面
private Bitmap bmploading_bg;
private Loading loading;
private Bitmap bmpover_quit_up, bmpover_quit_down, bmpover_try_up,
bmpover_try_down, bmpover_submit_up, bmpover_submit_down,
bmpover_achi_up, bmpover_achi_down;// 图片
// 白云
private Bitmap bmpcloud_0, bmpcloud_1, bmpcloud_2, bmpcloud_3;
// ---------------------- GameMenu
private Bitmap bmpinitbg;// GameMenu 背景图片
private Bitmap bmpmore1;// GameMenu “更多”未按下图片
private Bitmap bmpmore2;// GameMenu “更多”按下背景图片
private Bitmap bmpplay_up;// GameMenu 开始未按下图片
private Bitmap bmpplay_down;// GameMenu 开始按下图片
private Bitmap bmpachi_up;// GameMenu 成就未按下图片
private Bitmap bmpachi_down;// GameMenu 成就按下图片
private Bitmap bmpopen_up;// GameMenu GameBox未按下图片
private Bitmap bmpopen_down;// GameMenu GameBox按下背景图片
private Game_Menu gameMenu;// GameMenu 对象
// ---------------------------Pause
private Bitmap blackground;// Pause 背景图片
private Bitmap voice; // Pause 静音图片
private Bitmap resume;// Pause 继续图片
private Bitmap quit;// Pause 退出图片
private Pause pause;// Pause 对象
// ///////////////////////
// 计数器
private int count;
private Vector<GameMap> vcMap;
private GameMap gameMap;
// 桥
private Bitmap bam_left, bam_mid, bam_right, bam_under;
private Bitmap fly_bam_right, fly_bam_mid, fly_bam_left, dre4;
// 旗杆 刀
private Bitmap dao, light;
// 桥类型
private int style;
// 忍者的相关参数----------------------------------------------------------------------------------------------------
private Bitmap blood, changeToDart, dartMan, hurtBlood, changeff, dartShow,
bulletMan, rope, ropef, protectDart, leaf, ropeMan;
private Player player;
// 忍者的相关参数-----------------------------------------------------------------------------------------------------
// 333333333-----------------------------------------
// 子弹
private Bullet bullet;
private Vector<Bullet> vetorBullet;
private Vector<Bullet> vetorBulletBoss;
private Bitmap bmpBulletPlayer, bmpBulletBoss;
private int playerBulletCount, BossBulletCount;
private boolean bulletFire;
private Rect rect;
private int BulletKillCount = 0;
// 乌鸦
private Bitmap bmpCrow;
private Bitmap bmpCrowFeather;
private Bitmap bmpHurtBlood;
private Vector<Enemy> veEnemy;
private Vector<Dead> veDead;
private Bitmap bmpAntDead;
private Bitmap bmpAnt;
// 食物
private Bitmap bmpFoodHeart, bmpFoodBullet;
private Vector<Food> vcFood;
private int countMusic = 0;// 音乐计数器
// /////////////////////////
public NinjaRushSurfaceView(Context context, AttributeSet attribute) {
super(context, attribute);
this.context = context;
holder = getHolder();
holder.addCallback(this);
paint = new Paint();
paint.setColor(Color.WHITE);
isFirstLoadLoading = true;
isFirstLoadImage = true;
// 用来完成对图片空间的控制
ops = new BitmapFactory.Options();
status = Tools.GAME_MENU;// 初始化游戏界面的状态
flag = true;// 初始化线程标记
this.setFocusable(true);
this.setFocusableInTouchMode(true);
}
public void myDraw() {
try {
canvas = holder.lockCanvas();
if (canvas != null) {
switch (status) {
// 绘制loading界面
case Tools.GAME_LOADING:
loading.draw(canvas, paint);
break;
// 绘制 GAME_MENU 界面
case Tools.GAME_MENU:
gameMenu.draw(canvas, paint);
break;
// 绘制GAME_PLAYING 界面
case Tools.GAME_PLAYING:
gameing_bg.draw(canvas, paint);
for (int i = 0; i < veEnemy.size(); i ) {
veEnemy.elementAt(i).onDraw(canvas, paint);
}
mapDraw();
mybutton.draw(canvas, paint);
player.draw(canvas, paint);
// 子弹
for (int i = 0; i < vetorBullet.size(); i ) {
vetorBullet.elementAt(i).onDraw(canvas, paint);
}
// 死亡效果
for (int i = 0; i < veDead.size(); i ) {
veDead.elementAt(i).onDraw(canvas, paint);
}
// 食物
for (int i = 0; i < vcFood.size(); i ) {
vcFood.elementAt(i).onDraw(canvas, paint);
}
// 绘制Boss
if (boss != null) {
if (boss.isDead() == false) {
boss.draw(canvas, paint);
}
}
// boss子弹
if (boss != null) {
for (int i = 0; i < vetorBulletBoss.size(); i ) {
vetorBulletBoss.elementAt(i).onDraw(canvas, paint);
}
}
break;
// 绘制GAME_OVER 界面
case Tools.GAME_OVER:
// 将最后的米数给gameover界面
Game_Over.latestmeter = gameing_bg.getMeter();
gameover.draw(canvas, paint);
break;
// 绘制 GAME_PAUSE 界面
case Tools.GAME_PAUSE:
gameing_bg.draw(canvas, paint);
mapDraw();
pause.draw(canvas, paint);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
}
public void logic() {
switch (status) {
// loading界面逻辑
case Tools.GAME_LOADING:
if (isFirstLoadLoading) {
initImage();
isFirstLoadLoading = false;
}
init();
status = Tools.GAME_PLAYING;
if (countMusic == 0) {
GameMusic.startMusic();// 播放 GAME_PLAYING 界面 背景音乐;
GameMusic.playSound(R.raw.land, 0);// 播放一次落地 音效
} else {
GameMusic.nextMusic(R.raw.bg);
GameMusic.playSound(R.raw.land, 0);// 播放一次落地 音效
}
break;
// GAME_MENU 界面 逻辑
case Tools.GAME_MENU:
gameMenu.logic();
break;
// GAME_PLAYING 界面逻辑
case Tools.GAME_PLAYING:
gameing_bg.logic();
// ///////////
for (int i = 0; i < vcMap.size(); i ) {
gameMap = vcMap.elementAt(i);
if (gameMap.isDead()) {
vcMap.remove(i);
} else {
gameMap.logic();
vcMap.elementAt(i).setYy(gameing_bg.getYy());
}
}
if (vcMap.size() >= 1) {
if (vcMap.elementAt(vcMap.size() - 1).mapEndX <= screenW
dre4.getWidth()) {
int num = (int) (Math.random() * 10);
if (num <= 6) {
style = Tools.STYLE_LAND;
gameMap = new GameMap(bam_left, bam_mid, bam_right,
bam_under, light, screenW, screenH, style,
false);
vcMap.add(gameMap);
// 蚂蚁或刀子
if (vcMap.elementAt(vcMap.size() - 1).getStyle() == Tools.STYLE_LAND) {
int i = (int) (Math.random() * 5);
int[] position = { gameMap.getleftX(),
gameMap.getLeftY(), gameMap.getEndX(),
gameMap.getLeftY() };
if (i == 0) {
veEnemy.add(new Enemy(Tools.ENEMY_DAO, dao,
position));
}
if (i == 1 || i == 4) {
veEnemy.add(new Enemy(Tools.ENEMY_ANT, bmpAnt,
position));
}
if (i == 3) {
veEnemy.add(new Enemy(Tools.ENEMY_DAO, dao,
position));
veEnemy.add(new Enemy(Tools.ENEMY_ANT, bmpAnt,
position));
}
}
}
else {
style = Tools.STYLE_SKY;
if (vcMap.elementAt(vcMap.size() - 1).getStyle() == Tools.STYLE_LAND) {
gameMap = new GameMap(fly_bam_left, fly_bam_mid,
fly_bam_right, dre4, light, screenW, vcMap
.elementAt(vcMap.size() - 1)
.getLeftY(), style, true);
vcMap.add(gameMap);
} else {
gameMap = new GameMap(fly_bam_left, fly_bam_mid,
fly_bam_right, dre4, light, screenW, vcMap
.elementAt(vcMap.size() - 1)
.getLeftY(), style, false);
vcMap.add(gameMap);
}
}
}
}
// 设置地图速度
for (int i = 0; i < vcMap.size(); i ) {
vcMap.elementAt(i).setSpeed(gameing_bg.getBgspeed() * 5);
}
// 设置敌人速度
for (int i = 0; i < veEnemy.size(); i ) {
if (veEnemy.elementAt(i).getEnemyType() == Tools.ENEMY_DAO) {
veEnemy.elementAt(i).setSpeed(gameing_bg.getBgspeed() * 5);
}
// 设置食物速度
for (int j = 0; j < vcFood.size(); j ) {
vcFood.elementAt(j).setSpeed(gameing_bg.getBgspeed() * 5);
vcFood.elementAt(j).setYy(gameing_bg.getYy());
}
}
//设置子弹偏移量
for (int i = 0; i < vetorBullet.size(); i ) {
vetorBullet.elementAt(i).setYy(gameing_bg.getYy());
}
for (int i = 0; i < vetorBulletBoss.size(); i ) {
vetorBulletBoss.elementAt(i).setYy(gameing_bg.getYy());
}
// // ////////
// 忍者的逻辑处理-----------------------------------------------------------------------------------------------------
player.logic();
// 判断忍者与木桩的碰撞
for (GameMap e : vcMap) {
// 判断主角是否在地上的桥之上
if ((player.getPosition()[0] player.getPosition()[2] >= e
.getleftX() && player.getPosition()[0] <= e.getEndX())
&& (player.getPosition()[1] player.getPosition()[3] >= e
.getLeftY() && player.getPosition()[1]
player.getPosition()[3] <= e.getLeftY()
Tools.NINJA_SPEED)
&& (e.getStyle() == Tools.STYLE_LAND || e.getStyle() == Tools.STYLE_START)) {
if (gameing_bg.getBgspeed() != 0)
player.setIsUpOfPale(true);
break;
} else {
player.setIsUpOfPale(false);
}
// 判断主角是否在天上的桥之下
if ((player.getPosition()[0] >= e.getleftX() && player
.getPosition()[0] player.getPosition()[2] / 2 <= e
.getEndX()) && e.getStyle() == Tools.STYLE_SKY) {
player.setIsPaleOnHead(true, gameMap.getSky_y()
fly_bam_left.getHeight() / 2,
gameing_bg.getBgspeed()*5);
break;
} else
player.setIsPaleOnHead(false, 0, 0);
// 判断主角与左突起的碰撞
if ((player.getPosition()[1] player.getPosition()[3] >= e
.getLeftY() Tools.NINJA_SPEED)
&& (player.getPosition()[1] <= e.getLeftY()
bam_left.getHeight())
&& (player.getPosition()[0] player.getPosition()[2] >= e
.getleftX() && player.getPosition()[0] < e
.getleftX())
&& e.getStyle() == Tools.STYLE_LAND) {
if (gameing_bg.getBgspeed() != 0) {
player.setIsUpOfPale(false);
player.setIsPaleOnHead(false, 0, 0);
player.setStatus(Tools.PLAYERWALK);
gameing_bg.setBgspeed(0);
gameing_bg.islogic = false;
}
}
// 判断主角与桥桩子的碰撞
if ((player.getPosition()[1] >= e.getLeftY()
bam_left.getHeight())
&& (player.getPosition()[0] player.getPosition()[2] >= e
.getleftX() bam_left.getWidth() && player
.getPosition()[0] < e.getleftX())
&& e.getStyle() == Tools.STYLE_LAND) {
player.setIsUpOfPale(false);
player.setIsPaleOnHead(false, 0, 0);
if (player.getPlayerStatus() != Tools.PLAYERDART)
player.setStatus(Tools.PLAYERWALK);
gameing_bg.islogic = false;
gameing_bg.setBgspeed(0);
// break;
}
// 如果屏幕停止了,但是忍者跳到了木桩之上,则要让屏幕继续移动
if (gameing_bg.getBgspeed() == 0
&& (player.getPosition()[1] player.getPosition()[3] <= e
.getLeftY())
&& (player.getPosition()[0] player.getPosition()[2] <= e
.getleftX() Tools.LATERBGSPEED * 3)) {
gameing_bg.setBgspeed(Tools.PREBGSPEED*3);
gameing_bg.islogic = true;
}
}
if (player.getIsPlayerDead()) {
boss=null;
GameMusic.playSound(R.raw.dead, 0);// 播放死亡声效
GameMusic.pauseRun();
GameMusic.pauseSound(Tools.sound_wind);
GameMusic.pauseMusic();// 暂停游戏中背景音乐
GameMusic.pauseWind();//暂停风声
status = Tools.GAME_OVER;
}
// 忍者的逻辑处理-----------------------------------------------------------------------------------------------------
// 33333333333333333-------------------------------------------------------------
// 人物子弹
if (player.getIsShootMore()) {
vetorBullet.add(new Bullet(Tools.BULLETPLAYERWUDIAFTER, player
.getPosition()[0], player.getPosition()[1],
bmpBulletPlayer));
player.setIsShootMore(false);
}
if (bulletFire && player.getPlayerStatus() != Tools.PLAYERDART) {
GameMusic.playSound(R.raw.shoot, 0);
vetorBullet.add(new Bullet(Tools.BULLETPLAYER, player
.getPosition()[0] player.getPosition()[0] / 2, player
.getPosition()[1] ropeMan.getHeight() / 2,
bmpBulletPlayer));
bulletFire = false;
}
// 人物子弹移除方法及逻辑及打到boss
for (int i = 0; i < vetorBullet.size(); i ) {
Bullet b = vetorBullet.elementAt(i);
if (boss != null) {
int[] position1 = { b.getBulletX(), b.getBulletY(),
b.getBmpW(), b.getBmpH() };
if (Tools.isCollision(position1, boss.getPosition())) {
if (b.isFirstCollision()==false) {
GameMusic.playSound(R.raw.boss_hurt, 0);// boss 收到攻击
// 声效
Dead d = new Dead(Tools.DEAD_BOSS, b.getBulletX(),
boss.getPosition()[1]
boss.getPosition()[3] / 2,
bmpHurtBlood);
veDead.add(d);
b.isBulletIsDead();
boss.setHp(boss.getHp() - 1);
b.setFirstCollision(true);
}
if (boss.getHp() <= -1) {
bossDeadCount ;
if(bossDeadCount==1)
UserAchieve.userAchieve[7]=1;
if(bossDeadCount==3)
UserAchieve.userAchieve[8]=1;
GameMusic.playSound(R.raw.boss_die, 0);
boss.setDead(true);
boss = null;
player.setIsProtectDart();
}
}
}
if (b.isBulletIsDead()) {
if (b.getCount() > BulletKillCount) {
BulletKillCount = b.getCount();
if (BulletKillCount == 5)
UserAchieve.userAchieve[5] = 1;
if (BulletKillCount == 15)
UserAchieve.userAchieve[6] = 1;
}
vetorBullet.removeElementAt(i);
} else {
b.logic();
}
}
// 乌鸦
if (gameing_bg.getMeter() % 100 == 0) {
Enemy enemy = new Enemy(Tools.ENEMY_CROW, bmpCrow);
veEnemy.add(enemy);
enemy = null;
}
for (int i = 0; i < veEnemy.size(); i ) {
Enemy c = veEnemy.elementAt(i);
if (c.isEnemyIsDead()) {
veEnemy.remove(i);
} else {
if (c.getEnemyType() != Tools.ENEMY_CROW) {
c.setYy(gameing_bg.getYy());
}
if (c.getEnemyType() == Tools.ENEMY_ANT) {
c.setSpeed(gameing_bg.getBgspeed() * 5);
}
c.logic();
}
}
// 碰撞
for (int j = 0; j < veEnemy.size(); j ) {
Enemy c = veEnemy.elementAt(j);
// 子弹
for (int i = 0; i < vetorBullet.size(); i ) {
Bullet b = vetorBullet.elementAt(i);
int[] position1 = { c.getEnemyX(), c.getEnemyY(),
c.getEnemyW(), c.getEnemyH() };
int[] position2 = { b.getBulletX(), b.getBulletY(),
b.getBmpW(), b.getBmpH() };
if (Tools.isCollision(position1, position2)) {
b.setCount();
if (c.getEnemyType() == Tools.ENEMY_CROW) {
GameMusic.playSound(R.raw.crow_hurt, 0);// 乌鸦被攻击声效
Dead e = new Dead(Tools.DEAD_CROW, c.getEnemyX(),
c.getEnemyY(), bmpCrow, bmpHurtBlood,
bmpCrowFeather);
c.setEnemyIsDead(true);
veDead.add(e);
continue;
}
if (c.getEnemyType() == Tools.ENEMY_ANT) {
GameMusic.playSound(R.raw.enemy_die, 0);
Dead e = new Dead(Tools.DEAD_ANT, c.getEnemyX(),
c.getEnemyY(), bmpHurtBlood, bmpAntDead);
veDead.add(e);
c.setEnemyIsDead(true);
continue;
}
}
}
// 人物无敌与敌人
if (player.getIsUndead()) {
int[] position1 = { c.getEnemyX(), c.getEnemyY(),
c.getEnemyW(), c.getEnemyH() };
if (Tools.isCollision(position1, player.getPosition())) {
if (c.getEnemyType() == Tools.ENEMY_CROW) {
Dead e = new Dead(Tools.DEAD_CROW, c.getEnemyX(),
c.getEnemyY(), bmpCrow, bmpHurtBlood,
bmpCrowFeather);
c.setEnemyIsDead(true);
veDead.add(e);
}
if (c.getEnemyType() == Tools.ENEMY_ANT) {
Dead e = new Dead(Tools.DEAD_ANT, c.getEnemyX(),
c.getEnemyY(), bmpHurtBlood, bmpAntDead);
veDead.add(e);
c.setEnemyIsDead(true);
}
}
}
}
// 死亡效果
for (int i = 0; i < veDead.size(); i ) {
Dead d = veDead.elementAt(i);
if (d.isDeadIsOver()) {
veDead.remove(i);
} else {
d.logic();
}
}
// 食物350,250
if (gameing_bg.getMeter() %250 == 0) {
Food f = new Food(bmpFoodHeart, Tools.FOODHEART,
gameMap.getLeftY());
vcFood.add(f);
}
if (gameing_bg.getMeter() % 150 == 0) {
Food f1 = new Food(bmpFoodBullet, Tools.FOODBULLET,
gameMap.getLeftY());
vcFood.add(f1);
}
for (int i = 0; i < vcFood.size(); i ) {
Food f = vcFood.elementAt(i);
if (f.isFoodIsDead()) {
vcFood.remove(i);
} else {
f.logic();
}
}
// 敌人与主角碰撞
for (Enemy e : veEnemy) {
int position[] = { e.getEnemyX(), e.getEnemyY(), e.getEnemyW(),
e.getEnemyH() };
if (Tools.isCollision(position, player.getPosition())) {
if (!e.getIsCollision()) {
if(player.getIsUndead()){
if (e.getEnemyType() == Tools.ENEMY_CROW) {
GameMusic.playSound(R.raw.crow_hurt, 0);// 人物 无敌状态 乌鸦 收到攻击 声效
} else if (e.getEnemyType() == Tools.ENEMY_ANT) {
GameMusic.playSound(R.raw.enemy_die, 0);// 人物 无敌状态 蚂蚁 受到攻击 声效
}
}
player.setIsHurt();
e.setIsCollision(true);
}
if (player.getIsUndead())
e.setEnemyIsDead(true);
}
}
// 食物与主角碰撞
for (Food f : vcFood) {
int position[] = { f.getFoodX(), f.getFoodY(), f.getFoodW(),
f.getFoodH() };
if (Tools.isCollision(position, player.getPosition())) {
switch (f.getFoodType()) {
case Tools.FOODHEART:
player.eatFood(Tools.FOODHEART);
f.setFoodIsDead(true);
break;
case Tools.FOODBULLET:
player.eatFood(Tools.FOODBULLET);
f.setFoodIsDead(true);
break;
}
}
}
// Boss逻辑
if (gameing_bg.getMeter() % 1000 == 0) {
boss = new Boss(vcboss);
}
if (boss != null) {
boss.logic();
BossBulletCount ;
if (BossBulletCount % 20 == 0) {
vetorBulletBoss.add(new Bullet(Tools.BULLETBOSS, screenW
- boss.getPosition()[2], boss.getPosition()[1]
boss.getPosition()[3] * 2 / 3, bmpBulletBoss));
}
for (int i = 0; i < vetorBulletBoss.size(); i ) {
Bullet b = vetorBulletBoss.elementAt(i);
if (b.isBulletIsDead()) {
vetorBulletBoss.remove(i);
} else {
b.logic();
}
}
}
// boss子弹与主角碰撞
for (int i = 0; i < vetorBulletBoss.size(); i ) {
Bullet b = vetorBulletBoss.elementAt(i);
int[] position1 = { b.getBulletX(), b.getBulletY(),
b.getBmpW(), b.getBmpH() };
if (Tools.isCollision(position1, player.getPosition())) {
if (!b.isIsCollision()) {
player.setIsHurt();
b.setIsCollision(true);
}
}
}
break;
// GAME_OVER 界面逻辑
case Tools.GAME_OVER:
gameover.logic();
break;
// GAME_PAUSE 界面逻辑
case Tools.GAME_PAUSE:
break;
}
}
public void surfaceCreated(SurfaceHolder holder) {
screenW = this.getWidth();// 获取屏幕的宽
screenH = this.getHeight();// 获取屏幕的高
bossDeadCount=0;
if (ops == null) {
ops = new BitmapFactory.Options();
}
if (isFirstLoadImage) {
initLoading();
// GameMusic.startMusic();// 播放音乐
isFirstLoadImage = false;
// ////////////
vcMap = new Vector<GameMap>();
gameMap = new GameMap(bam_left, bam_mid, bam_right, bam_under, 0,
screenH - bam_under.getHeight() / 2, Tools.STYLE_START);
vcMap.add(gameMap);
// //////////////
new Thread(this).start();// 启动游戏线程
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
public void run() {
while (flag) {
long start = System.currentTimeMillis();
myDraw();
logic();
long end = System.currentTimeMillis();
try {
if (end - start <= 100)
Thread.sleep(100 - end start);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 初次初始化做的操作
public void initLoading() {
// 初始化游戏的成就数组
UserAchieve.userAchieve = UserAchieve.getAchive(context);
// /// map 地图
bam_left = BitmapFactory.decodeResource(getResources(),
R.drawable.bam_left, ops);
bam_mid = BitmapFactory.decodeResource(getResources(),
R.drawable.bam_mid, ops);
bam_right = BitmapFactory.decodeResource(getResources(),
R.drawable.bam_right, ops);
bam_under = BitmapFactory.decodeResource(getResources(),
R.drawable.bam_under, ops);
fly_bam_right = BitmapFactory.decodeResource(getResources(),
R.drawable.fly_bam_right, ops);
fly_bam_mid = BitmapFactory.decodeResource(getResources(),
R.drawable.fly_bam_mid, ops);
fly_bam_left = BitmapFactory.decodeResource(getResources(),
R.drawable.fly_bam_left, ops);
dre4 = BitmapFactory.decodeResource(getResources(), R.drawable.dre4,
ops);
light = BitmapFactory.decodeResource(getResources(), R.drawable.light,
ops);
dao = BitmapFactory.decodeResource(getResources(), R.drawable.dao, ops);
// 加载 GameMenu 对象中的图片
bmpinitbg = BitmapFactory.decodeResource(this.getResources(),
R.drawable.initbg, ops);
bmpplay_up = BitmapFactory.decodeResource(this.getResources(),
R.drawable.play_up, ops);
bmpplay_down = BitmapFactory.decodeResource(this.getResources(),
R.drawable.play_down, ops);
bmpachi_up = BitmapFactory.decodeResource(this.getResources(),
R.drawable.achi_up, ops);
bmpachi_down = BitmapFactory.decodeResource(this.getResources(),
R.drawable.achi_down, ops);
bmpopen_up = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_quit_up, ops);
bmpopen_down = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_quit_down, ops);
bmpmore1 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.more1, ops);
bmpmore2 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.more2, ops);
// 在加载完了参数以后,实例化GameMenu 对象
gameMenu = new Game_Menu(bmpinitbg, bmpmore1, bmpmore2, bmpplay_up,
bmpplay_down, bmpachi_up, bmpachi_down, bmpopen_up,
bmpopen_down, context);
// 初始化loading界面
bmploading_bg = BitmapFactory.decodeResource(this.getResources(),
R.drawable.loading, ops);
loading = new Loading(bmploading_bg);
}
// 初始化图片背景
public void initImage() {
// 初始化游戏中背景图片
bmpbg1 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.bg1, ops);
bmpbg2 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.bg2, ops);
bmpbg3 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.bg3, ops);
// 初始化游戏结束时的背景
bmpbg = BitmapFactory.decodeResource(this.getResources(),
R.drawable.b_page, ops);
bmpover_achi_down = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_achi_down, ops);
bmpover_achi_up = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_achi_up, ops);
bmpover_quit_down = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_quit_down, ops);
bmpover_quit_up = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_quit_up, ops);
bmpover_submit_down = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_submit_down, ops);
bmpover_submit_up = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_submit_up, ops);
bmpover_try_down = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_try_down, ops);
bmpover_try_up = BitmapFactory.decodeResource(this.getResources(),
R.drawable.over_try_up, ops);
// 游戏中的暂停,和发镖的按钮
bmpbulletbnt = BitmapFactory.decodeResource(this.getResources(),
R.drawable.dartbtn, ops);
bmppause = BitmapFactory.decodeResource(this.getResources(),
R.drawable.pausebt, ops);
// 游戏中的白云
bmpcloud_0 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.cloud_0, ops);
bmpcloud_1 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.cloud_1, ops);
bmpcloud_2 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.cloud_2, ops);
bmpcloud_3 = BitmapFactory.decodeResource(this.getResources(),
R.drawable.cloud_3, ops);
// 加载 Pause 对象中的图片
blackground = BitmapFactory.decodeResource(this.getResources(),
R.drawable.pausepanel, ops);
voice = BitmapFactory.decodeResource(this.getResources(),
R.drawable.voice, ops);
resume = BitmapFactory.decodeResource(this.getResources(),
R.drawable.resume, ops);
quit = BitmapFactory.decodeResource(this.getResources(),
R.drawable.quit, ops);
// 忍者的相关参数----------------------------------------------------------------------------------------------------
blood = BitmapFactory.decodeResource(getResources(), R.drawable.blood,
ops);
changeToDart = BitmapFactory.decodeResource(getResources(),
R.drawable.changetodart, ops);
dartMan = BitmapFactory.decodeResource(getResources(),
R.drawable.dartman, ops);
hurtBlood = BitmapFactory.decodeResource(getResources(),
R.drawable.hurtblood, ops);
changeff = BitmapFactory.decodeResource(getResources(),
R.drawable.changeff, ops);
dartShow = BitmapFactory.decodeResource(getResources(),
R.drawable.dartshow, ops);
rope = BitmapFactory.decodeResource(getResources(), R.drawable.rope,
ops);
ropef = BitmapFactory.decodeResource(getResources(), R.drawable.ropef,
ops);
protectDart = BitmapFactory.decodeResource(getResources(),
R.drawable.protectdart, ops);
leaf = BitmapFactory.decodeResource(getResources(), R.drawable.leaf,
ops);
ropeMan = BitmapFactory.decodeResource(getResources(),
R.drawable.ropeman, ops);
bulletMan = BitmapFactory.decodeResource(getResources(),
R.drawable.bulletman, ops);
}
// 初始化实例对象
public void init() {
// 是否复位静音
Pause.isJingYin = false;
// 实例背景对象
gameing_bg = new Gameing_Bg(bmpbg1, bmpbg2, bmpbg3, bmpcloud_0,
bmpcloud_1, bmpcloud_2, bmpcloud_3);
// 实例化桥对象
vcMap = new Vector<GameMap>();
gameMap = new GameMap(bam_left, bam_mid, bam_right, bam_under, 0,
screenH - bam_under.getHeight() / 2, Tools.STYLE_START);
vcMap.add(gameMap);
// 实例化按钮 发飙与暂停
mybutton = new MyButton(bmpbulletbnt, bmppause);
pause = new Pause(blackground, voice, resume, quit);
// 实例化游戏结束Over背景
gameover = new Game_Over(bmpbg, bmpover_quit_up, bmpover_quit_down,
bmpover_try_up, bmpover_try_down, bmpover_submit_up,
bmpover_submit_down, bmpover_achi_up, bmpover_achi_down,
context);
// 忍者的相关参数-----------------------------------------------------------------------------------------------------
player = new Player(blood, changeToDart, dartMan, hurtBlood, changeff,
dartShow, rope, ropef, protectDart, leaf, ropeMan, bulletMan);
// 333333333-----------------------------------
// 子弹相关初始化
vetorBullet = new Vector<Bullet>();
vetorBulletBoss = new Vector<Bullet>();
bmpBulletPlayer = BitmapFactory.decodeResource(getResources(),
R.drawable.weapon, ops);
bmpBulletBoss = BitmapFactory.decodeResource(getResources(),
R.drawable.attackfire, ops);
bulletFire = false;
rect = new Rect(mybutton.getBulletX(), mybutton.getBulletY(),
mybutton.getBulletX() mybutton.bulletW, mybutton.getBulletY()
mybutton.getBulletH());
BossBulletCount = 1;
// 乌鸦
bmpCrow = BitmapFactory.decodeResource(getResources(), R.drawable.crow,
ops);
bmpCrowFeather = BitmapFactory.decodeResource(getResources(),
R.drawable.crowfeather, ops);
bmpHurtBlood = BitmapFactory.decodeResource(getResources(),
R.drawable.hurtblood, ops);
veEnemy = new Vector<Enemy>();
veDead = new Vector<Dead>();
bmpAntDead = BitmapFactory.decodeResource(getResources(),
R.drawable.antdead, ops);
bmpAnt = BitmapFactory.decodeResource(getResources(), R.drawable.enemy,
ops);
// 食物
bmpFoodHeart = BitmapFactory.decodeResource(getResources(),
R.drawable.foodblood, ops);
bmpFoodBullet = BitmapFactory.decodeResource(getResources(),
R.drawable.dartfood, ops);
vcFood = new Vector<Food>();
// 初始化boss图片
vcboss = new Vector<Bitmap>();
for (int i = 0; i < 8; i ) {
bossBitmap = BitmapFactory.decodeResource(this.getResources(),
R.drawable.boss_0 i);
vcboss.add(bossBitmap);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (status) {
case Tools.GAME_MENU:
gameMenu.onTouchEvent(event);// GameMenu 界面 触屏事件
break;
case Tools.GAME_PLAYING:
if (!mybutton.onTouchEvent(event) && !player.getIsJumpTwice()
&& !player.getIsScreenDown()) {
// Log.e("",
// !mybutton.onTouchEvent(event) "," !player.getIsJumpTwice() "," !player.getIsDrawRope() "");
gameing_bg.onTouchEvent(event, player.getPosition()[1]);
}
// 将当前的米数传给暂停界面用于显示
Pause.currentmeter = gameing_bg.getMeter();
mybutton.onTouchEvent(event);// 暂停,,,发表按钮触屏事件
player.ontouch(event, mybutton.getPosition(),
mybutton.getPositionLeftRound());
// //////33333开火
if (inRect((int) event.getX(), (int) event.getY(), rect)) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
bulletFire = true;
} else {
bulletFire = false;
}
if (event.getAction() == MotionEvent.ACTION_UP) {
bulletFire = false;
}
}
break;
case Tools.GAME_OVER:
gameover.onTouchEvent(event);
break;
case Tools.GAME_PAUSE:
pause.onTouchEvent(event);// GamePause 界面 触屏事件
break;
}
return true;
// /////////////////////////////////////////////////////////////////////
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_UP)
player.eatFood(Tools.FOODHEART);
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
player.setIsProtectDart();
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN)
player.eatFood(Tools.FOODBULLET);
if (keyCode == KeyEvent.KEYCODE_BACK) {
switch (status) {
// GAME_MENU 界面 逻辑
case Tools.GAME_MENU:
NinjaRushSurfaceView.flag = false;
GameMusic.releaseMusic();// 释放背景音乐资源
GameMusic.releaseRun();//释放 run声音
GameMusic.releaseWind();//释放 风声资源
return super.onKeyDown(keyCode, event);
// GAME_PLAYING 界面逻辑
case Tools.GAME_PLAYING:
GameMusic.pauseMusic();//暂停 背景音乐
GameMusic.pauseWind();
GameMusic.pauseRun();
NinjaRushSurfaceView.status = Tools.GAME_MENU;
init();
// System.out.println(Tools.GAME_PLAYING " Tools.GAME_PLAYING");
break;
// GAME_OVER 界面逻辑
case Tools.GAME_OVER:
NinjaRushSurfaceView.status = Tools.GAME_MENU;
break;
// GAME_PAUSE 界面逻辑
case Tools.GAME_PAUSE:
NinjaRushSurfaceView.status = Tools.GAME_MENU;
init();
break;
}
}
return true;
}
private void mapDraw() {
for (int i = 0; i < vcMap.size(); i ) {
GameMap map = vcMap.elementAt(i);
map.draw(canvas, paint);
}
}
private boolean inRect(int touchX, int touchY, Rect rect) {
return rect.contains(touchX, touchY);
}
}
好例子网口号:伸出你的我的手 — 分享!
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


支持(0) 盖楼(回复)
支持(0) 盖楼(回复)