• 全部
...

Android实现人物在地图中移动

Mars.CN 2011-11-19 05:17:44
加精
初学Android,做了个例子和初学的人们分享,高手指点

代码包已经上传到我的下载资源中 http://download.csdn.net/detail/suolong123/3815059




  1. package com.marssoft.graphicstest;


  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Canvas;
  6. import android.graphics.Color;
  7. import android.graphics.Paint;
  8. import android.graphics.Bitmap.Config;
  9. import android.graphics.drawable.BitmapDrawable;
  10. import android.view.KeyEvent;
  11. import android.view.View;

  12. public class TestView extends View {
  13. public static final short DIRECTION_UP = 19;
  14. public static final short DIRECTION_DOWN = 20;
  15. public static final short DIRECTION_LEFT = 21;
  16. public static final short DIRECTION_RIGHT = 22;

  17. private int width;
  18. private int height;
  19. private Activity act = null;
  20. private Bitmap map = null;
  21. private Bitmap z[] = new Bitmap[2];
  22. private Bitmap rm[][] = new Bitmap[4][4];
  23. private Paint mPaint = new Paint();
  24. private Bitmap mzip = null;
  25. private int rx=0 , ry=0;

  26. private int moveDirection =0; //移动方向
  27. private int dirction=DIRECTION_DOWN; //目前面向
  28. private int move_p=0; //移动动画

  29. public TestView(Context context) {
  30. super(context);

  31. act = (Activity)context;
  32. width = act.getWindowManager().getDefaultDisplay().getWidth();
  33. height = act.getWindowManager().getDefaultDisplay().getHeight();
  34. z[0] = new BitmapDrawable(this.getContext().getResources().openRawResource(R.drawable.m0)).getBitmap();
  35. z[1] = new BitmapDrawable(this.getContext().getResources().openRawResource(R.drawable.m0)).getBitmap();

  36. // HandlerThread thread = new HandlerThread("chonghua");
  37. // thread.start();
  38. // Repaint r = new Repaint(thread.getLooper());

  39. new Thread(new Repaint()).start();
  40. createImage();
  41. setFocusable(true); //设置控制焦点
  42. }

  43. @Override
  44. public boolean onKeyDown(int keyCode, KeyEvent event) {
  45. //键盘按下
  46. System.out.println("按键操作:" + keyCode);
  47. moveDirection = keyCode;
  48. dirction = keyCode;
  49. return super.onKeyDown(keyCode, event);
  50. }

  51. @Override
  52. public boolean onKeyUp(int keyCode, KeyEvent event) {
  53. moveDirection=0;
  54. move_p=0;
  55. return super.onKeyUp(keyCode, event);
  56. }


  57. /**
  58. * 创建一张地图。
  59. */
  60. public void createImage(){
  61. map = Bitmap.createBitmap(width, height, Config.ARGB_8888); //创建于屏幕大小一致的图片
  62. Canvas canvas = new Canvas(map); //获得画图对象
  63. canvas.drawColor(Color.WHITE); //设置背景色为白色
  64. int r = height/32;
  65. int c = width/32;
  66. Paint p = new Paint();
  67. for(short i=0 ; i<r ; i++){
  68. for(short f=0 ; f<c ; f++){
  69. canvas.drawBitmap(z[0], f*32, i*32, p);
  70. }
  71. }
  72. mzip = new BitmapDrawable(this.getContext().getResources().openRawResource(R.drawable.r01)).getBitmap(); //获得人物
  73. //分解人物动作
  74. System.out.println("开始切图");
  75. for(short i=0 ; i<4 ; i++){
  76. for(short f=0 ; f<4 ; f++){
  77. rm[i][f] = Bitmap.createBitmap(mzip, f*32, i*48, 32, 48);
  78. }
  79. }
  80. }

  81. @Override
  82. protected void onDraw(Canvas canvas) {
  83. // TODO Auto-generated method stub
  84. super.onDraw(canvas);
  85. if(map !=null){
  86. canvas.drawBitmap(map, 0,0, mPaint);
  87. short sd = 0;
  88. if(dirction == DIRECTION_UP){
  89. sd=3;
  90. }else if(dirction == DIRECTION_LEFT){
  91. sd=1;
  92. }else if(dirction == DIRECTION_RIGHT){
  93. sd=2;
  94. }else if(dirction == DIRECTION_DOWN){
  95. sd=0;
  96. }
  97. canvas.drawBitmap(rm[sd][move_p], rx,ry, mPaint);
  98. }
  99. System.out.println("据说调用到了onDraw函数");
  100. }

  101. /**
  102. * 移动小人。
  103. * @param direction 方向
  104. */
  105. public void move(int direction){

  106. }


  107. private class Repaint implements Runnable{

  108. public void run() {
  109. while(true){
  110. if(moveDirection == DIRECTION_UP){
  111. ry-=5;
  112. }else if(moveDirection == DIRECTION_DOWN){
  113. ry+=5;
  114. }else if(moveDirection == DIRECTION_LEFT){
  115. rx-=5;
  116. }else if(moveDirection == DIRECTION_RIGHT){
  117. rx+=5;
  118. }
  119. System.out.println(rx + "-" + ry);
  120. if(moveDirection !=0){
  121. move_p++;
  122. if(move_p == 4){
  123. move_p=0;
  124. }
  125. }
  126. //刷新
  127. postInvalidate();
  128. try {
  129. Thread.sleep(50);
  130. } catch (InterruptedException e) {
  131. e.printStackTrace();
  132. }
  133. }
  134. }
  135. }
  136. }




