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发送更新界面的机制,同时怎么保存还原程序状态
分享到:
相关推荐
【python】贪吃蛇snake纯文本代码。主要解析最基本的贪吃蛇小游戏,简单了解一下其结构要素和代码。
主要介绍了JAVA基于SnakeYAML实现解析与序列化YAML,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
:snake: snake 一款适合于快速开发业务的 Go 框架,可快速构建 API 服务 或 Web 网站。 Pro Tip: 每个目录下基本都有 README,可以让框架使用起来更轻松 ^_^ 设计思想和原则 框架中用到的设计思想和原则,尽量满足 ...
使用Python解析DICOM文件(仅支持某种DICOM)并将数据传递给JS,然后在Canvas上绘制它。 已在macOS Big Sur(intel / M1),Chrome 89上进行测试。 为什么要做这个 除了在浏览器中使用Python是一件有趣的事情之外...
贪吃蛇,c++,VS2017环境写的。本人自己也才大一,如有疏漏不便或BUG,欢迎指出。可以穿墙,可以变长,可选择固定难度,自己测试时无太多BUG,除了...建议根据注释,删掉我的某一些代码,来更好地理解,方便写出报告
github项目地址:https://github.com/LEERTRT/Snake 在[removed][removed]中,文档加载完毕后调用: $(function () { var game = new Game("canvas"); game.init(); }); 其中构造函数Game()接收canvas的id作为...
iparse是一个Python软件包,用于以最少的代码轻松地将HTML解析为结构化数据。 它旨在使解析HTML的过程变得快速而简单! iparse的亮点: 主要使用YAML进行编码 仅使用最少的python代码优化原始HTML信息 很多HTML...
解析器。 快速地。 类似 SAX 的接口。 符合 CommonMark 规范。 - TIC-80 是一款用于制作、玩和分享小游戏的梦幻电脑。 - 轻松构建您的硬件! —— :alien_monster: :snake: 一款受 Snake 启发的开源游戏,使用 SDL ...
HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...
:snake: Code OJ note in python3 - - We care about coding style here ! 白板编程面试模板代码,保证Coding Style前提下,最短最高效 前言 题目来源包括: LeetCode、LintCode、Cracking the coding interview、...
表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序;使用正则表达式操作字符串;使用正则表达式验证电话号码的格式; 6java异常处理 throw和throws、try和catch;自定义异常类...
它启动rholang_parser来解析rholang代码,然后处理reduce和storage文件命名转换本项目应用了两种命名转换。使用snake_case 的文件名(例如common.rs /rho_par.rs )意味着它是一个单独的模块,这是Rust 模块系统中的...
同步简化了您解析JSON响应并将其与Core Data同步的日常工作。 Sync是一个轻量级的Swift库,它使用基于约定的约定范例来简化您的工作流程。 将JSON与Core Data同步是一项重复性任务,通常需要添加很多样板代码。 映射...
专案经理一名conda诗歌项目经理-用Python替换.sh / .bat脚本... 为了使该模块中的某些方法有效,您需要具备以下条件: 必需的conda诗歌可选的gy 用于创建.gitignore文件弦盒用于将文本转换为snake_case 托姆作为解析.t
另一个目标是为用户提供不可定制的“encoding/json”,如产生snake_case名称或启用默认“omitempty“生成代码。用法:go get github.com/mailru/easyjson/... easyjson -all <file>.go这将利用编组/解组方法...