package com.badlogic.androidgames.droidinvaders;
import java.util.List;
import javax.microedition.khronos.opengles.GL10;
import com.badlogic.androidgames.droidinvaders.World.WorldListener;
import com.badlogic.androidgames.framework.Game;
import com.badlogic.androidgames.framework.Input.TouchEvent;
import com.badlogic.androidgames.framework.gl.Camera2D;
import com.badlogic.androidgames.framework.gl.FPSCounter;
import com.badlogic.androidgames.framework.gl.SpriteBatcher;
import com.badlogic.androidgames.framework.impl.GLScreen;
import com.badlogic.androidgames.framework.math.OverlapTester;
import com.badlogic.androidgames.framework.math.Rectangle;
import com.badlogic.androidgames.framework.math.Vector2;
public class GameScreen extends GLScreen {
static final int GAME_RUNNING = 0;
static final int GAME_PAUSED = 1;
static final int GAME_OVER = 2;
int state;
Camera2D guiCam;
Vector2 touchPoint;
SpriteBatcher batcher;
World world;
WorldListener worldListener;
WorldRenderer renderer;
Rectangle pauseBounds;
Rectangle resumeBounds;
Rectangle quitBounds;
Rectangle leftBounds;
Rectangle rightBounds;
Rectangle shotBounds;
int lastScore;
int lastLives;
int lastWaves;
String scoreString;
FPSCounter fpsCounter;
public GameScreen(Game game) {
super(game);
state = GAME_RUNNING;
guiCam = new Camera2D(glGraphics, 480, 320);
touchPoint = new Vector2();
batcher = new SpriteBatcher(glGraphics, 100);
world = new World();
worldListener = new WorldListener() {
@Override
public void shot() {
Assets.playSound(Assets.shotSound);
}
@Override
public void explosion() {
Assets.playSound(Assets.explosionSound);
}
};
world.setWorldListener(worldListener);
renderer = new WorldRenderer(glGraphics);
pauseBounds = new Rectangle(480 - 64, 320 - 64, 64, 64);
resumeBounds = new Rectangle(240 - 80, 160, 160, 32);
quitBounds = new Rectangle(240 - 80, 160 - 32, 160, 32);
shotBounds = new Rectangle(480 - 64, 0, 64, 64);
leftBounds = new Rectangle(0, 0, 64, 64);
rightBounds = new Rectangle(64, 0, 64, 64);
lastScore = 0;
lastLives = world.ship.lives;
lastWaves = world.waves;
scoreString = "lives:" + lastLives + " waves:" + lastWaves + " score:"
+ lastScore;
fpsCounter = new FPSCounter();
}
@Override
public void update(float deltaTime) {
switch (state) {
case GAME_PAUSED:
updatePaused();
break;
case GAME_RUNNING:
updateRunning(deltaTime);
break;
case GAME_OVER:
updateGameOver();
break;
}
}
private void updatePaused() {
List<TouchEvent> events = game.getInput().getTouchEvents();
int len = events.size();
for (int i = 0; i < len; i++) {
TouchEvent event = events.get(i);
if (event.type != TouchEvent.TOUCH_UP)
continue;
guiCam.touchToWorld(touchPoint.set(event.x, event.y));
if (OverlapTester.pointInRectangle(resumeBounds, touchPoint)) {
Assets.playSound(Assets.clickSound);
state = GAME_RUNNING;
}
if (OverlapTester.pointInRectangle(quitBounds, touchPoint)) {
Assets.playSound(Assets.clickSound);
game.setScreen(new MainMenuScreen(game));
}
}
}
private void updateRunning(float deltaTime) {
List<TouchEvent> events = game.getInput().getTouchEvents();
int len = events.size();
for (int i = 0; i < len; i++) {
TouchEvent event = events.get(i);
if (event.type != TouchEvent.TOUCH_DOWN)
continue;
guiCam.touchToWorld(touchPoint.set(event.x, event.y));
if (OverlapTester.pointInRectangle(pauseBounds, touchPoint)) {
Assets.playSound(Assets.clickSound);
state = GAME_PAUSED;
}
if (OverlapTester.pointInRectangle(shotBounds, touchPoint)) {
world.shot();
}
}
world.update(deltaTime, calculateInputAcceleration());
if (world.ship.lives != lastLives || world.score != lastScore
|| world.waves != lastWaves) {
lastLives = world.ship.lives;
lastScore = world.score;
lastWaves = world.waves;
scoreString = "lives:" + lastLives + " waves:" + lastWaves
+ " score:" + lastScore;
}
if (world.isGameOver()) {
state = GAME_OVER;
}
}
private float calculateInputAcceleration() {
float accelX = 0;
if (Settings.touchEnabled) {
for (int i = 0; i < 2; i++) {
if (game.getInput().isTouchDown(i)) {
guiCam.touchToWorld(touchPoint.set(game.getInput()
.getTouchX(i), game.getInput().getTouchY(i)));
if (OverlapTester.pointInRectangle(leftBounds, touchPoint)) {
accelX = -Ship.SHIP_VELOCITY / 5;
}
if (OverlapTester.pointInRectangle(rightBounds, touchPoint)) {
accelX = Ship.SHIP_VELOCITY / 5;
}
}
}
} else {
accelX = game.getInput().getAccelY();
}
return accelX;
}
private void updateGameOver() {
List<TouchEvent> events = game.getInput().getTouchEvents();
int len = events.size();
for (int i = 0; i < len; i++) {
TouchEvent event = events.get(i);
if (event.type == TouchEvent.TOUCH_UP) {
Assets.playSound(Assets.clickSound);
game.setScreen(new MainMenuScreen(game));
}
}
}
@Override
public void present(float deltaTime) {
GL10 gl = glGraphics.getGL();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
guiCam.setViewportAndMatrices();
gl.glEnable(GL10.GL_TEXTURE_2D);
batcher.beginBatch(Assets.background);
batcher.drawSprite(240, 160, 480, 320, Assets.backgroundRegion);
batcher.endBatch();
gl.glDisable(GL10.GL_TEXTURE_2D);
renderer.render(world, deltaTime);
switch (state) {
case GAME_RUNNING:
presentRunning();
break;
case GAME_PAUSED:
presentPaused();
break;
case GAME_OVER:
presentGameOver();
}
fpsCounter.logFrame();
}
private void presentPaused() {
GL10 gl = glGraphics.getGL();
guiCam.setViewportAndMatrices();
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_TEXTURE_2D);
batcher.beginBatch(Assets.items);
Assets.font.drawText(batcher, scoreString, 10, 320 - 20);
batcher.drawSprite(240, 160, 160, 64, Assets.pauseRegion);
batcher.endBatch();
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_BLEND);
}
private void presentRunning() {
GL10 gl = glGraphics.getGL();
guiCam.setViewportAndMatrices();
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_TEXTURE_2D);
batcher.beginBatch(Assets.items);
batcher.drawSprite(480 - 32, 320 - 32, 64, 64, Assets.pauseButtonRegion);
Assets.font.drawText(batcher, scoreString, 10, 320 - 20);
if (Settings.touchEnabled) {
batcher.drawSprite(32, 32, 64, 64, Assets.leftRegion);
batcher.drawSprite(96, 32, 64, 64, Assets.rightRegion);
}
batcher.drawSprite(480 - 40, 32, 64, 64, Assets.fireRegion);
batcher.endBatch();
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_BLEND);
}
private void presentGameOver() {
GL10 gl = glGraphics.getGL();
guiCam.setViewportAndMatrices();
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_TEXTURE_2D);
batcher.beginBatch(Assets.items);
batcher.drawSprite(240, 160, 128, 64, Assets.gameOverRegion);
Assets.font.drawText(batcher, scoreString, 10, 320 - 20);
batcher.endBatch();
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_BLEND);
}
@Override
public void pause() {
state = GAME_PAUSED;
}
@Override
public void resume() {
}
@Override
public void dispose() {
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
3D飞机大战游戏3D-fei-ji-da-zhan.zip
共196个文件
class:87个
java:73个
png:11个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 81 浏览量
2024-05-12
19:39:38
上传
评论
收藏 17.7MB ZIP 举报
温馨提示
3D飞机大战游戏3D-fei-ji-da-zhan
资源推荐
资源详情
资源评论
收起资源包目录
3D飞机大战游戏3D-fei-ji-da-zhan.zip (196个子文件)
resources.ap_ 4.52MB
ch12-droidinvaders飞机大战游戏.apk 4.56MB
ch12-droidinvaders.apk 4.56MB
proguard.cfg 1KB
GameScreen.class 9KB
WorldRenderer.class 7KB
GLGame.class 6KB
TestScreen.class 6KB
World.class 6KB
SettingsScreen.class 6KB
ObjLoader.class 5KB
AndroidGraphics.class 5KB
Assets.class 5KB
MultiTouchHandler.class 5KB
MipMappedTexture.class 5KB
MainMenuScreen.class 4KB
AndroidGame.class 4KB
SpatialHashGrid.class 4KB
Texture.class 4KB
SingleTouchHandler.class 4KB
OverlapTester.class 4KB
Vertices3.class 4KB
SpriteBatcher.class 4KB
Vector3.class 4KB
KeyboardHandler.class 3KB
Vertices.class 3KB
Vector2.class 3KB
VBOVertices3.class 3KB
AndroidMusic.class 3KB
AndroidInput.class 3KB
EulerCamera.class 3KB
AndroidFastRenderView.class 2KB
Settings.class 2KB
AndroidAudio.class 2KB
Camera2D.class 2KB
Invader.class 2KB
Font.class 2KB
AccelerometerHandler.class 2KB
DirectionalLight.class 2KB
PointLight.class 2KB
Ship.class 2KB
Light.class 2KB
Pool.class 2KB
LookAtCamera.class 2KB
DroidInvaders.class 2KB
AndroidFileIO.class 2KB
GLGame$GLGameState.class 1KB
SingleTouchHandler$1.class 1KB
Graphics$PixmapFormat.class 1KB
MultiTouchHandler$1.class 1KB
Material.class 1KB
KeyboardHandler$1.class 1KB
AndroidPixmap.class 1KB
GameScreen$1.class 1KB
Input$TouchEvent.class 1KB
Shot.class 1KB
Input$KeyEvent.class 1KB
Animation.class 995B
GLGraphics.class 983B
FPSCounter.class 917B
AmbientLight.class 867B
AndroidSound.class 831B
TextureRegion.class 811B
GLScreen.class 796B
GameObject.class 758B
GameObject3D.class 747B
Input.class 718B
Sphere.class 675B
DynamicGameObject3D.class 672B
Graphics.class 671B
DynamicGameObject.class 668B
Circle.class 657B
Rectangle.class 644B
R.class 615B
TouchHandler.class 604B
Game.class 572B
Screen.class 549B
Shield.class 532B
Color.class 495B
R$string.class 490B
R$drawable.class 463B
R$layout.class 457B
Pixmap.class 441B
R$attr.class 403B
BuildConfig.class 387B
Pool$PoolObjectFactory.class 365B
FileIO.class 345B
Music.class 318B
Audio.class 297B
World$WorldListener.class 284B
Sound.class 173B
.classpath 475B
classes.dex 86KB
GameScreen.java 8KB
SpatialHashGrid.java 5KB
GLGame.java 5KB
WorldRenderer.java 5KB
World.java 5KB
MultiTouchHandler.java 5KB
SpriteBatcher.java 5KB
共 196 条
- 1
- 2
资源评论
枫蜜柚子茶
- 粉丝: 6707
- 资源: 4871
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- mod-ldap-2.4.6-31.el7.centos.1.x86-64.rpm
- mod-ldap-2.4.6-40.el7.centos.x86-64.rpm
- ResNet50模型训练猫狗数据集
- mod-ldap-2.4.6-80.el7.centos.x86-64.rpm
- mod-ldap-2.4.6-88.el7.centos.x86-64.rpm
- mod-ldap-2.4.6-89.el7.centos.1.x86-64.rpm
- mod-ldap-2.4.6-89.el7.centos.x86-64.rpm
- mod-ldap-2.4.6-99.el7.centos.1.x86-64.rpm
- 开源代码分享(31)-计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度
- meta-llama-3-8b-instruct 的 model-00002-of-00004.safetensors 的1/3
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功