2016-01-14 7 views
0

Текст, нарисованный шрифтом и нарисованный в списке внутри Scrollpane, выглядит с разными размерами. Это как я рисую текст:Scrollpane странное масштабирование в libgdx

font.draw(batch, "score", 500, 700); 

И как я рисую текст в список внутри ScrollPane:

tfBackground = new Texture(Gdx.files.internal("tfbackground.png")); 
    knob_scroll = new Texture(Gdx.files.internal("knob_scroll.png")); 
    scroll_horizontal = new Texture(Gdx.files.internal("scroll_horizontal.png")); 

    sps.background = new TextureRegionDrawable(new TextureRegion(tfBackground)); 
    sps.vScroll = new TextureRegionDrawable(new TextureRegion(scroll_horizontal)); 
    sps.vScrollKnob = new TextureRegionDrawable(new TextureRegion(knob_scroll)); 

    listS = new List.ListStyle(); 
    listS.font = font; 
    listS.fontColorSelected = Color.BLACK; 
    listS.fontColorUnselected = Color.GRAY; 
    listS.selection = new TextureRegionDrawable(new TextureRegion(tfBackground)); 

    scoreList = new List<String>(listS); 

    items = new Array<String>(); 

    res += "score 1, score 2, score 3, score 4, score 5, score 6, score 7, score 8, score 9, score 10"; 

    String name_score[] = res.split(","); 
    for(String s: name_score) 
    { 
     items.add(s); 
    } 

    scoreList.setItems(items); 
    scoreList.pack(); 

    scrollPane = new ScrollPane(scoreList, sps); 

    addActor(scrollPane); 

И это странно результат (?):

Result

Кажется, что scrollpane как-то масштабируется. Я не хочу, чтобы текст внутри scrollpane был масштабирован.

Это весь код:

public class ResultScreen extends AbstractScreen{ 

private OrthographicCamera camera; 
private Viewport viewport; 
private BitmapFont font; 
private SpriteBatch batch; 
private String res; 
private float time = 10; 
private Texture tfBackground, knob_scroll, scroll_horizontal; 
private List<String> scoreList; 
private ScrollPane scrollPane; 
private List.ListStyle listS; 
private ScrollPane.ScrollPaneStyle sps; 
private Array<String> items; 

public ResultScreen(float time, String res) { 
    this.time = time; 
    font = new BitmapFont(Gdx.files.internal("aw.fnt")); 
    font.setColor(Color.BLACK); 
    camera = new OrthographicCamera(); 
    viewport = new StretchViewport(800, 1024, camera); 
    //viewport = new FitViewport(1240, 800, camera); 
    batch = new SpriteBatch(); 
    camera.position.x = 400; 
    camera.position.y = 512; 
    viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    this.res = res; 
    fillList(); 
} 

@Override 
public void buildStage() { 
    // TODO Auto-generated method stub 

} 

@Override 
public void resize(int width, int height) { 
    viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
} 

@Override 
public void render(float delta) { 
    super.render(delta); 
    Gdx.gl.glClearColor(1, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    font.draw(batch, "score", 500, 700); 
    batch.end(); 

    draw(); 
    act(); 
} 

private void fillList() 
{ 
    sps = new ScrollPane.ScrollPaneStyle(); 

    tfBackground = new Texture(Gdx.files.internal("tfbackground.png")); 
    knob_scroll = new Texture(Gdx.files.internal("knob_scroll.png")); 
    scroll_horizontal = new Texture(Gdx.files.internal("scroll_horizontal.png")); 

    sps.background = new TextureRegionDrawable(new TextureRegion(tfBackground)); 
    sps.vScroll = new TextureRegionDrawable(new TextureRegion(scroll_horizontal)); 
    sps.vScrollKnob = new TextureRegionDrawable(new TextureRegion(knob_scroll)); 

    listS = new List.ListStyle(); 
    listS.font = font; 
    listS.fontColorSelected = Color.BLACK; 
    listS.fontColorUnselected = Color.GRAY; 
    listS.selection = new TextureRegionDrawable(new TextureRegion(tfBackground)); 

    scoreList = new List<String>(listS); 

    items = new Array<String>(); 

    res += "score 1, score 2, score 3, score 4, score 5, score 6, score 7, score 8, score 9, score 10"; 

    String name_score[] = res.split(","); 
    for(String s: name_score) 
    { 
     items.add(s); 
    } 

    scoreList.setItems(items); 
    scoreList.pack(); 


    scrollPane = new ScrollPane(scoreList, sps); 
    scrollPane.setWidth(300); 


    System.out.println(Gdx.graphics.getWidth()); 

    addActor(scrollPane); 


} 

} 

PS: Абстрактный экран проходит этап и реализует экран.

+0

Можете ли вы показать, где вы рисуете сцену и создать партию для шрифта, который нужно нарисовать? – Tenfour04

+0

Я добавил весь код и PS: Абстрактный экран расширяет сцену и реализует экран. Спасибо –

ответ

0

Ваш конструктор не вызывает конструктор суперкласса, который также должен был бы вызвать один из конструкторов Stage, чтобы убедиться, что ваша Stage правильно настроена.

Что здесь происходит, так это то, что вы создали камеру и видовое окно (и SpriteBatch, хотя и не являетесь частью проблемы), которые используются только для вашего font.draw и отличаются от того, что использует Stage.

Ваш класс должен выглядеть следующим образом:

public class ResultScreen extends AbstractScreen{ 

    private OrthographicCamera camera; 
    private Viewport viewport; 
    private BitmapFont font; 
    private Batch batch; //<------------changed 
    private String res; 
    private float time = 10; 
    private Texture tfBackground, knob_scroll, scroll_horizontal; 
    private List<String> scoreList; 
    private ScrollPane scrollPane; 
    private List.ListStyle listS; 
    private ScrollPane.ScrollPaneStyle sps; 
    private Array<String> items; 

    public ResultScreen(float time, String res) { 
     super(new StretchViewport(800, 1024)); //Call an AbstractScreen constructor that calls a Stage constructor 
     this.time = time; 
     font = new BitmapFont(Gdx.files.internal("aw.fnt")); 
     font.setColor(Color.BLACK); 
     camera = getCamera(); //<------------changed 
     viewport = getViewport(); //<------------changed 
     batch = getBatch(); //<------------changed 
     camera.position.x = 400; 
     camera.position.y = 512; 
     // unnecessary can remove because this is called in resize: viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     this.res = res; 
     fillList(); 
    } 
} 

Например, AbstractScreen может иметь конструктор так:

public AbstractScreen(Viewport viewport){ 
    super(viewport); 
} 
+0

Большое спасибо. Решаемые. –

 Смежные вопросы

  • Нет связанных вопросов^_^