http://www.cnblogs.com/youxilua/archive/2011/10/04/2199093.html

十月二日日~十月四日,三天(对前两天没兴趣的,可以直接下拉到第三天)

第一天:小游戏的简单准备

竟然是小游戏…当然越简单越好了…

游戏策划---

游戏玩法:

玩家只需要把屏幕里面见到的人物全部消灭!

游戏需要的技术:

1,surfaceview 的用法.

2,游戏的线程循环.

3,坐标的居中.

素材:

人物:

http://www.famitsu.com/freegame/tool/chibi/index2.html

这个网站可以帮我们生成我们需要的十二宫格人物

第二天:技术代码的实现

1,surfaceView

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 public class GameViewSurface extends SurfaceView { //1,声明我们的Bitmap对象 private Bitmap bitmap; //2,声明一个holder对象 private SurfaceHolder holder; //3,声明用于线程循环的对象 private GameThread gameThread; //4,声明我们的精灵,下一章节用的 private List<Sprite> sprites = new ArrayList<Sprite>(); //5,初始我们的变量 public GameViewSurface(Context context) { super (context); gameThread = new GameThread( this ); holder = getHolder(); //用于调用运行的线程 holder.addCallback( new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { //1退出时终止我们的run方法 boolean retry = true ; gameThread.setRunning( false ); //2等待线程的终止 while (retry) { try { gameThread.join(); retry = false ; } catch (InterruptedException e) { Log.d( "sur" , "gua le " ); } } } //添加我们的绘图线程 @Override public void surfaceCreated(SurfaceHolder holder) { //1,创建精灵 createSprites(); //2,开始我们的线程 gameThread.setRunning( true ); gameThread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); } //创建精灵方法 private void createSprites() { sprites.add(createSprite(R.drawable.bad1)); } private Sprite createSprite( int resouce) { bitmap = BitmapFactory.decodeResource(getResources(), resouce); return new Sprite( this , bitmap); } //绘图方法 protected void onDraw(Canvas canvas) { //把背景画成黑色 canvas.drawColor(Color.BLACK); //画出所有精灵 for (Sprite sprite : sprites) { sprite.onDraw(canvas); } } //点了精灵消失的方法 //1,控制最后点击的时间 long lastClick; @Override public boolean onTouchEvent(MotionEvent event) { // 当时间间隔太少不执行以下方法 if (System.currentTimeMillis() - lastClick > 500 ){ lastClick = System.currentTimeMillis(); synchronized (getHolder()) { float tX = event.getX(); float tY = event.getY(); for ( int i = sprites.size() - 1 ; i >= 0 ;i--){ Sprite sprite = sprites.get(i); if (sprite.isCollison(tX,tY)){ //精灵消失 sprites.remove(i); break ; } } } } return true ; } }

2,接着就要写我们的game循环的线程

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 public class GameThread extends Thread { private GameView view; private boolean running = false ; public GameLoopThread(GameView view) { this .view = view; } public void setRunning( boolean run) { running = run; } @Override public void run() { while (running) { Canvas c = null ; try { c = view.getHolder().lockCanvas(); synchronized (view.getHolder()) {

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android里监视数据库的变化[转]
  3. EventBus 3.0 简单使用
  4. Android多线程断点续传详解与案例
  5. Android(安卓)中文 API(123) ―― AbsListView(二)
  6. Android(安卓)旋转屏幕时禁止Activity重建
  7. Notification详解
  8. Android(安卓)Context完全解析
  9. android 数据存储之SQLite

随机推荐

  1. Android中的13种Drawable小结
  2. Android跨进程通信之小例子(一)
  3. android 笔记 --- 自定义Android主题风格
  4. Android初学心得和一些资料下载
  5. android之单元测试——上
  6. android UI进阶之仿iphone的tab效果 (Andr
  7. Android(安卓)image的示例 拍照显示
  8. Unity3D调用android方法(非插件方式)
  9. Android札记【2】——系统的认识心中的An
  10. 自己动手写一个简单的Android下拉刷新