【问题标题】:Rectangles are not colliding?矩形不碰撞?
【发布时间】:2014-06-20 19:06:56
【问题描述】:

播放器类

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 时,它会生成ShapeRendered 矩形,它会跟随我的玩家。但是,我相信我的player.rectangle 出于某种原因根本没有移动,导致它不会与我的边界发生碰撞。任何帮助将不胜感激!

【问题讨论】:

  • 感谢您的评价!

标签: java libgdx collision rectangles


【解决方案1】:
rightRectangle = new Rectangle(1280,0,0,720);
leftRectangle = new Rectangle(0,0,0,720);

一个矩形被定义为矩形(x, y, width, height)。看起来您正试图将其错误地定义为 Rectangle(x1, y1, x2, y2)。在上面,您创建了两个宽度为 0 的矩形。

【讨论】:

  • 我意识到这一点,但即使它为零,它也应该仍然可以工作(我想我在不久前测试过这个,碰撞工作的地方)。如果我将宽度更改为 1 甚至 0.0001 并运行程序,它将始终与 leftRectangle 重叠,但不会阻止精灵移动(如果宽度为零,它不会重叠,但精灵不会停止移动)。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多