android游戏开发的技术实现分析

在android开发中,你可能会有想要开发一个小游戏的冲动,那么用android来开发游戏如何实现呢?幸运的是,google提供了一些已经开发好的游戏实例.我们从他的两个游戏实例入手来探究探究.

对于轻量级的小游戏,其游戏的核心显示内容,我们可以写一个自己的view来实现!然后以一定的频率刷新这个view,我们调用view的invalidate()来实现.具体的我们来看看一个大家常见的游戏:Snake(贪吃蛇),下面来分析一些实现这个游戏的关键代码.

和其他app一样,Snake也由一个Activity开始的,同样的通过setContentView(R.layout.snake_layout);这行代码来确定显示内容的布局,这里有必要看看这个布局文件的内容(如下):

<merge xmlns:android="" xmlns:app=""> <com.example.android.snake.BackgroundViewandroid:id="@+id/background"android:layout_width="match_parent"android:layout_height="match_parent"app:colorSegmentOne="@color/muted_red"app:colorSegmentTwo="@color/muted_yellow"app:colorSegmentThree="@color/muted_blue"app:colorSegmentFour="@color/muted_green"/> <com.example.android.snake.SnakeViewandroid:id="@+id/snake"android:background="@android:color/transparent"android:layout_width="match_parent"android:layout_height="match_parent"app:tileSize="24dp" /> <TextView android:id="@+id/text" android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:gravity="center"android:textColor="@color/text_violet"android:textSize="24sp"android:visibility="visible" /> <RelativeLayout android:id="@+id/arrowContainer"android:layout_width="match_parent"android:layout_height="match_parent"android:visibility="gone"><ImageView android:id="@+id/imageUp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:padding="20dp"android:src="@drawable/dpad_up" /><ImageView android:id="@+id/imageLeft"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:padding="20dp"android:src="@drawable/dpad_left" /><ImageView android:id="@+id/imageRight"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:padding="20dp"android:src="@drawable/dpad_right" /><ImageView android:id="@+id/imageDown"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:padding="20dp"android:src="@drawable/dpad_down" /> </RelativeLayout></merge> 上面的代码,我们首先需要注意的是这个布局文件采用了merge来限定:因为我们的布局是framelayout,所以这里就采用了merge,因为任何加入activity的view的父groupview都是framelayout.

这里我们重点关注的时SnakeView,这个view就是实现这个游戏的核心.这里需要注意这一行代码:app:tileSize="24dp".这是SnakeView自己定义的一个属性,用于定义贪吃蛇的大小.能够这样使用,你需要先在attrs.xml里面为SnakeView定义这样的属性,看看这里时如何定义的:

<declare-styleable name="TileView"><attr name="tileSize" format="dimension" /> </declare-styleable> 你肯定会奇怪,怎么是TileView呢? 其实SnakeView是TileView的子类,而TileView是view的子类.

所以我们重点来看看SnakeView的实现.(贪吃蛇的具体实现就不设计,这里只是介绍一个游戏开发的实现核心).其实游戏的动画效果就是反复的调用invalidate来促使view重现绘制,通过重写View的onDraw(Canvas canvas)来实现.这样以来,当调用invalidate(),就会触发view自己回调onDraw(Canvas canvas),而游戏每一次需要显示的内容都由onDraw来绘制.

下面是定时刷新view的代码:

class RefreshHandler extends Handler {@Overridepublic void handleMessage(Message msg) {SnakeView.this.update();SnakeView.this.invalidate();}public void sleep(long delayMillis) {this.removeMessages(0);sendMessageDelayed(obtainMessage(0), delayMillis);}}; 上面定义的是一个handle,该handle起到一个定时器的作用,每隔delayMillis这么长的时间,来更新update()需要下次绘制的内容,然后invalidate()来刷新.

下面是他的onDraw的实现:

人生至少要有两次冲动,一为奋不顾身的爱情,一为说走就走的旅行。

android游戏开发的技术实现分析

相关文章:

你感兴趣的文章:

标签云: