初学Android之飞机大战(一)——游戏菜单
来源:互联网 发布:淘宝开店攻略创业篇 编辑:程序博客网 时间:2024/05/20 09:48
飞机大战所需图片
首先创建一个GameSurfaceView类,然后继承SurfaceView类和SurfaceHolder.Callback接口并实现它们的方法,同时我们声明三个对象paint,canvas和surfaceHolder。
public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback { private Paint paint;//画笔 private Canvas canvas;//画布 private SurfaceHolder surfaceHolder; public static int screenWidth; public static int screenHight; public GameSurfaceView(Context context) { } @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { }
创建完毕后我们就开始写入方法了,首先写GameSurfaceView这个方法
public GameSurfaceView(Context context) { super(context); //初始化surfaceHolder surfaceHolder = this.getHolder(); //添加回调函数 surfaceHolder.addCallback(this); paint = new Paint();//创建画笔 paint.setAntiAlias(true);//取消锯齿 }
然后创建一个子线程
@Override public void surfaceCreated(SurfaceHolder holder) { new Thread(new Runnable() { @Override public void run() { myDraw(); } }).start(); } private void myDraw() { //canvas进行锁定 canvas = surfaceHolder.lockCanvas(); // menu.drawMenu(canvas,paint); boss.drawBoss(canvas,paint); if(canvas!=null){ //解锁画布,呈现到视图接口 surfaceHolder.unlockCanvasAndPost(canvas); } }
大体构造完毕后,我们就新建一个游戏菜单类
public class GameMenu { private Bitmap bmpMenuBG;//游戏背景 private Bitmap bmpLogo;//游戏LOGO private Bitmap bmpButton;//开始按钮 private Bitmap bmpText;//开始文字 public GameMenu(Bitmap bmpMenuBG,Bitmap bmpLogo,Bitmap bmpButton,Bitmap bmpText){ this.bmpMenuBG = bmpMenuBG; this.bmpLogo = bmpLogo; this.bmpButton = bmpButton; this.bmpText = bmpText;}
在GameMenu类中新建一个drawMenu方法,将图片画到画布上
public class GameMenu { private Bitmap bmpMenuBG; private Bitmap bmpLogo; private Bitmap bmpButton; private Bitmap bmpText; private Rect rect1,rect2; public GameMenu(Bitmap bmpMenuBG,Bitmap bmpLogo,Bitmap bmpButton,Bitmap bmpText){ this.bmpMenuBG = bmpMenuBG; this.bmpLogo = bmpLogo; this.bmpButton = bmpButton; this.bmpText = bmpText; rect1 = new Rect(0,GameSurfaceView.screenHight/3,GameSurfaceView.screenWidth, GameSurfaceView.screenHight/3+GameSurfaceView.screenHight/5); rect2 = new Rect(0,0,GameSurfaceView.screenWidth,GameSurfaceView.screenHight); } public void drawMenu(Canvas canvas, Paint paint){ canvas.drawBitmap(bmpMenuBG,null,rect2,paint); canvas.drawBitmap(bmpLogo,null,rect1,paint); int x1 = GameSurfaceView.screenWidth/2-bmpButton.getWidth()/2; int y1 = GameSurfaceView.screenHight/3*2; canvas.drawBitmap(bmpButton,x1,y1,paint); int x2 = GameSurfaceView.screenWidth/2-bmpText.getWidth()/2; int y2 = GameSurfaceView.screenHight/3*2; canvas.drawBitmap(bmpText,x2,y2+10,paint); }}
然后调用GameMenu类
在surfaceCreated方法中建立一个内部类initBitmap
public void surfaceCreated(SurfaceHolder holder) { screenWidth = this.getWidth();//获取手机屏幕宽度 screenHight = this.getHeight();//获取手机屏幕高度 initBitmap(); new Thread(new Runnable() { @Override public void run() { while (true) { myDraw(); } } }).start(); }
实现initBitmap方法
private void initBitmap() { //把图片转化成Bitmap格式 bmpMenuBG = BitmapFactory.decodeResource( this.getResources(),R.drawable.mainmenu); bmpLogo = BitmapFactory.decodeResource(this.getResources(),R.drawable.logo); bmpButton = BitmapFactory.decodeResource(this.getResources(),R.drawable.menustart); bmpText = BitmapFactory.decodeResource(this.getResources(),R.drawable.starttext); menu = new GameMenu(bmpMenuBG,bmpLogo,bmpButton,bmpText); }
以上代码敲写完毕后建立一个MainActivity类执行以上的代码
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// setContentView(R.layout.activity_main); setContentView(new GameSurfaceView(this)); }}
执行完毕可以看到
阅读全文
1 0
- 初学Android之飞机大战(一)——游戏菜单
- 初学Android之飞机大战(二)——地图
- 初学Android之飞机大战(三)——myPlane
- 初学Android之飞机大战(四)——Boss
- 初学Android之飞机大战——飞机大战所需素材
- 边做游戏边学android—2(飞机大战①创建飞机)
- 边做游戏边学android—3(飞机大战②飞机移动)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(1)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(2)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(3)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(4)
- 小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(5)
- Qt游戏编程——飞机大战
- Android游戏之仿 微信飞机大战
- android游戏开发——微信打飞机(一)
- Android 项目之飞机大战
- cocos2dx一仿微信飞机大战游戏实战一
- 边做游戏边学android—4(飞机大战③添加敌机和碰撞检测)
- linux下dnw下载驱动后无法操作的问题日常记录
- 飞机大战的第一个页面
- numpy 数据类型与 Python 原生数据类型
- 剑指offer(java实现)(1-->11)
- 适配器模式
- 初学Android之飞机大战(一)——游戏菜单
- BZOJ 4031([HEOI2015]小Z的房间-矩阵树定理+辗转相除)
- 深入理解Spring Redis的使用 (七)、Spring Redis 使用 jackson序列化 以及 BaseDao代码
- Smack4.20实现接收离线消息与花名册操作(3)
- BZOJ 4596([Shoi2016]黑暗前的幻想乡-矩阵树定理+容斥)
- UML类图详解
- 字符串
- 【C#
- 尝试docker (二)