2014-06-20 5 views
0

플레이어 클래스사각형이 충돌하지 않습니까?

public class Player extends Sprite implements InputProcessor { 
    public Vector2 velocity = new Vector2(); 
    private float speed = 500; 
    public Rectangle rectangle; 
    public Player(Sprite sprite){ 
     super(sprite); 
     this.rectangle = sprite.getBoundingRectangle(); 
    } 
    public void draw(SpriteBatch spriteBatch){ 
     update(Gdx.graphics.getDeltaTime()); 
     super.draw(spriteBatch); 
    } 
    public void update(float delta) { 
     rectangle = new Rectangle(getX() + velocity.x * delta,0,rectangle.getWidth(),rectangle.getWidth()); 
     setX(getX() + velocity.x * delta); 
    } 
} 

PlayScreen 클래스

public class PlayScreen implements Screen { 
    private Player player; 
    private OrthographicCamera camera; 
    private OrthogonalTiledMapRenderer renderer; 
    private TiledMap map; 
    private Rectangle rightRectangle, leftRectangle, playerRectangle; 
    //private ShapeRenderer shapeRenderer; 
    @Override 
    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     renderer.render(); 
     renderer.getSpriteBatch().begin(); 
     player.draw(renderer.getSpriteBatch()); 
     renderer.getSpriteBatch().end(); 

     //shapeRenderer.begin(ShapeType.Filled); 
     //shapeRenderer.setColor(0, 1, 0, 1); 
     //shapeRenderer.rect(
     // player.getX() + player.velocity.x * delta, 0, 
     // player.rectangle.getWidth(), player.rectangle.getHeight()); 
     //shapeRenderer.end(); 
    } 
    @Override 
    public void resize(int width, int height) { 
     camera.viewportWidth = width; 
     camera.viewportHeight = height; 
     camera.update(); 
    } 
    @Override 
    public void show() { 
     camera = new OrthographicCamera(); 
     map = new TiledMap(); 
     renderer = new OrthogonalTiledMapRenderer(map); 
     //shapeRenderer = new ShapeRenderer(); 

     player = new Player(new Sprite(new Texture("img/player.png"))); 
     rightRectangle = new Rectangle(1280,0,0,720); 
     leftRectangle = new Rectangle(0,0,0,720); 

     boolean wallLeft = leftRectangle.overlaps(player.rectangle); 
     boolean wallRight = rightRectangle.overlaps(player.rectangle); 

     if(wallLeft){ 
      System.out.println("wallLeft Overlap"); 
      player.velocity.x = 0; 
     } 
     else if(wallRight){ 
      System.out.println("wallRight Overlap"); 
      player.velocity.x = 0; 
     } 
     player.setPosition(
      Gdx.graphics.getWidth()/2f - player.getWidth()/2f, 
      Gdx.graphics.getHeight()/2f - player.getHeight()/2f 
       - Gdx.graphics.getHeight()/5f); 
    } 
} 

제대로 충돌 것 같지 않습니다. rightRectangleleftRectangle은 내 화면 경계입니다. shapeRenderer을 사용하면 직사각형이 만들어지고 주변 플레이어가 따라옵니다. 그러나, 나는 내 player.rectangle이 어떤 이유로 든 움직이지 않는다고 생각하며, 그 결과 내 옆 경계와 충돌하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다!

+1

리뷰 주셔서 감사합니다. – user3567126

답변

0
rightRectangle = new Rectangle(1280,0,0,720); 
leftRectangle = new Rectangle(0,0,0,720); 

사각형은 사각형 (x, y, 너비, 높이)으로 정의됩니다. Rectangle (x1, y1, x2, y2)으로 잘못 정의하려는 것 같습니다. 위의 경우 너비가 0 인 직사각형 두 개를 만들었습니다.

+0

나는 그것을 깨닫는다. 그러나 그것이 0 임에도 불구하고 여전히 작동해야한다. (나는 충돌이 일어난 곳에서 이것을 시험해 보았다.) 너비를 1 또는 0.0001로 변경하고 프로그램을 실행하면 leftRectangle이 항상 겹치지 만 스프라이트가 이동하는 것을 멈추지 않습니다 (너비가 0이면 겹치지 않지만 스프라이트는 이동하지 않습니다). 멈춤). – user3567126