...全文
给本帖投票
8223 134 打赏 收藏 转发到动态 举报
写回复
用AI写文章
134 条回复
切换为时间正序
请发表友善的回复…
发表回复
androidshu 2014-08-04
  • 打赏
  • 举报
回复
恩恩,很酷,之前我也做过一个类似的
Slough1014 2014-08-04
  • 打赏
  • 举报
回复
人物怎么动不了啊
Gemerl 2014-07-03
  • 打赏
  • 举报
回复
楼主很强大...
puke3615 2014-05-19
  • 打赏
  • 举报
回复
下载下来看看吧
  • 打赏
  • 举报
回复
这东西都有人赞~~canvas都没有进行锁定 也没有进行脏矩阵的锁定 完全就是J2ME的东西。。顶下30楼
aprillinehxy 2014-03-12
  • 打赏
  • 举报
回复
支持,顶哦
zhaowin88 2014-03-07
  • 打赏
  • 举报
回复
支持!正在使用。
Adam幸福 2014-02-28
  • 打赏
  • 举报
回复
谢谢分享
TuskueNeko 2013-12-16
  • 打赏
  • 举报
回复
太贵下不起 啊
寻找IT之路 2013-10-13
  • 打赏
  • 举报
回复
回去研究一下
2在路上 2013-10-12
  • 打赏
  • 举报
回复
挺好的。。。
  • 打赏
  • 举报
回复
楼主很牛啊。。。这个东西要我做应该不会这样写吧
yushiqi_sxu 2013-07-15
  • 打赏
  • 举报
回复
赞!!!!!!
lineco 2013-03-14
  • 打赏
  • 举报
回复
楼主你不厚道啊 、这么高的分数
该死的刀 2013-01-23
  • 打赏
  • 举报
回复
怎么感觉跟做广告一样......
zsjerry 2013-01-11
  • 打赏
  • 举报
回复
谢谢分享,留用!
wujian19880117 2013-01-07
  • 打赏
  • 举报
回复
斜线的移动怎么算
Where_You 2012-12-26
  • 打赏
  • 举报
回复
实在是看不懂啊
Code_AK47 2012-12-06
  • 打赏
  • 举报
回复
3分啊!好贵啊!没分啊!
lixiaofei0218 2012-11-02
  • 打赏
  • 举报
回复
谢谢,分享!
加载更多回复(69)

80,469

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部