Android游戏开发---2D游戏中背景的绘制
来源:互联网 发布:淘宝网页无法登陆 编辑:程序博客网 时间:2024/05/01 23:18
游戏制作初始,绘制背景是其中很靠前的步骤。
类似于雷电的游戏,手机游戏屏幕大小固定,不可能采取移动飞机本身来得到移动的效果。一般都采用移动背景的办法来产生飞机动的效果。
关于移动背景,有两种做法:
1. 一副大长图慢慢移动(一整个关卡就一张图)。
2. 一张上下部分能衔接着的图循环移动。
注意:后绘制的图片会覆盖先绘制的图片。
第一种移动背景的方法简单,没有太多可讨论的。下面给出第二种的移动背景的实现方案。
思路:一张图绘制两遍。初始时其中一张填满屏幕,另一张在屏幕上方。然后两张图以相同速度移动,循环。
详细说明请看注释:
详细代码(看注释):import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Rect;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView; public class GameView extends SurfaceView implements SurfaceHolder.Callback, Runnable{ private SurfaceHolder holder; private Canvas canvas; private Bitmap background; private Bitmap player; private boolean isRunning = true; private int dy, dy2 = -480; //用于背景移动 private Rect srcRect; //用于放大图片, 和存储图片的位置 private Rect destRect; private Rect destRect2; private float playerX, playerY;//飞机的初始位置 public GameView(Context context) { super(context); this.setFocusable(true); holder = this.getHolder();//这个this指的是这个Surface holder.addCallback(this); //这个this表示实现了Callback接口 srcRect = new Rect(0, 0, 242, 480);//原始图片大小 destRect = new Rect(0, dy, 320, 480);//目标屏幕大小. 并带有移动变量dy. 对应图片1 destRect2 = new Rect(0, dy2, 320, 0);//屏幕上方的图片,对应图片2 background = BitmapFactory.decodeResource(getResources(), R.drawable.background); player = BitmapFactory .decodeResource(getResources(), R.drawable.player); } @Override public void run() { while (isRunning) { drawView(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } private void drawView() { try { if (holder != null) { canvas = holder.lockCanvas(); canvas.drawColor(Color.BLACK); //画背景, 并使其移动 dy += 3; dy2 += 3; destRect.set(0, dy, 320, 480 + dy); destRect2.set(0, dy2, 320, 480 + dy2); canvas.drawBitmap(background, srcRect, destRect, null); canvas.drawBitmap(background, srcRect, destRect2, null); //判断是否到达屏幕底端, 到达了则使其回到屏幕上端 if (dy >= 480) dy = -480; if (dy2 >= 480) dy2 = -480; //画飞机 canvas.drawBitmap(player, playerX, playerY, null); } } catch (Exception e) { e.printStackTrace(); } finally { if (canvas != null) holder.unlockCanvasAndPost(canvas); } } @Override public void surfaceCreated(SurfaceHolder holder) { new Thread(this).start(); isRunning = true; //初始值必须放到这里才行, 因为SurfaceView创建成功后才能获取高宽 playerX = (this.getWidth() - player.getWidth()) / 2; playerY = this.getHeight() - player.getHeight(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { isRunning = false; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) isRunning = false; return super.onKeyDown(keyCode, event); } @Override public boolean onTouchEvent(MotionEvent event) { playerX = event.getX() - player.getWidth() / 2; //使点击的位置在飞机中央 playerY = event.getY() - player.getHeight() / 2; return super.onTouchEvent(event); } }
运行效果:
转载请注明出处:http://blog.csdn.net/xn4545945
- Android游戏开发---2D游戏中背景的绘制
- Android游戏开发---2D游戏中背景的绘制
- android 2D游戏开发
- 游戏开发及游戏(2D/3D)小Demo(进行中)- Android
- 绘制2D游戏场景
- canvas绘制2048游戏的背景
- android 2D 游戏的开发的方法
- Android 3D 游戏学习笔记(2)-绘制方法
- Android游戏开发cocos-2d中精灵的动作测试
- android游戏开发之我的小小游戏2——连连看游戏6连线绘制问题
- 【unity3d学习笔记】Shader-通过Shader实现2D游戏中无限滚动的背景Shader
- Unity3D~2D游戏背景的循环滚动
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
- 基于TILED的2D游戏绘制方法详解
- android游戏开发中图形绘制:Canvas和Paint的使用
- XNA游戏开发之2D游戏
- J2ME手机游戏开发--背景绘制
- Android游戏开发---关于实体的绘制与跟踪技术
- Generic Class和MFC Class和Form Class有何区别?
- org.json与json-lib的区别
- 【2013-10-3前】文献检索、分析、管理和协作分享——简报
- FreeMarker基本语法
- Godaddy iis7 win主机 dz7.X伪静态设置
- Android游戏开发---2D游戏中背景的绘制
- VS2010 操作Word(一)建立工程
- URLEncoder.encode时空格变成加号(+)
- phonegap 上传任意格式文件的js代码
- 算法学习笔记----快速排序
- hibernate产生自动增长的主键
- MFC 定时器使用方式
- vim 配置
- 提高自己的编程能力