当前位置:   article > 正文

安卓游戏开发一(超级玛丽)_安卓开发 原生 可以开发什么要的游戏

安卓开发 原生 可以开发什么要的游戏

超级玛丽(1)

前言:想做安卓游戏开发,首先你需要先掌握一些安卓的基础知识,然后学会使用surfaceview绘制一些简单的bitmap,学会了这些,你就具备了游戏开发的最基本条件。本文主要适合一些对surfaceview有一定了解的朋友,整个游戏都是使用android的原生代码编写,未使用第三方的任何东西,属于作者我原创,希望读者朋友尊重原创

先上视频链接:游戏效果视频

github地址(三个完整项目):https://github.com/nihuoLT/myGameRepository.git

里面还有其它俩个游戏,博主将他们开源,只是为了在成都找个工作,有公司的大佬看到,觉得博主适合您公司的职位或则对Android2d游戏开发有兴趣的朋友

都可以联系博主,至于游戏效果是不是我说的这么好,大家,下载看看就知道了

废话不多说,今天我们先把马里奥的移动做出来。首先定义一个接口类GameInterFace.java:

  1. package com.example.newgame_1;
  2. import android.graphics.Bitmap;
  3. public interface GameInterFace {
  4. int getX();
  5. int getY();
  6. int getWidth();
  7. int getHeight();
  8. Bitmap getBitmap();
  9. }
然后定义我们的马里奥类Maliao.java让它实现接口,然后写它的构造方法:

  1. public JumpTest(int x,int y,GameView gameView){
  2. this.gameView=gameView;//拿到主Surfaceview
  3. this.source=BitmapFactory.decodeStream(gameView.getResources()
  4. .openRawResource(R.drawable.allmali));//获取马里奥的图片
  5. this.dead=BitmapFactory.decodeStream(gameView.getResources()
  6. .openRawResource(R.drawable.mario13));//获取马里奥死亡图片
  7. this.x=x;
  8. this.width=source.getWidth()/6;
  9. this.height=source.getHeight();
  10. this.cache=Bitmap.createBitmap(width, height, Config.ARGB_8888);//创建缓存图片
  11. this.y=y-height;
  12. this.speed=20;
  13. sprites.add(Bitmap.createBitmap(source,0,0,width-2,height));//切割图片
  14. sprites.add(Bitmap.createBitmap(source,width,0,width,height));
  15. sprites.add(Bitmap.createBitmap(source,width*2,0,width,height));
  16. sprites.add(Bitmap.createBitmap(source,width*3+1,0,width-1,height));
  17. sprites.add(Bitmap.createBitmap(source,width*4,0,width,height));
  18. sprites.add(Bitmap.createBitmap(source,width*5,0,width,height));
  19. }

然后在getBitmap方法里这样写:

  1. public Bitmap getBitmap(){
  2. if(IsMove){//是否移动标志
  3. bitmap=sprites.get(index);//这里实现帧动画
  4. if(count==5){//每5秒切换一帧
  5. index++;
  6. if(index==size){
  7. index=first;
  8. }
  9. count=0;
  10. }
  11. count++;
  12. if(XdirectionFlag){//移动方向标志
  13. if(x<=gameView.ScreenWidth-width)
  14. x+=5;
  15. }else{
  16. if(x>0)
  17. x-=5;
  18. }
  19. }else{
  20. if(XdirectionFlag){//没有移动时切换为相应方向的帧
  21. bitmap=sprites.get(0);
  22. }else{
  23. bitmap=sprites.get(3);
  24. }
  25. }
  26. return bitmap;
  27. }

在Activity中左右按钮控制方向:

  1. public boolean onTouch(View v, MotionEvent event) {
  2.       switch (event.getAction()) {
  3.         case MotionEvent.ACTION_DOWN:
  4. switch (v.getId()) {
  5.   case R.id.left:
  6. gameView.jumpTest.IsMove=true;
  7. gameView.jumpTest.XdirectionFlag=false;
  8. gameView.jumpTest.first=2;
  9.             gameView.jumpTest.index=gameView.jumpTest.first;
  10.             gameView.jumpTest.size=4;
  11.             left.setBackgroundResource(R.drawable.zuo_r);
  12.   break;
  13.              case R.id.right:
  14.             gameView.jumpTest.IsMove=true;
  15.             gameView.jumpTest.XdirectionFlag=true;
  16.             gameView.jumpTest.first=0;
  17.             gameView.jumpTest.index=gameView.jumpTest.first;
  18.             gameView.jumpTest.size=2;
  19.             right.setBackgroundResource(R.drawable.you_r);
  20.   break;
  21.     
  22. }
  23.     break;
  24.  case MotionEvent.ACTION_UP:
  25.           switch (v.getId()) {
  26.   case R.id.left:
  27.     eft.setBackgroundResource(R.drawable.zuo_b);
  28. gameView.jumpTest.IsMove=false;
  29.   break;
  30.              case R.id.right:
  31.             right.setBackgroundResource(R.drawable.you_b);
  32.             gameView.jumpTest.IsMove=false;
  33.   break:
  34.           }
  35. break;
  36.     }
  37. return true;
  38. }


最后在surfaceview里绘制出来:

  1. for(GameInterFace gameInterFace:(List<GameInterFace>)mys.clone()){
  2.    c.drawBitmap(gameInterFace.getBitmap(), gameInterFace.getX(),gameInterFace.getY(), paint);
  3. }

今天就先讲到这里下面是效果图:






声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号