package wyf.tzz.lta;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.opengl.GLUtils;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.opengles.GL11;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import static wyf.tzz.lta.Constant.*;
class MySurfaceView extends GLSurfaceView {
GL_Demo activity; //Activity的引用
boolean overFlag=false; //是否结束的标志
boolean isWin=false; //是否胜利的标志
boolean isFail=false; //是否失败的标志
SceneRenderer mRenderer; //场景渲染器
Plane plane; //hero机引用
EnemyPlane ep ; //单架敌机
EnemyPlaneGroup epg; //敌机组
Column heroMissile; //hero机炮弹
Column enemyMissile; //敌机炮弹
List<Missile> heroMissileGroup = new LinkedList<Missile>(); //hero机炮弹列表
List<Missile> enemyMissileGroup = new LinkedList<Missile>(); //敌机炮弹列表
TextureRect lifeIcon; //图标矩形
float cz=0f; //摄像机z坐标
float cy=2.2f; //摄像机y坐标
float cx=0f; //摄像机x坐标
int keyState=0; //按键状态
int life=LIVE_COUNT; //生命值
int delayCount=2; //爆炸动画延迟倍数
Score score; //得分纹理矩形
KeyThread keyThread; //按键监听线程
HeroPlaneMoveThread hpmt; //hero机移动线程
HeroMissileGoThread hmgt; //hero机炮弹移动线程
EnemyMissileGoThread emgt; //敌机炮弹移动线程
EnemyPlaneMoveThread epmt; //敌机移动线程
Handler hd; //消息处理器
public MySurfaceView(GL_Demo demo) {
super(demo);
this.activity=demo;
mRenderer = new SceneRenderer(); //创建场景渲染器
setRenderer(mRenderer); //设置渲染器
setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); //设置渲染模式为主动渲染
Constant.initConstant(this.getResources()); //初始化地面高度数组
hd=new Handler(){ //初始化消息处理器
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
switch(msg.what){
case 0: //成功躲避所有障碍物
activity.setWinView(); //切换到胜利的画面
break;
case 1: //成功完成任务
activity.setFailView(); //切换到失败的画面
break;
}
}
};
new Thread(){ //创建一个新的线程,检验是否胜利
@Override
public void run()
{
try {Thread.sleep(2000); //睡眠2000ms
} catch (InterruptedException e) { e.printStackTrace();}
while(true) {
if(isWin){ //如果胜利
over(); //结束掉所有线程
try {Thread.sleep(400);}
catch (InterruptedException e) {e.printStackTrace();}
hd.sendEmptyMessage(0);//发消息
break;
}
else if(isFail){ //如果游戏失败
over(); //结束掉所有线程
try {Thread.sleep(400); }
catch (InterruptedException e) {e.printStackTrace();}
hd.sendEmptyMessage(1);//发消息
break;
}
try {Thread.sleep(500); } //睡眠
catch (InterruptedException e) {e.printStackTrace();}
}
}
}.start(); //启动线程
}
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){ //为按键按下添加监听
switch(keyCode){
case KeyEvent.KEYCODE_DPAD_UP: //如果按下上键
keyState=keyState|0x1;
return true;
case KeyEvent.KEYCODE_DPAD_DOWN: //如果按下下键
keyState=keyState|0x2;
return true;
case KeyEvent.KEYCODE_DPAD_LEFT: //如果按下左键
keyState=keyState|0x4;
return true;
case KeyEvent.KEYCODE_DPAD_RIGHT: //如果按下右键
keyState=keyState|0x8;
return true;
case KeyEvent.KEYCODE_DPAD_CENTER: //如果按下中键
case KeyEvent.KEYCODE_SPACE: //如果按下空格键
keyState=keyState|0x10;
return true;
case KeyEvent.KEYCODE_BACK: //如果按下返回键
over();
activity.setMenuView(); //切换到主菜单界面
return true;
}
return false; //返回,其他按键交给系统处理
}
@Override
public boolean onKeyUp(int keyCode,KeyEvent event){ //为按键弹起添加监听
switch(keyCode)
{
case KeyEvent.KEYCODE_DPAD_UP: //如果上键弹起
keyState=keyState&0x1E;
return true;
case KeyEvent.KEYCODE_DPAD_DOWN: //如果下键弹起
keyState=keyState&0x1D;
return true;
case KeyEvent.KEYCODE_DPAD_LEFT: //如果左键弹起
keyState=keyState&0x1B;
return true;
case KeyEvent.KEYCODE_DPAD_RIGHT: //如果右键弹起
keyState=keyState&0x17;
return true;
case KeyEvent.KEYCODE_SPACE: //如果空格键弹起
case KeyEvent.KEYCODE_DPAD_CENTER: //如果中建弹起
keyState=keyState&0xF;
keyThread.fireCount=0; //将飞机每次发射炮弹的数量置为0
return true;
}
return false; //false,其他按键交给系统处理
}
class SceneRenderer implements GLSurfaceView.Renderer { //创建场景渲染器类
TextureRect trExplo[]=new TextureRect[6]; //爆炸动画纹理矩形
int anmiIndex=0; //爆炸动画索引
DrawCylinder land; //陆地圆柱引用
DrawCylinderSky sky; //天空圆柱引用
public int planeHeadId; //机头
public int frontWingId; //前机翼纹里
public int frontWing2Id; //前机翼纹里2
public int bacckWingId; //后机翼纹理
public int topWingId; //上机翼纹理
public int planeBodyId; //机身纹理
public int planeCabinId; //机舱纹理
public int cylinder1Id; //圆柱纹理1
public int cylinder2Id; //圆柱纹理2
public int screw1Id; //螺旋桨纹理
public int enemyPlaneFrontWingId; //敌机标志
public int enemyPlaneFrontWing2Id; //敌机标志
public int enemyPlaneBodyId; //敌机机身纹理
public int enemyPlaneTopWingId; //敌机上翼纹理id
public int enemyPlaneHeadId; //前敌机机头纹理id
public int screw2Id;//螺旋桨
public int landTextureId; //地面纹理名称ID
public int skyTextureId; //天空纹理名称ID
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);//清除颜色缓存于深度缓存
gl.glMatrixMode(GL10.GL_MODELVIEW); //设置当前矩阵为模式矩阵
gl.glLoadIdentity(); //设置当前矩阵为单位矩阵
GLU.gluLookAt(
gl,
cx, //摄像机坐标x
cy, //摄像机坐标Y
cz, //摄像机坐标Z
0, //观察目标点坐标 X
0, //观察目标点坐标 Y
-5, //观察目标点坐标 Z
0,
1, //摄像机朝向
0
);
gl.glPushMatrix(); //保护变换矩阵现场
gl.glTranslatef(0, Y_TRASLATE, -30); //平移
land.drawSelf(gl); //绘制地面
gl.glTranslatef(0, 0, 28); //平移
sky.drawSelf(gl); //绘制天空
gl.glPopMatrix(); //恢复变换矩阵现场
epg.drawSelf(gl); //绘制敌机
if(overFlag==false) { //如果hero机被击中
plane.drawSelf(gl); //绘制hero机
}
else if(overFlag){
if(anmiIndex/delayCount<trExplo.length) //动画没有播放完动画换帧
{
gl.glDisable(GL10.GL_DEPTH_TEST); //关闭深度测试
gl.glPushMatrix(); //保存当前矩阵
gl.
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【安卓程序——3D空战游戏】 (1)一个包含源代码和全部配置文件的完整安卓工程包。此程序是一个经典的3D空战游戏,它可以在安卓设备上运行,无论是手机还是平板电脑。这个程序非常适合初学者学习安卓开发,也可以供大家自行娱乐,或者作为课程设计项目。 (2)使用Java语言编写,采用了安卓开发的基础框架,包括活动(Activity)、意图(Intent)、广播接收器(Broadcast Receiver)等组件。通过此程序,初学者可以了解安卓开发的基本概念和基本操作,掌握如何使用Java语言开发安卓应用程序。 (3)源代码和配置文件完整,包括了所有必要的文件和资源。这使得学习者可以全面了解程序的各个部分,从界面设计到游戏逻辑的实现,以及如何进行调试和测试。 (4)本程序经过测试,可以保证在安卓设备上正常运行,另外附带了一份详细的运行教程,如果学习者在运行程序时遇到任何问题,可以随时联系博主进行咨询和解决。
资源推荐
资源详情
资源评论
收起资源包目录
Android游戏-3D空战游戏源码(java实现,可作学习及课设使用,附运行教程) (157个子文件)
resources.ap_ 1.5MB
AirFight.apk 1.53MB
jarlist.cache 120B
Plane_Wing.class 7KB
MySurfaceView$SceneRenderer.class 7KB
MenuSurfaceView.class 6KB
MySurfaceView.class 5KB
GL_Demo.class 5KB
Plane_BackWing.class 4KB
Plane.class 4KB
Column.class 4KB
DrawSpheroid.class 4KB
DrawCylinder.class 4KB
DrawCylinderSky.class 4KB
Constant.class 4KB
EnemyPlane.class 4KB
Plane_TopWing.class 3KB
SoundSurfaceView.class 3KB
FailSurfaceView.class 3KB
WinSurfaceView.class 3KB
HeroMissileGoThread.class 3KB
HelpSurfaceView.class 3KB
AboutSurfaceView.class 3KB
Airscrew.class 3KB
SingleEnemyPlane.class 3KB
EnemyMissileGoThread.class 3KB
LoadSurfaceView.class 3KB
TextureRect.class 2KB
MenuAnmiThread.class 2KB
KeyThread.class 2KB
ScoreRect.class 2KB
MoveThread.class 2KB
EnemyPlaneMoveThread.class 2KB
R$drawable.class 2KB
Missile.class 1KB
Score.class 1KB
MySurfaceView$2.class 1KB
HeroPlaneMoveThread.class 1KB
EnemyPlaneGroup.class 1KB
MySurfaceView$1.class 927B
GL_Demo$2.class 847B
GL_Demo$1.class 761B
R.class 484B
R$raw.class 472B
R$string.class 406B
R$layout.class 373B
BuildConfig.class 331B
R$attr.class 319B
.classpath 475B
classes.dex 86KB
annotations-4be57d9398e88593ae05be822c314aa0.jar 943B
MySurfaceView.java 17KB
Plane_Wing.java 12KB
MenuSurfaceView.java 10KB
Plane_BackWing.java 7KB
Plane.java 6KB
DrawSpheroid.java 6KB
GL_Demo.java 6KB
EnemyPlane.java 5KB
Plane_TopWing.java 5KB
Constant.java 5KB
Column.java 5KB
DrawCylinderSky.java 4KB
DrawCylinder.java 4KB
Airscrew.java 3KB
HeroMissileGoThread.java 3KB
R.java 3KB
SingleEnemyPlane.java 3KB
EnemyMissileGoThread.java 3KB
FailSurfaceView.java 3KB
SoundSurfaceView.java 3KB
AboutSurfaceView.java 3KB
HelpSurfaceView.java 3KB
WinSurfaceView.java 3KB
KeyThread.java 3KB
MenuAnmiThread.java 2KB
TextureRect.java 2KB
MoveThread.java 2KB
ScoreRect.java 2KB
LoadSurfaceView.java 2KB
EnemyPlaneMoveThread.java 2KB
Missile.java 1KB
Score.java 1KB
EnemyPlaneGroup.java 685B
HeroPlaneMoveThread.java 557B
BuildConfig.java 153B
winbg.jpg 90KB
failbg.jpg 87KB
skyball.jpg 64KB
loadbg.jpg 62KB
soundbg.jpg 55KB
grass.jpg 49KB
aboutbg.jpg 39KB
ewing1.jpg 30KB
jxdb.jpg 28KB
ewing2.jpg 28KB
bnkj.jpg 28KB
planecabin.jpg 25KB
eplanebody.jpg 22KB
huidu.jpg 22KB
共 157 条
- 1
- 2
资源评论
小新要变强
- 粉丝: 2w+
- 资源: 539
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python 手写实现 iD3 决策树算法-根据信息增益公式.zip
- 411675952289057车联助手-小窗版(三星)3.5.1.apk
- 三种快速排序方法合并在一个文件中以便直接运行的Python代码示例
- 937712277954201实习5.word
- 2程序语言基础知识pdf1_1716337722703.jpeg
- 简单的Python示例,演示了如何使用TCP/IP协议进行基本的客户端和服务器通信
- 考试.sql
- keil2 + proteus + 8051.exe
- 1961ee27df03bd4595d28e24b00dde4e_744c805f7e4fb4d40fa3f695bfbab035_8(1).c
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功