(游戏)打飞机01:前言  传送门

(游戏)打飞机02:游戏背景滚动  传送门

(游戏)打飞机03:控制玩家飞机   传送门

(游戏)打飞机04:绘画敌机、添加子弹    传送门

(游戏)打飞机05:处理子弹,击中敌机,添加计分板   传送门

(游戏)打飞机06:后续  传送门

添加游戏声音

    private SoundPool pool=null;
private int sound_bomb=0;
private int sound_gameover=0;
private int sound_shot=0;
 1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌 曲或者做游戏背景音乐。

   2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。Android开发网建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。

   3. SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。

SoundPool注意事项

        //加载声音

        pool= new SoundPool(3, AudioManager.STREAM_SYSTEM,5);

        sound_bomb=pool.load(getContext(),R.raw.bomb,1);
sound_gameover=pool.load(getContext(),R.raw.gameover,1);
sound_shot=pool.load(getContext(),R.raw.shot,1);

  Android的SoundPool  传送门

  play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)   播放声音

  其中leftVolume和rightVolume表示左右音量,

    priority表示优先级,

    loop表示循环次数,

  rate表示速率,如 //速率最低0.5最高为2,1代表正常速度
  sp.play(soundId, 1, 1, 0, 0, 1);
  而停止则可以使用 pause(int streamID) 方法,这里的streamID和soundID均在构造SoundPool类的  

  第一个参数中指明了总数量,而id从0开始

  添加子弹声音

         if(selectfeiji!=null){
if(zidan_num==5){
pool.play(sound_shot,1,1,1,0,1);
zidans.add(new Zidan(selectfeiji,zidan));
zidan_num=0;
}
zidan_num++;
}

  添加在子弹击中敌机的时候添加爆炸声音

    //受到攻击
public void shoudaogongji(ArrayList<Zidan> zidans){ if(!state){
for(GameImage zidan:(List<GameImage>)zidans.clone()){ if(zidan.getX()>x&&zidan.getY()>y
&&zidan.getX()<x+width
&&zidan.getY()<y+height){
//子弹击中敌机了
zidans.remove(zidan);
state=true;
bitmaps=baozhas;
fenshu+=10;
pool.play(sound_bomb,1,1,1,0,1);
break;
}
}
}
}

  声音不放在线程中会可能会由于内存的问题导致声音播放时间延迟0.5S,听起来会有点别扭

线程中播放声音

  创建游戏声音播放线程

    private class SoundPlay extends Thread{
int i=0;
public SoundPlay(int i){
this.i=1;
} public void run(){
pool.play(i,1,1,1,0,1);
} }

  添加子弹声音

       if(selectfeiji!=null){
if(zidan_num==5){
new SoundPlay(sound_shot).start();
// pool.play(sound_shot,1,1,1,0,1);
zidans.add(new Zidan(selectfeiji,zidan));
zidan_num=0;
}
zidan_num++;
}

  添加在子弹击中敌机的时候添加爆炸声音

    //判断敌机是否被击中
private boolean state=false;
//受到攻击
public void shoudaogongji(ArrayList<Zidan> zidans){ if(!state){
for(GameImage zidan:(List<GameImage>)zidans.clone()){ if(zidan.getX()>x&&zidan.getY()>y
&&zidan.getX()<x+width
&&zidan.getY()<y+height){
//子弹击中敌机了
zidans.remove(zidan);
state=true;
bitmaps=baozhas;
fenshu+=10;
new SoundPlay(sound_bomb).start();
// pool.play(sound_bomb,1,1,1,0,1);
break;
}
}
}
}

App ICON

Android Studio中设置App Icon   百度经验:传送门

打开---文件----new----image asset

  设置图标保存文件到drawable时后有时会在Asset Studio里面Path找不到图片路径,这时可以找到mipmap-hdpi文件路径,把照片放到那下面

D:\Android\Android Studio\plugins\android\lib\templates\gradle-projects\NewAndroidModule\root\res\mipmap-hdpi

Android_(游戏)打飞机06:后续的更多相关文章

  1. Android_(游戏)打飞机05:处理子弹,击中敌机,添加计分板

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  2. Android_(游戏)打飞机04:绘画敌机、添加子弹

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  3. Android_(游戏)打飞机03:控制玩家飞机

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  4. Android_(游戏)打飞机02:游戏背景滚动

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  5. Android_(游戏)打飞机01:前言

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  6. 微信小游戏 demo 飞机大战 代码分析 (二)(databus.js)

    微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  7. 微信小游戏 demo 飞机大战 代码分析 (一)(game.js, main.js)

    微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞机大战 代码分析(二)(databus.js) 微信小游戏 demo 飞机大战 代码分析(三)(spirit. ...

  8. Python小游戏之 - 飞机大战美女 !

    用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...

  9. 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)

    微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...

随机推荐

  1. Ubuntu中配置Python虚拟环境Virtualenv

    Ubuntu版本为18.04 Virtualenv介绍 在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-pac ...

  2. springboot读取配置不存在报错

    @Value("${log.regId}")private String regId = "123123"; String regId = env.getPro ...

  3. Auto-increment 自动增长

    Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...

  4. mac 下安装mysql8.0

    有两种安装方式,一种是安装包安装,官网下载安装包,mysql8.0下载.mysql5.7安装: 这里记录brew安装: 1.brew uninstall mysql 卸载原有的: 2.brew ins ...

  5. [转]Opcode是啥以及如何使用好Opcache

    转载链接:Opcode是啥以及如何使用好Opcache 啥是Opcode? 我们在日常的PHP开发过程中,应该经常会听见Opcache这个词,那么啥是Opcode呢? Opcache 的前生是 Opt ...

  6. echarts-迁徙图地点图标颜色修改

    引用:https://gallery.echartsjs.com/editor.html?c=xLSy9AUmlA var uploadedDataURL = "/asset/get/s/d ...

  7. 正则替换replace中$1的用法

    一.repalce定义 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 1 2 3 4 5 stringObject.replace(regexp/substr,repla ...

  8. Django框架——基础之路由系统(urls.py)11111111

    1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...

  9. 自己实现一个简化版的SpringMVC框架

    废话不多说,我们进入今天的正题,在Web应用程序设计中,MVC模式已经被广泛使用.SpringMVC以DispatcherServlet为核心,负责协调和组织不同组件以完成请求处理并返回响应的工作,实 ...

  10. 配置maven的国内镜像

    pom.xml文件出现错误标记,一般是相关的maven资源没有下载完整. 1,配置maven的国内镜像,保证能够顺利下载maven中配置的资源. 在maven的配置文件  settings.xml  ...