package wyf.jsl.bs;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.opengl.GLUtils;
import android.view.KeyEvent;
import android.view.MotionEvent;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import wyf.jsl.bs.R;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import static wyf.jsl.bs.Constant.*;
class GLGameView extends GLSurfaceView {
private SceneRenderer mRenderer;
MenuView w;//菜单界面引用声明
public int floorTexId;
public int balltextureid;
public int sidewallTexId1;
public int sidewallTexId2;
public int backwallTexId;
public int roofTexId;
public int lzjTextureid;
public int lhTextureid;
public int lbTextureid;
public int scorebankid;
public int numberid;
public int shadowid;
//摄像机位置
public float cx=CAMERA_INI_X;
public float cy=CAMERA_INI_Y;
public float cz=CAMERA_INI_Z;
//目标点位置
public float tx=0;
public float ty=CAMERA_INI_Y;//////////////////////////////
public float tz=0;
public int screenWidth;
public int screenHeight;
public float touchStartY;
public float touchStartX;
LogicalBall currentTouchBall;
public GLGameView(Context context,MenuView w) {
super(context);
mRenderer = new SceneRenderer(); //创建场景渲染器
setRenderer(mRenderer); //设置渲染器
setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);//设置渲染模式为主动渲染
this.w=w;
}
BasketballActivity activity=(BasketballActivity)this.getContext();
//按键回调方法
@Override
public boolean onKeyDown(int keyCode,KeyEvent e)
{
switch(e.getAction())
{
case KeyEvent.ACTION_DOWN:
if(keyCode==4)
{
w.left1=LEFT;//还原菜单位置
w.left2=LEFT;
w.left3=LEFT;
w.left4=LEFT;
SOUND_FLAG=false;//关闭声音
DEADTIME_FLAG=false;//关闭倒计时线程
activity.hd.sendEmptyMessage(GAME_MENU);
}
break;
}
return true;
}
//触摸事件回调方法
@Override
public boolean onTouchEvent(MotionEvent e) {
float y = e.getY();
float x = e.getX();
switch (e.getAction())
{
case MotionEvent.ACTION_DOWN://触控笔按下
touchStartY = y;//记录触控笔位置
touchStartX = x;//记录触控笔位置
//判断有否摸到球
float x3d=WIDTH*x/screenWidth-0.5f*WIDTH;
float y3d=HEIGHT*0.9f*(screenHeight-y)/screenHeight;/////////////////////////////////////////////
for(LogicalBall bfcc:mRenderer.albfc)
{
if(bfcc.state==0&&
x3d<bfcc.currentX+BALL_SCALE&&x3d>bfcc.currentX-BALL_SCALE&&
y3d<bfcc.currentY+BALL_SCALE&&y3d>bfcc.currentY-BALL_SCALE)
{
currentTouchBall=bfcc;
break;
}
}
break;
case MotionEvent.ACTION_UP://触控笔抬起
float dx=x-touchStartX;
float dy=y-touchStartY;
if(currentTouchBall!=null)
{
float vx=dx*BALL_MAX_SPEED_X/screenWidth;
float vy=-dy*BALL_MAX_SPEED_Y/screenHeight;
float vz=dy*BALL_MAX_SPEED_Z/screenHeight;
currentTouchBall.vx=vx*3;
currentTouchBall.vy=vy*4;
currentTouchBall.vz=vz*2;
currentTouchBall.state=2;
currentTouchBall=null;
}
break;
}
return true;
}
private class SceneRenderer implements GLSurfaceView.Renderer
{
private Assemble basketball_stands;
private Panel sb;
private Score score;
private Deadtime deadtime;
private Floor shadow;
private BallForDraw ball;
private BackWall backwall;
private Floor floor;
private LeftWall leftwall;
private RightWall rightwall;
private Roof roof;
Ball_Go_Thread bgt;
List<LogicalBall> albfc=new ArrayList<LogicalBall>();
public SceneRenderer()
{
}
public void onDrawFrame(GL10 gl) {
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
//摄像机
GLU.gluLookAt
(
gl,
cx,
cy,
cz,
tx,
ty,
tz,
0,
1,
0
);
gl.glPushMatrix();
floor.drawSelf(gl);
backwall.drawSelf(gl);
leftwall.drawSelf(gl);
rightwall.drawSelf(gl);
roof.drawSelf(gl);
basketball_stands.drawSelf(gl);
gl.glPopMatrix();
for(LogicalBall bfcc:albfc)
{
bfcc.drawSelf(gl);
}
//恢复成初始状态绘制晶体图标与数量
//设置当前矩阵为模式矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glPushMatrix();
gl.glTranslatef(0, 1.2f, -3f);
sb.drawSelf(gl);
gl.glPopMatrix();
gl.glEnable(GL10.GL_BLEND);//开启混合
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glPushMatrix();
gl.glTranslatef(-0.8f, 1.12f, -2.8f);
score.drawSelf(gl);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslatef(0.55f, 1.12f, -2.8f);
deadtime.drawSelf(gl);
gl.glPopMatrix();
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
screenWidth=width;
screenHeight=height;
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float) width / height;
gl.glFrustumf(-ratio, ratio, -1.1f, 0.9f, 2, 100);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glDisable(GL10.GL_DITHER);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST);
gl.glClearColor(0,0,0,0);
gl.glEnable(GL10.GL_DEPTH_TEST);
floorTexId=initTexture(gl,R.drawable.floor);
sidewallTexId1=initTexture(gl,R.drawable.swall1);
sidewallTexId2=initTexture(gl,R.drawable.swall3);
backwallTexId=initTexture(gl,R.drawable.swall2);
roofTexId=initTexture(gl,R.drawable.black);
balltextureid=initTexture(gl,R.drawable.basketball);
lzjTextureid=initTexture(gl,R.drawable.icon);
lhTextureid=initTexture(gl, R.drawable.red);
lbTextureid=initTexture(gl, R.drawable.lanban2);
scorebankid=initTexture(gl,R.drawable.yibiaoban);
numberid=initTexture(gl,R.drawable.number);
shadowid=initTexture(gl,R.drawable.shadow);
sb=new Panel
(
2.2f,
0.3f,
scorebankid,
new float[]
{
0,0,0,1,1,0,
1,0,0,1,1,1
}
);
score=new Score(numberid,GLGameView.this);
deadtime=new Deadtime(numberid,GLGameView.this);
backwall=new BackWall(backwallTexId,WIDTH,HEIGHT,LENGTH);
floor=new Floor(WIDTH,HEIGHT,LENGTH,floorTexId);
leftwall=new LeftWall(sidewallTexId1,WIDTH,HEIGHT,LENGTH);
rightwall=new RightWall(sidewallTexId2,WIDTH,HEIGHT,LENGTH);
roof=new Roof(roofTexId,WIDTH,HEIGHT,LENGTH);
ball=new BallForDraw(BALL_ANGLESPAN,BALL_SCALE,balltextureid);
shadow=new Floor(SHADOW_X,0,SHADOW_Z,shadowid);
//篮球架
basketball_stands=new Assemble
(
BASKETBALL_STANDS_SPAN,
BASKETBALL_STANDS_X,
BASKETBALL_STANDS_Y,
BASKETBALL_STANDS_Z,
GLGameView.this,
lzjTextureid,
lhTextureid,
lbTextureid
);
ringCenter=basketball_stands.getRingCentre();
ringR=basketball
没有合适的资源?快使用搜索试试~ 我知道了~
android开发体育类游戏《疯狂投篮》项目源码
共117个文件
class:39个
png:35个
java:28个
需积分: 1 0 下载量 198 浏览量
2024-03-05
18:15:43
上传
评论
收藏 4.84MB ZIP 举报
温馨提示
街头篮球机是一项源于美国流行世界的现代体育竞技项目,属于街头篮球文化的一部分,是一项适合全民健身、老少皆宜的具有较强竞技性、趣味性的运动新项目。 疯狂投篮是体育类游戏的一种,其模拟了街头篮球机,将风靡全世界的投篮机带到了手机上,只要动动手指就可以进行投篮,享受投篮机的乐趣。 在游戏开发之前,首先需要对游戏所应该具有的功能进行分析,功能分析是游戏开发的前提,有了需求才可能游戏的开发,并且需求分析必须非常详细,以免造成不必要的损失 。 具体的功能如下: 图标渐变界面 ,游戏运行后首先进入的界面。 游戏的音效,游戏的过程中需要在适当的位置添加上音效,并且可以对音效进行开与关闭的设置 。 菜单的选择,还需要设计出菜单界面,并且在菜单界面至少有四种菜单供用户选择。 游戏帮助,还需要为本游戏添加帮助界面,简单介绍游戏的基本功能及玩法。 屏幕触控操控,主要是完成玩家与游戏的交互。 游戏的胜利,游戏需要设计适当的难度,使玩家能够经过努力完成游戏。 疯狂投篮的可玩性强,需要玩家在规定时间内得尽可能多的分数,游戏过程中玩家不仅需要控制投篮的方向,还要恰到好处地掌握好投篮的力度,只有协调好这两个因素才
资源推荐
资源详情
资源评论
收起资源包目录
android开发体育类游戏《疯狂投篮》项目源码 (117个子文件)
resources.ap_ 1.55MB
GL_Basketball_Shot.apk 1.57MB
GLGameView$SceneRenderer.class 6KB
GLGameView.class 5KB
BasketballActivity.class 4KB
MenuView.class 4KB
LogicalBall.class 4KB
Ring.class 4KB
BallForDraw.class 4KB
Cylinder.class 4KB
OverView.class 3KB
SoundView.class 3KB
BasketballActivity$2.class 3KB
Board.class 3KB
AboutView.class 3KB
HelpView.class 3KB
CollisionUtil.class 3KB
LoadView.class 2KB
Assemble.class 2KB
Constant.class 2KB
Floor.class 2KB
LeftWall.class 2KB
BackWall.class 2KB
RightWall.class 2KB
Roof.class 2KB
Panel.class 2KB
Deadtime.class 2KB
Score.class 1KB
MenuThread.class 1KB
R$drawable.class 1KB
Ball_Go_Thread.class 1KB
DeadtimeThread.class 1KB
BasketballActivity$2$1.class 1KB
BasketballActivity$1.class 912B
LoadView$1.class 775B
R.class 511B
R$raw.class 459B
R$string.class 403B
R$layout.class 401B
R$id.class 395B
R$attr.class 316B
.classpath 280B
Thumbs.db 20KB
classes.dex 48KB
GLGameView.java 9KB
BasketballActivity.java 5KB
LogicalBall.java 5KB
Ring.java 5KB
BallForDraw.java 4KB
CollisionUtil.java 4KB
Cylinder.java 4KB
MenuView.java 3KB
Floor.java 3KB
R.java 3KB
Board.java 3KB
Constant.java 3KB
SoundView.java 2KB
OverView.java 2KB
Roof.java 2KB
LeftWall.java 2KB
RightWall.java 2KB
BackWall.java 2KB
HelpView.java 2KB
AboutView.java 2KB
Assemble.java 2KB
LoadView.java 2KB
Panel.java 2KB
Score.java 976B
Deadtime.java 963B
MenuThread.java 827B
DeadtimeThread.java 751B
Ball_Go_Thread.java 477B
gameback.MP3 63KB
over.mp3 26KB
whistling.mp3 13KB
collision.mp3 11KB
floor.png 367KB
swall2.png 183KB
swall3.png 175KB
swall1.png 167KB
loading.png 131KB
background.png 125KB
jieshao.png 122KB
help.png 115KB
ground.png 64KB
yibiaoban.png 23KB
basketball.png 10KB
number.png 8KB
begin.png 7KB
help1.png 6KB
shut.png 6KB
about1.png 6KB
on_off.png 5KB
icon.png 4KB
blue.PNG 3KB
red.PNG 3KB
basketball1.png 3KB
bnkj.png 3KB
black.PNG 3KB
icon.png 3KB
共 117 条
- 1
- 2
资源评论
交叉编译之王hahaha
- 粉丝: 406
- 资源: 45
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功