贪吃蛇的大概实现过程!
来源:互联网 发布:pon网络组网方式 编辑:程序博客网 时间:2024/05/16 06:49
从主到从的介绍吧!
蛇是怎么动的?
@Overridepublic void onDraw(Canvas canvas) {super.onDraw(canvas);//mXTileCount,mYTileCount屏幕的长宽(长宽可容纳苹果的个数)for (int x = 0; x < mXTileCount; x += 1) {for (int y = 0; y < mYTileCount; y += 1) {if (mTileGrid[x][y] > 0) {//mTileGrid[][]储存要绘制Bitmap的位置//mTileArray[]储存不同颜色的苹果位图canvas.drawBitmap(mTileArray[mTileGrid[x][y]], mXOffset + x * mTileSize, mYOffset + y * mTileSize, mPaint);}}}}说明:遍历mTitleGrid[ ][ ]中的所有数据,在制定的x,y上进行绘制相应的位图。但这只是绘制了一遍,如何进行重复绘制呢?
class RefreshHandler extends Handler {@Overridepublic void handleMessage(Message msg) {SnakeView.this.update();SnakeView.this.invalidate();}public void sleep(long delayMillis) {//移除what = 0 的 messagethis.removeMessages(0);//使用obtainMessage(0)重新创建一个message,延迟delayMills发送消息进行更新操作sendMessageDelayed(obtainMessage(0), delayMillis);}};
public void update() {if (mMode == RUNNING) {long now = System.currentTimeMillis();//只有当蛇移动之后的时间大于蛇的移动延迟才可以更新操作if (now - mLastMove > mMoveDelay) {clearTiles();//清空所有位置的绘图updateWalls();//更新外墙updateSnake();//更新蛇updateApples();//更新随机产生的苹果mLastMove = now;}//延时mMoveDelaymRedrawHandler.sleep(mMoveDelay);}}
说明:上面两段代码是互相重复调用的,所以可以利用Hanld机制不断调用invalidate()进行重新绘制(也就是回调了onDraw())。
源代码:不知道怎么上传,需要的留下邮箱哈!
贪吃蛇中的android知识点:
View.setVisibility(View.GONE);//设置按钮不可见,在ViewGroup中不留位置,空间
可以从savedInstanceState判断是否为空判断程序是否是第一次启动
当游戏的activity被销毁前保存当前activity的数据到 savedInstanceState
@Overridepublic void onSaveInstanceState(Bundle outState) {outState.putBundle(ICICLE_KEY, mSnakeView.saveState());}public Bundle saveState() {Bundle map = new Bundle();map.putIntArray("mAppleList", coordArrayListToArray(mAppleList));map.putInt("mDirection", Integer.valueOf(mDirection));map.putInt("mNextDirection", Integer.valueOf(mNextDirection));map.putLong("mMoveDelay", Long.valueOf(mMoveDelay));map.putLong("mScore", Long.valueOf(mScore));map.putIntArray("mSnakeTrail", coordArrayListToArray(mSnakeTrail));return map;}根据drawable绘制bitmap,并且存进mTileArray[]中
public void loadTile(int key, Drawable tile) {Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize,Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);tile.setBounds(0, 0, mTileSize, mTileSize);//像画布中汇入图片tile.draw(canvas); mTileArray[key] = bitmap;}
自定义组件的自定义属性
//自定义属性数组TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.TileView);//获取对应的属性值,使用R.styleble.TileView加下划线的方式访问数组里面的属性mTileSize = a.getInt(R.styleable.TileView_tileSize, 12);
声明自定义属性
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="TileView"> <attr name="tileSize" format="integer" /> </declare-styleable></resources>将我们自定义的组件加入布局main.xml 文件中,平且使用自定义属性,自定义属性必须加上:
xmlns test="http://schemas.android.com/apk/res/com.android.tutor "蓝色 是自定义属性的前缀,红色 是我们包名.
- 贪吃蛇的大概实现过程!
- c++实现的贪吃蛇
- c++实现的贪吃蛇
- 贪吃蛇的javascript实现
- 贪吃蛇的简单实现
- WpF 贪吃蛇的实现
- 贪吃蛇的Java实现
- 贪吃蛇的Java实现
- 贪吃蛇的多种实现
- js实现的贪吃蛇的小游戏
- C++实现的贪吃蛇游戏
- 贪吃蛇游戏的MIDP实现
- C + SDL 贪吃蛇的基础实现
- 完全用链表实现的贪吃蛇
- 高效率的贪吃蛇-Java实现
- 完全用链表实现的贪吃蛇
- 控制台 简单 双链表贪吃蛇的实现
- 贪吃蛇 AI 的实现 snake AI
- Android--App缓存管理
- starting of process of android
- WCF开发框架形成之旅---WCF的几种寄宿方式 (转帖)
- 如何设置通过PMU的gpio来唤醒系统
- 网络子系统13_邻居子系统状态机
- 贪吃蛇的大概实现过程!
- 高并发高可用的通信框架实践
- SQL所有存储过程查看
- centos使用phpmailer发送邮件失败的解决办法
- 工具推荐:texturePacker & physicseditor
- AndroidManifest.xml文件综合详解
- 大家好!
- new 数组时大小是变量
- 基于蓝牙4.0(Bluetooth Low Power)探鱼器BLE-Sonar介绍