3天打造一个 android 小游戏
16lz
2021-01-26
http://www.cnblogs.com/youxilua/archive/2011/10/04/2199093.html
十月二日日~十月四日,三天(对前两天没兴趣的,可以直接下拉到第三天)
第一天:小游戏的简单准备
竟然是小游戏…当然越简单越好了…
游戏策划---
游戏玩法:
玩家只需要把屏幕里面见到的人物全部消灭!
游戏需要的技术:
1,surfaceview 的用法.
2,游戏的线程循环.
3,坐标的居中.
素材:
人物:
http://www.famitsu.com/freegame/tool/chibi/index2.html
这个网站可以帮我们生成我们需要的十二宫格人物
第二天:技术代码的实现
1,surfaceView
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 public
class
GameViewSurface
extends
SurfaceView
{
//1,声明我们的Bitmap对象
private
Bitmap bitmap;
//2,声明一个holder对象
private
SurfaceHolder holder;
//3,声明用于线程循环的对象
private
GameThread gameThread;
//4,声明我们的精灵,下一章节用的
private
List<Sprite> sprites =
new
ArrayList<Sprite>();
//5,初始我们的变量
public
GameViewSurface(Context context) {
super
(context);
gameThread =
new
GameThread(
this
);
holder = getHolder();
//用于调用运行的线程
holder.addCallback(
new
Callback() {
@Override
public
void
surfaceDestroyed(SurfaceHolder holder) {
//1退出时终止我们的run方法
boolean
retry =
true
;
gameThread.setRunning(
false
);
//2等待线程的终止
while
(retry) {
try
{
gameThread.join();
retry =
false
;
}
catch
(InterruptedException e) {
Log.d(
"sur"
,
"gua le "
);
}
}
}
//添加我们的绘图线程
@Override
public
void
surfaceCreated(SurfaceHolder holder) {
//1,创建精灵
createSprites();
//2,开始我们的线程
gameThread.setRunning(
true
);
gameThread.start();
}
@Override
public
void
surfaceChanged(SurfaceHolder holder,
int
format,
int
width,
int
height) {
}
});
}
//创建精灵方法
private
void
createSprites() {
sprites.add(createSprite(R.drawable.bad1));
}
private
Sprite createSprite(
int
resouce) {
bitmap = BitmapFactory.decodeResource(getResources(), resouce);
return
new
Sprite(
this
, bitmap);
}
//绘图方法
protected
void
onDraw(Canvas canvas)
{
//把背景画成黑色
canvas.drawColor(Color.BLACK);
//画出所有精灵
for
(Sprite sprite : sprites) {
sprite.onDraw(canvas);
}
}
//点了精灵消失的方法
//1,控制最后点击的时间
long
lastClick;
@Override
public
boolean
onTouchEvent(MotionEvent event) {
// 当时间间隔太少不执行以下方法
if
(System.currentTimeMillis() - lastClick >
500
){
lastClick = System.currentTimeMillis();
synchronized
(getHolder()) {
float
tX = event.getX();
float
tY = event.getY();
for
(
int
i = sprites.size() -
1
; i >=
0
;i--){
Sprite sprite = sprites.get(i);
if
(sprite.isCollison(tX,tY)){
//精灵消失
sprites.remove(i);
break
;
}
}
}
}
return
true
;
}
}
2,接着就要写我们的game循环的线程
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 public
class
GameThread
extends
Thread {
private
GameView view;
private
boolean
running =
false
;
public
GameLoopThread(GameView view) {
this
.view = view;
}
public
void
setRunning(
boolean
run) {
running = run;
}
@Override
public
void
run() {
while
(running) {
Canvas c =
null
;
try
{
c = view.getHolder().lockCanvas();
synchronized
(view.getHolder()) {
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- Android里监视数据库的变化[转]
- EventBus 3.0 简单使用
- Android多线程断点续传详解与案例
- Android(安卓)中文 API(123) ―― AbsListView(二)
- Android(安卓)旋转屏幕时禁止Activity重建
- Notification详解
- Android(安卓)Context完全解析
- android 数据存储之SQLite