`
jiav_net
  • 浏览: 103598 次
文章分类
社区版块
存档分类
最新评论

snake代码解析

 
阅读更多

snake代码解析

1.先运行SnakeView(Context context, AttributeSet attrs)->initSnakeView()
在initSnakeView()中resetTiles(4)设置图片的种类Bitmap[4],loadTile(int key, Drawable tile) 为Bitmap[4]-》mTileArray[key] 赋值,其中RED_STAR、YELLOW_STAR、GREEN_STAR三个key分别对应着各种图片


2.当第一次进入程序时savedInstanceState == null,通过判断运行设置Mode->setMode(SnakeView.READY),通过textview来显示提示语-Press Up to  play ,同时运行onSizeChanged来初始化mXTileCount/mYTileCount/mXOffset/mYOffset,还有mTileGrid(一个二维数组,存储每一个空格的位置),接着运行onDraw();


3.当按press up键,运行onkeyDown(),initNewGame()给mSnakeTrail以及mAppleList赋值(Coordinate表示保存坐标),接着SetMode为RUNNING状态,update()更新界面(updateWalls,updateSnake,updateApples),此时通过mRedrawHandler(继承自Handle),来一个sleep(),睡眠过后通过sendMessageDelayed(obtainMessage(0), delayMillis)把消息发出去(this.removeMessages(0)在之前方法配套使用,移除队列中的全部消息),Handle通过handleMessage接受消息,又一次去更新界面update(),同时invalidate()下,通知Ondraw()刷新界面


4.当突然pause程序,则立即运行onSaveInstanceState(Bundle outState),将状态值通过outState.putBundle(ICICLE_KEY, mSnakeView.saveState())放到outState中,其中mSnakeView.saveState()这个方法是为了保存状态值,将值保存到Bundle中,如果程序又回到运行界面,则通过判断savedInstanceState是否为null,如果不为null,则savedInstanceState.getBundle(ICICLE_KEY)取出Bundle值,同时通过mSnakeView.restoreState(map)还原原先保存的状态值。

以上就是snake代码的整体运行流程,从中可以学到handle发送更新界面的机制,同时怎么保存还原程序状态


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics