触摸事件没有在libgdx sprite上注册

时间:2016-07-27 04:34:07

标签: java libgdx

我正在使用libgdx进行纸牌游戏,但我遇到了僵局。

  1. 未检测到精灵的触碰或点击。
  2. 我的主板上有额外的空间,

    中没有

    平铺地图文件。 我做了一个简单的项目来说明我的问题。 这里有一个可编辑的项目,它在其肠道https://dl.dropboxusercontent.com/u/51343591/card.zip

    中显示代码
    public class Card extends ApplicationAdapter {
        SpriteBatch batch;
        TmxMapLoader tmxMapLoader;
        TiledMap tiledMap;
        OrthogonalTiledMapRenderer mapRenderer;
        OrthographicCamera camera;
        Viewport gamePort;
        Sprite cardSprite;
        Sprite dotSprite;
        Vector3 screenPointTouched;
    
    @Override
    public void create () {
        batch = new SpriteBatch();
        tmxMapLoader=new TmxMapLoader();
        tiledMap= tmxMapLoader.load("level1.tmx");
        mapRenderer=new OrthogonalTiledMapRenderer(tiledMap);
        float worldwidth=19*16;//19tiles*16pixelspertile. This is what its like on the level1.tmx file
        float worldheight=12*16;//12tiles*16pixelspertile. This is what its like on the level1.tmx file
        gamePort= new StretchViewport(worldwidth,worldheight,camera);//new StretchViewport(,
        camera= new OrthographicCamera(10,10*(Gdx.graphics.getWidth()/Gdx.graphics.getHeight()));
        camera.position.set(gamePort.getWorldWidth()/2,gamePort.getWorldHeight()/2,0);//center the camera
        cardSprite=new Sprite(new Texture("badlogic.jpg"));
        dotSprite=new Sprite(new Texture("dot.png"));
        screenPointTouched=new Vector3();
        positionCardSpriteFromFirstRectangle();
    }
    
    @Override
    public void render () {
        update();
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        mapRenderer.render();
        batch.begin();
        cardSprite.draw(batch);
        dotSprite.draw(batch);
        batch.end();
    }
    
    private void positionCardSpriteFromFirstRectangle() {
        MapObject mo=tiledMap.getLayers().get("cardlayer").getObjects().get(0);//get the firstone onlys
        Rectangle rect=((RectangleMapObject)mo).getRectangle();
        cardSprite.setBounds(rect.x,rect.y,rect.width,rect.height);
    }
    
    public void update() {
        camera.update();
        mapRenderer.setView(camera);
        if(Gdx.input.isTouched()){//handle touch event
            screenPointTouched.set(Gdx.input.getX(),Gdx.input.getY(),0);
            screenPointTouched=camera.unproject(screenPointTouched);
            if(cardSprite.getBoundingRectangle().contains(screenPointTouched.x,screenPointTouched.y)){
                System.out.println("being touched");
                dotSprite.setPosition(screenPointTouched.x,screenPointTouched.y);
            }
        }
    }
    

    }

0 个答案:

没有答案