2015-09-26 55 views
0

我最近一直在爲一個項目做作業。
那麼,我有一個Screen2D的屏幕實現,我遇到的問題是我的窗口小部件上的觸摸事件不停留在窗口小部件上。
我的意思是,如果我彈出一個窗口,並嘗試移動它,它也會觸發我的圖形上的平移,或者如果我移動滑塊,它也會平移相機。LibGDX - Scene2D平移

這裏的my project on GitHub
我的活動是在類Pantalla核心,Here
在此先感謝配置。

回答

1

你的問題是,你正在使用舞臺與所有演員(小部件等)作爲相機手勢操作的輸入處理器。這意味着每當你將任何屬於它的演員應用某種手勢時,它都會觸發。

解決方案是爲當前階段上的相機手勢創建另一個階段。所以,你的代碼應該是這樣的:

//show method 
    viewport = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    // Creamos el stage, el cual albergara los botones entre otras cosas 
    stage = new Stage(viewport); 

    cameraStage = new Stage(viewport); //I'm not super-sure if you can user viewport second time - if not create new one 

    ... 

    //render method 
    stage.act(); 
    stage.draw(); 

    cameraStage.act(); 
    cameraStage.draw(); //cameraStage is drawn after stage so it will be over it! 

    ... 

就應該添加帶攝像頭的手勢連接到cameraStage不舞臺但當然它的功能應該影響還是演員階段所有的聽衆。

好吧然後你有兩個階段,攝像機舞臺與演員在舞臺上,所以你可以觸摸任何你想要的,你確定你正在觸摸這兩個階段,你現在要做的就是將兩個階段設置爲輸入處理器演員舞臺作爲第一,相機舞臺作爲第二,您將確保從演員舞臺的事件作爲第一。

您將需要InputMultiplexer來做到這一點。代碼的主要方案是:

InputMultiplexer inputMultiplexer = new InputMultiplexer(); 

    inputMultiplexer.addProcessor(stage); 
    inputMultiplexer.addProcessor(cameraStage); 

    Gdx.input.setInputProcessor(inputMultiplexer); 

現在,您的小部件事件首先被處理。

如果事端不起作用,還可考慮在觸摸stade時從inputMultiplexer中移除cameraStage,並在觸摸時再次添加它。


一個簡單的建議也 - 尤其是當你正在創建將在未來共享的工具,使用英語的變量/方法/等代碼中的名字 - 這將是對其他用戶

+0

更清楚呀,對於西班牙語的事情感到抱歉,這只是因爲這是目前的團隊任務,而且他們不善於處理英語(或者任何語言)。但感謝您的建議,我會添加英文評論和其他內容。好吧,讓我試試 –

+0

嗯,它的工作!謝謝兄弟們,也是的,我可以使用相同的視口來支持相機和GUI,我的意思是,也許我會爲GUI做另一個,因爲當我在Android上運行應用程序時,按鈕都很小。再次感謝! –