카메라를 통해 플레이어가 파괴되는 데 문제가있었습니다. 내 응용 프로그램에서는 카메라를 플레이어 (공)를 따라 움직였습니다. 그러나 카메라는 볼을 위로 움직일 수 있습니다. 그래서 내가 성취하고자하는 것은 플레이어 (공)가 인터페이스 (화면)의 바닥에 도달하면 파괴됩니다. 파괴 된 후에는 새로운 활동 (새로운 화면)이 나타나면 "Game Over"라고 표시됩니다. 큰 지원에 감사드립니다. interface of the application.개체가 카메라 시력을 통해 어떻게 파괴 될 수 있습니까?
package 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.World;
import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.utils.viewport.Viewport;
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.position.set(camera.position.x, camera.position.y);
def.gravityScale = 3;
CircleShape shape = new CircleShape();
shape.setRadius(0.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);
}
}
}
왜 같은 질문을 다시 게시 하시겠습니까? –
지난번 답변이 좋았 기 때문에 같은 질문을 다시 게시합니다.하지만 실수가 있었기 때문에 내가해야 할 일을 포기하지 못했습니다. – Luca
상관 없어요. 중복 질문은 다시 게시하지 마십시오. 설명이 필요하면 의견을 말하십시오. –