在使用android的朋友们,相信大家对android的游戏不陌生吧,像愤怒的小鸟,植物大战僵尸等等优秀的游戏,给我们带来了很好的用户体验
下面我来教大家一点android游戏开发的一点基础,大家可以参照这个方法框架来设计一些像贪吃蛇,俄罗斯方块,雷电等小游戏,从而激发大家学习的兴趣。
下面来看看这个程序的运行效果图:
这个红色小矩形就是我们可以操控的对象,我们可以用手机方向键控制它移动,也可以用触控的方式设置其位置,这是一些小游戏的雏形,大家可以再次深度开发,后面代码部分我会有详细的注释和源码下载,这里不再介绍
代码部分:
GameActivity.java-
01
package jiabin.activity;
02
03
import android.app.Activity;
04
import android.os.Bundle;
05
import android.view.Window;
06
import android.view.WindowManager;
07
08
public class GameActivity extends Activity{
09
/** Called when the activity is first created. */
10
@Override
11
public void onCreate(Bundle savedInstanceState) {
12
super.onCreate(savedInstanceState);
13
requestWindowFeature(Window.FEATURE_NO_TITLE);//设置窗口没有标题
14
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
15
setContentView(new GameView(this));//布局不采用静态布局,而是采用view方法
16
//不需要在资源文件中layout写XML文件
17
}
18
}
GameView.java-
01
package jiabin.activity;
02
03
import android.content.Context;
04
import android.graphics.Canvas;
05
import android.graphics.Color;
06
import android.graphics.Paint;
07
import android.view.KeyEvent;
08
import android.view.MotionEvent;
09
import android.view.View;
10
11
//这里我们继承View
12
public class GameView extends View{
13
14
int left,top;
15
int w,h;
16
public GameView(Context context)
17
{
18
super(context);
19
left = 20;
20
top = 20;
21
w = 20;
22
h = 20;
23
setFocusable(true);
24
//这里要注意,别忘了加入setFocusable
25
//如果不加上这个,View被显示时,没有获得焦点,就是说,按键动作没有发送给View,所以需要在构造函数中增加这个函数
26
}
27
28
//复写onTouchEvent方法
29
@Override
30
public boolean onTouchEvent(MotionEvent event) {
31
// TODO Auto-generated method stub
32
int x = (int) event.getX();//获取touch事件的横坐标
33
int y = (int) event.getY();//获取touch事件的纵坐标
34
left = x;
35
top = y;
36
postInvalidate();//和invalidate()相似,都是是用来刷新View的。具体区别可以参考http://blog.csdn.net/ssstudio/article/details/6758917
37
return super.onTouchEvent(event);
38
}
39
40
//复写onDraw方法,这里有详细的参考博客,我就不再赘述了。http://daimajishu.iteye.com/blog/1080624
41
@Override
42
protected void onDraw(Canvas canvas) {
43
// TODO Auto-generated method stub
44
super.onDraw(canvas);
45
Paint paint =new Paint();
46
paint.setColor(Color.RED);
47
canvas.drawRect(left, top, left+w, top+h, paint);//画个矩形,也可以从资源文件中生成位图,方法见博客
48
}
49
50
//复写onKeyDown方法,该方法用来捕捉手机键盘被按下的事件
51
//使用方法可以参考博客:http://book.51cto.com/art/201010/231845.htm
52
@Override
53
public boolean onKeyDown(int keyCode, KeyEvent event) {
54
// TODO Auto-generated method stub
55
switch(keyCode)
56
{
57
case KeyEvent.KEYCODE_DPAD_UP://按键响应事件
58
top-=10;//每次移动10像素,如果移动1像素的话会很慢,大家可以试试
59
postInvalidate();//这个刷新方法上面已经讲过
60
break;
61
case KeyEvent.KEYCODE_DPAD_DOWN:
62
top+=10;
63
postInvalidate();
64
break;
65
case KeyEvent.KEYCODE_DPAD_LEFT:
66
left-=10;
67
postInvalidate();
68
break;
69
case KeyEvent.KEYCODE_DPAD_RIGHT:
70
left+=10;
71
postInvalidate();
72
break;
73
default:
74
break;
75
}
76
return super.onKeyDown(keyCode, event);
77
}
源码下载:
GameActivity