Android培训三十二课第五讲
来源:互联网 发布:dnf for mac 编辑:程序博客网 时间:2024/04/30 05:06
文章摘自于linux培训机构-亚嵌教育。
Android培训三十二课第五讲-摄像头
工作原理
更新摄像头的位置可以决定屏幕显示的内容,尤其是RPG类游戏摄像头.例如我们在玩RPG游戏的时候进入一个新的场景 触发一段脚本后 发现镜头开始向上移动 根据镜头移动玩家可以大概浏览一下这个场景有什么东西 ,触发什么样的剧情。这个实现的方式就是游戏摄像头原理。
如图所示:首先摄像头显示的区域也是手机屏幕显示的区域 如果需要更改摄像头的位置 其实是更改背景地图的位置 利用程序拖动背景地图 给玩家一种假象让玩家感觉像是摄像头在移动而不是背景地图在移动。
地图的绘制原理
根据地图编辑器生成的出来的数组的每一个tile 的 ID 找到每一个tile的地图资源原始文件的XY坐标 算出来图片的显示位置利用程序的切割的方法把每一个tile切割出来显示在手机屏幕中。
切割图片的代码:
1 /**
2 * 绘制图片中的一部分图片
3 *
4 * @param canvas
5 * @param paint
6 * @param bitmap
7 * @param x
8 * @param y
9 * @param src_x
10 * @param src_y
11 * @param src_width
12 * @param src_Height
13 */
14 private void DrawClipImage(Canvas canvas, Paint paint, Bitmap bitmap,
15 int x, int y, int src_x, int src_y, int src_xp, int src_yp) {
16 canvas.save();
17 canvas.clipRect(x, y, x + src_xp, y + src_yp);
18 canvas.drawBitmap(bitmap, x - src_x, y - src_y, paint);
19 canvas.restore();
20 }
canvas.save();
切割图片之前先把Canvas保存起来 然后在切割 绘制结束后
canvas.restore();
目前以每10000毫秒更新一下摄像头的位置 (随机数) 有了摄像头的位置以后 就可以在算出背景图片的相对显示位置 移动背景图片的位置后就可以给玩家制造出一种摄像头在移动的假象了。
地图块 长宽的tile块数是20X20。
1 package cn.m15.xys;
2
3 import java.io.InputStream;
4 import java.util.Random;
5
6
7 import android.app.Activity;
8 import android.content.Context;
9 import android.content.res.Resources;
10 import android.graphics.Bitmap;
11 import android.graphics.BitmapFactory;
12 import android.graphics.Canvas;
13 import android.graphics.Color;
14 import android.graphics.Paint;
15 import android.os.Bundle;
16 import android.view.Display;
17 import android.view.View;
18 import android.view.Window;
19 import android.view.WindowManager;
20
21 public class CameraAcitvity extends Activity {
22
23 MapView mMapView = null;
24 @Override
25 public void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 // 全屏显示窗口
28 requestWindowFeature(Window.FEATURE_NO_TITLE);
29 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
30 WindowManager.LayoutParams.FLAG_FULLSCREEN);
31 // 获取屏幕宽高
32 Display display = getWindowManager().getDefaultDisplay();
33 // 显示自定义的游戏View
34 mMapView = new MapView(this,display.getWidth(), display.getHeight());
35 setContentView(mMapView);
36 }
37
38 public class MapView extends View {
39
40 // tile块的宽高
41 public final static int TILE_WIDTH = 32;
42 public final static int TILE_HEIGHT = 32;
43
44 // tile块的宽高的数量
45 public final static int TILE_WIDTH_COUNT = 20;
46 public final static int TILE_HEIGHT_COUNT = 20;
47
48 // 地图的宽高的
49 public final static int MAP_WIDTH = 640;
50 public final static int MAP_HEIGHT = 640;
51
52 //镜头移动范围
53 public final static int CAMERA_MOVE = 10;
54
55 // 屏幕的宽高
56 public int mScreenWidth = 0;
57 public int mScreenHeight = 0;
58
59 // 数组元素为0则什么都不画
60 public final static int TILE_NULL = 0;
61 // 第一层游戏View地图数组
62 public int[][] mMapView = {
63 { 1, 1, 1, 1, 1, 1, 1, 1, 1, 137, 137, 137, 137, 137, 1, 1, 1,
64 1, 1, 1 },
65 { 1, 1, 1, 1, 1, 1, 1, 137, 137, 137, 137, 137, 137, 1, 1, 1,
66 1, 1, 1, 1 },
67 { 1, 1, 1, 1, 1, 1, 1, 1, 137, 137, 137, 137, 137, 1, 1, 1, 1,
未完待续——》http://www.akaedu.org/page/newsdetail-2013.html
- Android培训三十二课第五讲
- Android培训三十二课第六讲
- Android培训三十二课第七讲
- Android培训三十二课第十讲
- Android培训三十二课第十一讲
- Android培训三十二讲第十一讲
- Android培训三十二课程第九讲
- Android培训三十二课之网页框
- Android第五讲--Menu
- csdn二次培训 第五课
- Android第五讲——Fragment(碎片)
- 第五讲
- 第五讲
- 第五讲
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-1
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-2
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-3
- 黑马程序员Java培训、Android培训_第8讲GUI/图形用户界面-4
- 设计模式之行为模式
- 用MFC实现WebGUI--(CDHtmlDialog)
- 万恶的null
- fcntl函数总结
- GAE 云服务RPC机制
- Android培训三十二课第五讲
- GridView
- How to Automate Startup/Shutdown of Oracle Database on Linux [ID 222813.1]
- VC++的两种串口通讯方法
- 基于MongoDB的php应用开发环境配置
- 在VS2005中利用map文件查找内存错误
- 收拾好心情,继续前行
- MS-DOS中的批处理
- 未曾发现的世界——南极隐藏千年的世界曝光!!【组图】