2017-09-05 3 views
0

카메라를 통해 플레이어가 파괴되는 데 문제가있었습니다. 내 응용 프로그램에서는 카메라를 플레이어 (공)를 따라 움직였습니다. 그러나 카메라는 볼을 위로 움직일 수 있습니다. 그래서 내가 성취하고자하는 것은 플레이어 (공)가 인터페이스 (화면)의 바닥에 도달하면 파괴됩니다. 파괴 된 후에는 새로운 활동 (새로운 화면)이 나타나면 "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); 
    } 
} 

} 
+0

왜 같은 질문을 다시 게시 하시겠습니까? –

+0

지난번 답변이 좋았 기 때문에 같은 질문을 다시 게시합니다.하지만 실수가 있었기 때문에 내가해야 할 일을 포기하지 못했습니다. – Luca

+0

상관 없어요. 중복 질문은 다시 게시하지 마십시오. 설명이 필요하면 의견을 말하십시오. –

답변

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

    if (ballBody.getPosition().y < camera.position.y){ 
     destroyBall(); 
    } else if (ballBody.getPosition().y > camera.position.y + 300){ 
     camera.position.set(ballBody.getPosition().y - 300); 
    } 

    update(); 

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

나는이 작품 희망에서 봐 주시기 바랍니다. 직접 destroyBall() 메소드를 작성할 수 있습니다.

+0

감사합니다. 작동합니다. 하지만 내 방법이 항상 작동하지 않기 때문에 destroyBall 메서드를 작성하는 방법을 물어봐야 할 것입니다. – Luca