Android小游戏开发相关菜鸟级经验及提示<1>图像和音频相关

哦,,我真是消失的够久了,,,这个学期在做大作业的过程中其实着实遇到了些问题,只不过,因为忙着做作业呀,还有一些其他什么的一直没有总结,,,今天的主要任务完成的差不多,又想起可以来更一下了。今天主要总结下自己做安卓手游的一些菜鸟问题。

1、有关放图

   这真是基础的不能再基础的问题了。

   放图的方式主要两种,一种用Bitmap,一种用ImageView。就我个人经验来讲,我认为ImageView呢主要是在Activity里面进行使用(就是说代码直接写在Activity里面的意思,我很菜嘛,所以用语可能不规范,请多包涵哈~),也有自己写一个继承ImageView的类的情况,最简单的放图就是用ImageView加载一张图片:

1>在界面XML文件中添加一个ImageView1

2>在Activity代码中声明一个ImageView,ID指向ImageView1的ID,这个ID可以根据需要进行修改

   ImageView title = (ImageView) findViewById(R.id.title);

   就个人经验之谈,↑这个语句不能写到自定义类中。

3>加载图片

   title.setImageResource(R.drawable.title);

    Bitmap实际上是绘制在画布上的,它只起到加载图片的作用,也就是说首先你需要有一个画布:

1>准备工作:

Canvas mCanvas;

Bitmap blackbitmap;

2>加载图片:

blackbitmap= BitmapFactory.decodeResource(res, R.drawable.black);

3>绘制:

mCanvas.drawBitmap(blackbitmap,x, y, true);

Bitmap的绘制方法有很多,这是最简单的,用坐标进行绘制

其他常用绘制方法列举:

1>使用rect

就是先定义一个矩形,将Bitmap绘制在这个矩形范围内。

RectF rect = new RectF();//绘制范围

rect.set(x,y,x+50,y+50);
canvas.drawBitmap(bitmap, null, rect,null);

需要注意的是,rect.set(float x,float y,float x2,float y2),这四个参数可以这样理解:

你所定义的矩形左上角点为(x,y)右下角点为(x2,y2)

没错,就是这样,和我们的常规理解不太一样。

2>使用Matrix进行变换:

Matrix是一个功能强大的类,可以进行平移、旋转、缩放、倒影等多种变换,详情可百度,这里只做列举和一些我应用到的提示(关于旋转):

还是要定义一个Matrix

// 实现图像旋转
 
Matrix mat = new Matrix();

 Paint _mPaint = new Paint();//画笔

_mPaint.setColor(Color.WHITE);//设置画笔颜色
 mat.reset();
mat.setTranslate(675,329);//图片位置,坐标
mat.preRotate(-_decDegree,(float)arrow.getWidth()/2,((float)arrow.getHeight()*4)/5);
 canvas.drawBitmap(arrow, mat, _mPaint);

这里需要重!点!提一下的就是.preRotate()方法!!!

表示我在实际操作中被网上的一些教程坑了,,,

preRotate()中第一个参数就是你要旋转的角度,第二第三个参数可以没有,有的话用来表示旋转中心。重点就是在旋转中心这里,它使用的比不是我们下意识认为的屏幕坐标,而是相对图片本身的位置,即你要是想绕图片自身中心旋转90度就这样写:

Mat.preRotate(90,(float)arrow.getWidth()/2,(float)arrow.getHeight()/2);

↑应该表示的很清楚了吧?大家那么棒我就不赘述了,。(づ ̄ 3 ̄)づ

2、有关音频加载

   音频加载的两种方式大家都应该从网上找到了很多资料,MediaPlayer和SoundPool,两种都可以用,用法也没有教程上那么复杂,需要注意的就是SoundPool只能加载7秒以下音频,多了就容易出错了。

网络上关于使用MediaPlayer的用法大多提倡使用Service,它的明显优点就是前台后台互不干涉,你操作你的,并不能影响我的音乐播放←这样。但是有些需要语音剧情的情况下(原谅我并不知道其他好的解决办法,欢迎指正)还是需要MediaPlayer对一些操作作出反馈,这样的话就直接用就可以了。下面是我写的一个非常简单的继承MediaPlayer的类:

/**
 * Created by lenovo on 2016/5/24.
 */
public class opera {
    MediaPlayer m1;
    int Id;
    Context mcontext;
    int end=1;
    public opera(int id,Context c){
        this.Id=id;//加载的音乐文件ID
        this.mcontext=c;
    }
    public void initmedia(){
        this.m1=MediaPlayer.create(this.mcontext,this.Id);
    }
    public void playmedia(){
        if(end==1){
            this.m1.start();
            Log.i("tag", "音乐开始播放");
        }
        else
            
Log.i("tag","出错");
    }
    public void destroymedia(){
        int juge=1;
        this.m1.setOnCompletionListener(newMediaPlayer.OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                Log.d("tag", "播放完毕");
                mp.stop();
                Log.d("tag", "停止");
                mp.release();
                mp.reset();
                Log.i("tag", "销毁成功");
            }
        });

/*

上面这部分代码是用来判断音乐播放结束并销毁的,因为就我个人实际测试经验,MediaPlayer会自动循环你加载的音乐,而且每次循环会有一定的间隔,需要你在音乐播放结束的时候及时的终止。

*/
        this.end=juge;
    }
    public void destroy(){
        this.m1.release();
        this.m1=null;
        Log.i("tag", "销毁");
    }

它的调用:

opera op1=new opera(R.raw.scene1,this);

op1.initmedia();
op1.playmedia();
op1.destroymedia();

需要注意的是,最后一定要进行销毁,不然的话你的音乐会一直运行下去。

今天就先到这里吧,,,,还有好多想要总结的都没有写出来_(:з」∠)_,有关于surfaceView,有关于触摸事件,,,,,已经熄灯了,我就洗洗睡了,明天还有课,,,

由于UP个人能力所限,能为大家提供的东西也有限,如果各位大大有什么更好的处理方法,欢迎指正~←此宣言时效永久~

最后祝大家学业顺利~(づ ̄ 3 ̄)づ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值