贪吃蛇(android版)
程序员文章站
2022-07-15 11:29:09
...
最近在公司没什么事,买了本书,学了下android。开始的时候觉得应该会比较简单,毕竟以前也看过一段时间swing,但是学一下才发现与swing基本上没关系,包括思路都不太一样。android自已发明了一系列的概念,路铺得比较宽,内容显得比较多,但只要把基本概念及整体流程弄清楚了,开发起来还是要比swing容易,swing界面复杂一点的话代码会相当的多,而且乱。android稍微好一点,可以用xml之类、资源文件等分担了一定的压力,不过组织不好的话,代码还是会比较乱。
android sdk里面自带了很多例子,是学习android应用的最佳资料,其它的不明白,首先看见了一个叫snake的文件夹,这个本人还是知道的,对于花了些时间看了下里面的代码。代码的设计还是相当不错的,组织得也不错,里面也包括了不少的android技术,至少有几个方面值得学习:
1.自定义属性attr.xml。这个例子的自定义属性有一点问题,不知道是不是版本的原来,本人使用2.3.3时值取不到,于是参考网上资料,稍微修改了下就行了。
2.自定义面板(VIEW)。我觉得这个功能很好,毕竟只通过xml布局不能达到完全灵活应用的程度,而手动创建又不能结合xml布局那么清晰。如果在其它类修改这个面板的属性又显得比较乱,所以最好是自己定义一个,把所有修改这个面板的逻辑全部放在自定义面板类中。
3.handler消息机制。这个概念有点新,主要作用是处理延时问题,即另开一线程完成耗时的操作。这个东西解释起来有点复杂。一种情况是线程操作完成后发送一空消息去执行后续更新操作。二是通过post去激活另一线程,即双缓冲。
4.图形的加载及处理。android关系图像的处理有多种方式,ImageView的scaleType,BitmapFactory,Bitmap的一系列create方法,甚至还有Canvas的一些操作。这些部分在本例中也有所涉及。
除了上面这些外,游戏代码也组织得相当的好,因此这是一个很值得学习的示例,下面将这个示例的工程代码上传上来,其中主要部分本人都加了注释,读起来会更加容易,也便以后回顾。
android sdk里面自带了很多例子,是学习android应用的最佳资料,其它的不明白,首先看见了一个叫snake的文件夹,这个本人还是知道的,对于花了些时间看了下里面的代码。代码的设计还是相当不错的,组织得也不错,里面也包括了不少的android技术,至少有几个方面值得学习:
1.自定义属性attr.xml。这个例子的自定义属性有一点问题,不知道是不是版本的原来,本人使用2.3.3时值取不到,于是参考网上资料,稍微修改了下就行了。
<resources> <declare-styleable name="TileView"> <attr name="tileSize" format="integer" /> </declare-styleable> </resources>
2.自定义面板(VIEW)。我觉得这个功能很好,毕竟只通过xml布局不能达到完全灵活应用的程度,而手动创建又不能结合xml布局那么清晰。如果在其它类修改这个面板的属性又显得比较乱,所以最好是自己定义一个,把所有修改这个面板的逻辑全部放在自定义面板类中。
<com.example.android.snake.SnakeView android:id="@+id/snake" android:layout_width="match_parent" android:layout_height="match_parent" snake:tileSize="14" />
3.handler消息机制。这个概念有点新,主要作用是处理延时问题,即另开一线程完成耗时的操作。这个东西解释起来有点复杂。一种情况是线程操作完成后发送一空消息去执行后续更新操作。二是通过post去激活另一线程,即双缓冲。
private RefreshHandler mRedrawHandler = new RefreshHandler(); class RefreshHandler extends Handler { /** * 收到下面的sleep发送回来的消息时执行 */ @Override public void handleMessage(Message msg) { SnakeView.this.update(); //调用onDraw方法重绘 SnakeView.this.invalidate(); } public void sleep(long delayMillis) { this.removeMessages(0); //发送空消息激活handleMessage sendMessageDelayed(obtainMessage(0), delayMillis); } };
4.图形的加载及处理。android关系图像的处理有多种方式,ImageView的scaleType,BitmapFactory,Bitmap的一系列create方法,甚至还有Canvas的一些操作。这些部分在本例中也有所涉及。
public void loadTile(int key, Drawable tile) { Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888); //用Canvas将tile放入bitmap中,bitmap可以直接用createBitmap()方法得到,这里的Canvas作用不大 Canvas canvas = new Canvas(bitmap); tile.setBounds(0, 0, mTileSize, mTileSize); tile.draw(canvas); mTileArray[key] = bitmap; }
除了上面这些外,游戏代码也组织得相当的好,因此这是一个很值得学习的示例,下面将这个示例的工程代码上传上来,其中主要部分本人都加了注释,读起来会更加容易,也便以后回顾。
推荐阅读
-
Android获取本地相册图片和拍照获取图片的实现方法
-
Android中Okhttp3实现上传多张图片同时传递参数
-
2021年全国十大政法大学排名最新-2021政法大学排名校友会版
-
Android自定义View简易折线图控件(二)
-
Android编程中延后处理事件的方法小结
-
Marvelous Designer 7.5 Enterprise中文破解版安装激活图文详细教程(附下载)
-
Android自定义ScrollView实现放大回弹效果实例代码
-
Sublime Text 2 官方安装版绿化与汉化图文教程
-
Android自定义View圆形进度条控件(三)
-
Surfer9汉化版怎么破解?Surfer9汉化版安装破解详细图文教程