让计算机知道精灵何时遍历tmx地图中的特定图块

时间:2016-05-18 21:07:43

标签: java libgdx tmx

我有一个Circle形状,代表我将扮演和控制的角色。我有一张tmx地图,在地图上有红色方块,用于表示"围栏"。围栏位于地图的每个角落,围栏内部我的地面看起来与地图中的其他地面相同,但是我想让它知道角色何时站在那些瓷砖上在地图上。谁能帮我?我不知道它是否会有所帮助,但这里是代码:

public class PlayScreen implements Screen{

    private Game game;
    private OrthographicCamera gamecam;

    private Viewport gamePort;

    private TmxMapLoader mapLoader;
    private TiledMap map;
    OrthogonalTiledMapRenderer renderer;

    //Box@d variables
    private World world;
    private Box2DDebugRenderer b2dr;

    private Hero hero;

    private ArrayList<Rectangle> specGroundList;
    private boolean heroOnGround;

    public PlayScreen(BasicGame game){
        this.game = game;
        gamecam = new OrthographicCamera();
        gamePort = new FitViewport(BasicGame.V_WIDTH, BasicGame.V_HEIGHT, gamecam);

        mapLoader = new TmxMapLoader();
        map = mapLoader.load("Basic Map.tmx");
        renderer = new OrthogonalTiledMapRenderer(map);
        gamecam.position.set(gamePort.getWorldWidth() / 2, gamePort.getWorldHeight() / 2, 0);

        world = new World(new Vector2(0, 0), true);
        b2dr = new Box2DDebugRenderer();

        hero = new Hero(world, this);

        specGroundList = new ArrayList<Rectangle>();

        world.setContactListener(new WorldContactListener());

        BodyDef bdef = new BodyDef();
        PolygonShape shape = new PolygonShape();
        FixtureDef fdef = new FixtureDef();
        Body body;

        //create fence bodies/fixtures
        for(MapObject object: map.getLayers().get(3).getObjects().getByType(RectangleMapObject.class)){
            Rectangle rect = ((RectangleMapObject) object).getRectangle();

            bdef.type = BodyDef.BodyType.StaticBody;
            bdef.position.set(rect.getX() + rect.getWidth() / 2, rect.getY() + rect.getHeight() / 2);

            body = world.createBody(bdef);

            shape.setAsBox(rect.getWidth() / 2, rect.getHeight() / 2);
            fdef.shape = shape;
            body.createFixture(fdef);
        }

        //create special ground bodies/fixtures
        for(MapObject object: map.getLayers().get(2).getObjects().getByType(RectangleMapObject.class)) {
            Rectangle rect = ((RectangleMapObject) object).getRectangle();

            bdef.type = BodyDef.BodyType.StaticBody;
            bdef.position.set(rect.getX() + rect.getWidth() / 2, rect.getY() + rect.getHeight() / 2);

            body = world.createBody(bdef);

            shape.setAsBox(rect.getWidth() / 2, rect.getHeight() / 2);
            fdef.shape = shape;
            body.createFixture(fdef);




        }

    }


    @Override
    public void render(float delta) {

        update(delta);

        // Clear the game screen with Black
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        renderer.render();

        b2dr.render(world, gamecam.combined);



    }

    @Override
    public void show() {

    }

    public void handleInput(float dt){
        if(Gdx.input.isTouched()) {
//            gamecam.position.x += 100 * dt;
            gamecam.position.y -= 100 * dt;
        }
    }

    public void update(float dt){
        handleInput(dt);

        world.step(1/60f, 6, 0);

        hero.update(dt);

        for(Rectangle rect: specGroundList){

        }

        gamecam.update();
        renderer.setView(gamecam);


    }

    @Override
    public void resize(int width, int height) {
        gamePort.update(width, height);
    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {

    }

    public Viewport getGamePort() {
        return gamePort;
    }
}

1 个答案:

答案 0 :(得分:0)

假设你的英雄有一个已知位置,并且你的特殊地面区域是面向矩形,那么你不能只使用一个布尔函数来返回以下内容:

Hero.x > rectangle.left & Hero.x < rectangle.right & hero.y > rectangle.bottom & hero.y < rectangle.top