package com.bn.d2.bill;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
*
* 游戏界面
*
*/
public class GameView extends SurfaceView implements SurfaceHolder.Callback{
GameActivity activity;//activity的引用
Paint paint;//画笔引用
Bitmap[] tableBmps;//球台图片
Bitmap cueBmp;//球杆图片
Bitmap[][] ballBmps;//所有球的图片
Bitmap barDownBmp;//力度条的图片
Bitmap barUpBmp;
Bitmap goDownBmp;//GO按钮图片
Bitmap goUpBmp;
Bitmap leftDownBmp;//向左微调按钮图片
Bitmap leftUpBmp;
Bitmap rightDownBmp;//向右微调按钮图片
Bitmap rightUpBmp;
Bitmap aimDownBmp;//目标转换按钮图片
Bitmap aimUpBmp;
Bitmap bgBmp;//背景图片
Bitmap[] numberBitmaps;//时间的图片
Bitmap breakMarkBitmap;
//对象引用
List<Ball> alBalls;//所有球的列表
Table table;//球台
Cue cue;//球杆
StrengthBar strengthBar;//力度条
VirtualButton goBtn;//GO按钮
VirtualButton leftBtn;//左按钮
VirtualButton rightBtn;//右按钮
VirtualButton aimBtn;//目标按钮
Timer timer;//计时器
//线程引用
GameViewDrawThread drawThread;//绘制线程
BallGoThread ballGoThread;//球前进的线程
KeyThread keyThread;//按键监听线程
TimeRunningThread timeRunningThread;//负责计时的线程
//状态值
int keyState=0;//键盘状态 1-left 2-right 4-null 8-null 16-change bar 32-button press time
float btnPressTime=0;//按下按钮的时间
//声音相关变量
SoundPool soundPool;//声音
HashMap<Integer, Integer> soundPoolMap;
MediaPlayer mMediaPlayer;
public static final int SHOOT_SOUND=0;//声音常量
public static final int HIT_SOUND=1;
public static final int BALL_IN_SOUND=2;
public GameView(GameActivity activity) {
super(activity);
this.activity=activity;
//获得焦点并设置为可触控
this.requestFocus();
this.setFocusableInTouchMode(true);
getHolder().addCallback(this);//注册回调接口
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.BLACK);//整个屏幕背景色
canvas.drawBitmap(bgBmp, 0, 0, paint);//游戏界面背景
table.drawSelf(canvas, paint);//绘制球台
//绘制所有球
List<Ball> alBallsTemp=new ArrayList<Ball>(alBalls);
for(Ball b:alBallsTemp){
b.drawSelf(canvas, paint);
}
cue.drawSelf(canvas, paint);//绘制球杆
strengthBar.drawSelf(canvas,paint);//绘制力度条
goBtn.drawSelf(canvas, paint);//绘制GO按钮
leftBtn.drawSelf(canvas, paint);//绘制左按钮
rightBtn.drawSelf(canvas, paint);//绘制右按钮
aimBtn.drawSelf(canvas, paint);//绘制目标按钮
if(activity.coundDownModeFlag){
timer.drawSelf(canvas, paint);//绘制时间
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
//如果正在播放击球动画或不显示球杆,所有触控事件全都不接受
if(cue.isShowingAnimFlag() || !cue.isShowCueFlag()){
return true;
}
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
if(goBtn.isActionOnButton(x, y))//按在go按钮上
{
goBtn.pressDown();//按下go按钮
}
else if(leftBtn.isActionOnButton(x, y))//如果按在左按钮上
{
leftBtn.pressDown();//按下左按钮
keyState=keyState|0x20;//和0010,0000按位或,第6位置1,标志增加按键时间
keyState=keyState|0x1;//和00001按位或,第1位置1,标志向左移
}
else if(rightBtn.isActionOnButton(x, y))//如果按在右按钮上
{
rightBtn.pressDown();//按下右按钮
keyState=keyState|0x20;//和0010,0000按位或,第6位置1,标志增加按键时间
keyState=keyState|0x2;//和00010按位或,第2位置1,标志向右移
}
else if(aimBtn.isActionOnButton(x, y))//如果按在目标按钮上
{
//切换两种瞄准方式
cue.setAimFlag(!cue.isAimFlag());
//设置不同瞄准方式的按钮图
if(cue.isAimFlag()){
aimBtn.releaseUp();
}
else{
aimBtn.pressDown();
}
}
else if(strengthBar.isActionOnBar(x, y)){//如果按在力度条上
strengthBar.changeCurrHeight(x, y);
}
else//没有按在虚拟按钮上
{
cue.calcuAngle(x, y);//计算球杆旋转角度
}
break;
case MotionEvent.ACTION_MOVE:
if(strengthBar.isActionOnBar(x, y)){//如果按在力度条上
strengthBar.changeCurrHeight(x, y);
}
else if(!goBtn.isActionOnButton(x, y) &&
!leftBtn.isActionOnButton(x, y) &&
!rightBtn.isActionOnButton(x, y) &&
!aimBtn.isActionOnButton(x, y)
)//也没有在力度条和按钮上
{
goBtn.releaseUp();//松开go按钮
keyState=keyState&0xFFEF;//和01111按位与,第5位清0,停止改变力度条
leftBtn.releaseUp();//松开左按钮
keyState=keyState&0xFFFE;//和1110按位与,第1位清0,清除左移标志
rightBtn.releaseUp();//松开右按钮
keyState=keyState&0xFFFD;//和1101按位或,第2位清0,清除右移标志
btnPressTime=0;//铵键时间清0
keyState=keyState&0xFFDF;//和1101,1111按位与,第6位清0,清除按键时间标志
cue.calcuAngle(x, y);//计算球杆旋转角度
}
break;
case MotionEvent.ACTION_UP:
if(goBtn.isActionOnButton(x, y))//按在go按钮上
{
goBtn.releaseUp();//松开go按钮
new CueAnimateThread(this).start();//创建播放击球动画的线程,并开启
}
else if(leftBtn.isActionOnButton(x, y))//如果按在左按钮上
{
leftBtn.releaseUp();//松开左按钮
keyState=keyState&0xFFFE;//和1110按位与,第1位清0,清除左移标志
btnPressTime=0;//铵键时间清0
keyState=keyState&0xFFDF;//和1101,1111按位与,第6位清0,清除按键时间标志
}
else if(rightBtn.isActionOnButton(x, y))//如果按在右按钮上
{
rightBtn.releaseUp();//松开右按钮
keyState=keyState&0xFFFD;//和1101按位或,第2位清0,清除右移标志
btnPressTime=0;//铵键时间清0
keyState=keyState&0xFFDF;//和1101,1111按位与,第6位清0,清除按键时间标志
}
break;
}
return true;
}
@Override
public void surfaceCreated(SurfaceHolder holder){
paint=new Paint();//创建画笔
paint.setAntiAlias(true);//打开抗锯齿
createAllThreads();//创建所有线程
initBitmap();//初始化位图资源
changeBmpsRatio(Constant.ssr.ratio);//改变图片的大小,尽量全屏,但不改变安宽高比
changeBmpsRatioFullScreen(Constant.wRatio,Constant.hRatio);//可以变形的图片适应全屏
initSounds();//初始化声音资源
//初始化背景音乐
mMediaPlayer = MediaPlayer.create(activity, R.raw.backsound);
mMediaPlayer.setLooping(true);
table=new Table(tableBmps);//球台
//创建球列表,并加入所有球
alBalls=new ArrayList<Ball>();
for(int i=0;i<Table.AllBallsPos.length;i++)//1
{
alBalls.add(new Ball(ballBmps[i],this,0,0,Table.AllBallsPos[i]));
}
cue=new Cue(cueBmp,alBalls.get(0));//球杆
strengthBar=new StrengthBar(barDownBmp,barUpBmp);//力度条
goBtn=new VirtualButton(goDownBmp,goUpBmp,Constant.GO_BTN_X,Constant.GO_BTN_Y);//GO按钮
leftBtn=new VirtualButton(leftDownBmp,leftUpBmp,Constant.LEFT_BTN_X,Constant.LEFT_BTN_Y);//左按钮
rightBtn=new VirtualButton(rightDownBmp,rightUpBmp,Constant.RIGHT_BTN_X,Constant.RIGHT_BTN_Y);//右按钮
aimBtn=new VirtualButton(aimDownBmp,aimUpBmp,Constant.AIM_BTN_X,Constant.AIM_BTN_Y);//右按钮
timer=new Timer(this,breakMarkBitmap,numberBitmaps);//创建计时器对象
if(activity.isBackGroundMusicOn())//开启背景音乐
{
mMediaPlayer.start();
}
startAllThreads();//开启线程
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, i
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
2015良心系列_Android版2D桌球游戏源码 (155个子文件)
.classpath 280B
GameView.java 22KB
MainMenuView.java 12KB
GameActivity.java 11KB
HighScoreView.java 8KB
Constant.java 8KB
R.java 6KB
Ball.java 6KB
Table.java 6KB
SoundControlView.java 6KB
ChoiceView.java 6KB
CollisionUtil.java 5KB
Cue.java 4KB
WellcomeSurfaceView.java 3KB
WellcomeView.java 3KB
FailSurfaceView.java 3KB
WinSurfaceView.java 3KB
FailView.java 3KB
WinView.java 3KB
StrengthBar.java 3KB
Timer.java 2KB
ScreenScaleUtil.java 2KB
HelpView.java 2KB
AboutView.java 2KB
SoundSwitchButton.java 2KB
BallGoThread.java 2KB
KeyThread.java 1KB
PicLoadUtil.java 1KB
CueAnimateThread.java 1KB
VirtualButton.java 1KB
GameViewDrawThread.java 703B
TimeRunningThread.java 638B
ColorUtil.java 598B
ScreenScaleResult.java 525B
DateUtil.java 426B
help.jpg 280KB
backsound.mp3 1.23MB
ballin.mp3 36KB
hit.mp3 35KB
shoot.mp3 34KB
bg.png 251KB
help0.png 144KB
bmp0.png 83KB
table0.png 69KB
bmp.png 63KB
menu2.png 45KB
win.png 37KB
dukea.png 37KB
menu4.png 37KB
menu1.png 36KB
menu0.png 36KB
menu3.png 35KB
lose.png 32KB
yinxiaoguan.png 27KB
yinxiaokai.png 26KB
yinyueguan.png 26KB
yinyuekai.png 25KB
choice0.png 21KB
choice1.png 20KB
dukeb.png 20KB
choice2.png 18KB
table6.png 13KB
icon.png 13KB
choice3.png 13KB
table12.png 13KB
table2.png 11KB
table4.png 10KB
table8.png 10KB
table10.png 10KB
table7.png 10KB
table11.png 10KB
table1.png 9KB
table5.png 9KB
go_up.png 8KB
go_down.png 8KB
qiu_gan.png 8KB
defen.png 8KB
off.png 8KB
on.png 8KB
riqi.png 8KB
ruler.png 7KB
table3.png 7KB
table9.png 7KB
aim_up.png 7KB
aim_down.png 6KB
left_up.png 6KB
left_down.png 6KB
right_up.png 6KB
right_down.png 6KB
ball100.png 4KB
ball140.png 4KB
ball90.png 4KB
ball120.png 4KB
ball130.png 4KB
ball150.png 4KB
ball110.png 4KB
ball141.png 4KB
ball142.png 4KB
ball101.png 4KB
ball92.png 4KB
共 155 条
- 1
- 2
资源评论
sillybsk
- 粉丝: 0
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功