2016-12-16 40 views
0

我使用下面的代碼繪製與Libgdx滑塊:Libgdx滑塊 - 可繪製畫在錯誤的大小

Pixmap pix = new Pixmap(200, 50, Pixmap.Format.RGBA8888); 
    pix.setColor(Color.BLACK); 
    pix.fill(); 
    skin.add("sliderBackS", new Texture(pix)); 

    Pixmap pix1 = new Pixmap(10, 70, Pixmap.Format.RGBA8888); 
    pix1.setColor(Color.RED); 
    pix1.fill(); 
    skin.add("knobS", new Texture(pix1)); 

    Slider.SliderStyle sliderStyle = new Slider.SliderStyle(); 
    sliderStyle.disabledBackground = skin.newDrawable("sliderBackS"); 
    sliderStyle.disabledKnob = skin.newDrawable("knobS"); 
    sliderStyle.background = skin.newDrawable("sliderBackS"); 
    sliderStyle.knob = skin.newDrawable("knobS"); 

    skin.add("sunSlider", sliderStyle); 
    sunlightSlider = new Slider(0, 100, 1, false, sliderStyle); 
    stage.addActor(sunlightSlider); 

    sunlightSlider.setBounds(300, 300, 100, 10); 

    sunlightSlider.setDisabled(true); 
    sunlightSlider.setDebug(true); 

然後別的地方:

stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1/30f)); 
    stage.draw(); 

但由於某些原因的像素圖中滑塊似乎是以其實際尺寸繪製的。這可以在下面的圖片中可以看出(綠線是它應該是什麼,從調試):

slider wrong size 出於某種原因,寬度似乎被sunlightSlider.setBounds(300,300,100的約束,10 );但身高並沒有。

我知道我可以選擇像素尺寸來滿足我需要的任何東西,但我想使用來自文件的圖像。如果我使用大圖像,那麼它會以相似的方式溢出邊界。

我希望它看起來像上面那樣,但只限於綠色的矩形。

我在做什麼錯?

回答

1

TextureRegionDrawable,這是您用newDrawable調用創建的內容,默認情況下其最小尺寸與其原始像素尺寸相匹配。 Drawable的最小尺寸可防止Slider Widget將其繪製得儘可能小,以適應其自身的邊界。所以,你可以減少最小尺寸:

sliderStyle.disabledBackground = skin.newDrawable("sliderBackS"); 
sliderStyle.disabledBackground.setMinWidth(0); 
sliderStyle.disabledBackground.setMinHeight(0); 
// and so on for other new drawables. 

我不知道你的長期計劃是什麼,但通常你希望所有你的皮膚的圖像是一個單一的紋理對象的一部分,因此SpriteBatch沒有多次沖洗以繪製整個場景。

如果由於某種原因你沒有這樣做,你至少可以使所有這些純色可繪製使用相同的紋理。它可以簡單地是由一切共享的單像素白色紋理。另外,確保你正在處理你用來創建紋理的像素圖,或者你正在泄漏內存!

Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888); 
pix.setColor(Color.WHITE); 
pix.fill(); 
Texture tex = new Texture(pix); 
pix.dispose(); 
skin.add(tex, "white"); 

Drawable blackDrawable = skin.newDrawable("white", Color.BLACK); 
Drawable redDrawable = skin.newDrawable("white", Color.RED); 

Slider.SliderStyle sliderStyle = new Slider.SliderStyle(); 
sliderStyle.disabledBackground = blackDrawable; 
sliderStyle.disabledKnob = redDrawable; 
sliderStyle.background = blackDrawable; 
sliderStyle.knob = redDrawable; 

由於您已將Texture對象傳遞到皮膚,當皮膚處置後,皮膚將處置它。不要忘記在dipose()方法中處理皮膚。

+0

謝謝!我想我只是不明白setMinWidth(0)等,也感謝其他細節。 – Josiki