gpt4 book ai didi

java - 如何通过镜头让玩家被摧毁?

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:47 24 4
gpt4 key购买 nike

我在让玩家通过镜头被摧毁时遇到了一些麻烦。在我的应用程序中,我让相机跟随玩家(球)。但摄像机只能跟随球向上。所以我想要完成的是,当玩家(球)到达界面(屏幕)的底部时,它就会被摧毁。当它被摧毁后,如果弹出一个新的 Activity (新屏幕),那就太好了,那就是“游戏结束”。非常感谢大家的大力支持。 the interface of the application

com.luca.tuninga 包;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.*;



public class MyGdxGame extends ApplicationAdapter {


public static float APP_FPS = 60f;
public static int V_WIDTH = 480;
public static int V_HEIGHT = 640;


Box2DDebugRenderer b2dr;
World world;
Body ballBody;

OrthographicCamera camera;

float cameraMaxY;

@Override
public void create() {
world = new World(new Vector2(0, -9.8f), false);
b2dr = new Box2DDebugRenderer();


camera = new OrthographicCamera();
camera.setToOrtho(false, V_WIDTH, V_HEIGHT);
cameraMaxY = camera.position.y;


ballBody = createBall();
createWalls();
}

private void update() {
world.step(1f / APP_FPS, 6, 2);

if (Gdx.input.isTouched()) {
ballBody.setLinearVelocity(0, MathUtils.clamp(ballBody.getLinearVelocity().y, 0, 3));
ballBody.applyForceToCenter(new Vector2(0, 650f), false);
}

if (ballBody.getPosition().y * 32 > cameraMaxY) {
camera.translate(0, (ballBody.getPosition().y * 32) - cameraMaxY);
camera.update();

cameraMaxY = camera.position.y;
}
}

@Override
public void render() {
Gdx.gl.glClearColor(.25f, .25f, .25f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

update();

b2dr.render(world, camera.combined.cpy().scl(32f));
}

@Override
public void dispose() {
super.dispose();
world.dispose();
}

private Body createBall() {
Body body;
BodyDef def = new BodyDef();
def.type = BodyDef.BodyType.DynamicBody;
def.fixedRotation = true;
def.position.set(camera.position.x/ 32 + .5f, camera.position.y/ 32);
def.gravityScale = 3;
CircleShape shape = new CircleShape();
shape.setRadius(.5f);

body = world.createBody(def);
body.createFixture(shape, 1.0f);
return body;

}

private void createWalls() {
Body body;
BodyDef def = new BodyDef();
def.type = BodyDef.BodyType.StaticBody;
def.fixedRotation = true;

PolygonShape shape = new PolygonShape();
shape.setAsBox(1, 200 / 32);
for(int i = 0; i < 20 ; i++) {
def.position.set(1.01f, i * (200 / 32));
body = world.createBody(def);
body.createFixture(shape, 1.0f);

def.position.set(V_WIDTH / 32 - 1, i * (200 / 32));
body = world.createBody(def);
body.createFixture(shape, 1.0f);
}
}

}

最佳答案

据我了解,相机只会向上跟随。因此,当球过渡到向上位置时,相机将更新并跟随,相机不会再次下降。

这样您就可以检查球何时在摄像机视线之外;特别是相机的底部。

您可以执行类似的操作,将其放在 update() 函数的末尾

if ((ballBody.getPosition().y + 0.5f) * 32 < ballBody.getPosition().y -
camera.getViewportHeight()/2) {
// destroy body
world.destroyBody(ballBody);

// TODO: switch to another screen (thus next frame update & draw loop of this screen won't be called anymore)
}

上面是检查球是否完全超出相机的视线(因此我使用+ 0.5f,这是您用来创建此类物体形状的半径)相对于相机的视口(viewport)高度。

然后切换到另一个屏幕。这意味着当前屏幕将不再更新或绘制其内容,因此不需要检查标志。 但是如果你需要在下一帧中再次执行其他操作,你最好在当前屏幕上有一个标志检查,以了解游戏现在已经结束,从而可以检查是否执行某些操作。

关于java - 如何通过镜头让玩家被摧毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46026937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com