2017-03-05 16 views
0

Ich benutze Scene2D Funktionalität in meinem Spiel. Ich habe FitViewport mit virtueller Bildschirmgröße 1920x1080.Scene2D Koordinaten

viewport = new FitViewport(AssetLoader.VIRTUAL_WIDTH, AssetLoader.VIRTUAL_HEIGHT); 
stage = new Stage(viewport); 

Außerdem gibt es MyActor Klasse von Actor Klasse erweitert. MyActor Konstruktor:

public MyActor(String text, float x, float y) { 
    this.text = text; 

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(AssetLoader.robotoFontFile); 
    FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter(); 
    parameter.size = 96; 
    font = generator.generateFont(parameter); 
    generator.dispose(); 
    layout = new GlyphLayout(); 
    layout.setText(font, text); 
    super.setBounds(x, y, layout.width, layout.height); 

    this.debug(); 
    renderer = new ShapeRenderer(); 


    this.addListener(new InputListener(){ 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { 
      Gdx.app.log("MyActor", text + " is touched!"); 
      return true; 
     } 
    }); 
} 

Und MyActor overrided draw() Methode:

public void draw(Batch batch, float parentAlpha) { 
    super.draw(batch, parentAlpha); 
    batch.end(); 

    renderer.begin(ShapeRenderer.ShapeType.Line); 
    this.drawDebugBounds(renderer); 
    renderer.end(); 

    batch.begin(); 
    font.draw(batch, text, getX(), getY()); 

} 

Als ich das zum Laufen bringen:

bounds strange behavior

InputListener Griffe nur Eingang, wenn ich berühren innen grünes Rechteck trotz der erwarteten Berührung des Textes.

Also, wo ist das Problem? Ist BitmapFontdraw Methode nimmt die Position der oberen linken Ecke oder gibt es einige Probleme mit Koordinaten?

Antwort

1

Fügen Sie einfach die Schauspielerhöhe hinzu, um Ihr Problem zu lösen.

Aber Ihr Actor für Schriftart nicht gut genug, können Sie nur die Position ändern. Rotation und Skalierung funktionieren daran nicht.

private Container<Label> container; 

@Override 
public void create() { 
    stage=new Stage(); 

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(AssetLoader.robotoFontFile); 
    FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter(); 
    parameter.size = 96; 
    font = generator.generateFont(parameter); 
    generator.dispose(); 

    Label label1 = new Label("Test text", new Label.LabelStyle(font, Color.BLACK)); 

    container=new Container<Label>(label1); 
    container.setTransform(true); // for enabling scaling and rotation 
    container.size(100, 60); 
    container.setOrigin(container.getWidth()/2, container.getHeight()/2); 
    container.setPosition(100,200); 
    container.setScale(3); //scale according to your requirement 

    stage.addActor(container); 
} 

@Override 
public void render() { 
    super.render(); 

    Gdx.gl.glClearColor(1,1,1,1); 
    gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    stage.draw(); 
    stage.act(); 
} 

Und bedenken Sie Schriftart für jede einzelne Schriftart Darsteller Sie erstellen, das nicht gut ist, erstellen Schrift einmal und es an alle Schrift Schauspieler passieren.

+0

Danke! Können Sie erklären, warum Skalierung und Rotation nicht funktionieren? – danielleontiev

+1

überprüfen Sie diesen Thread http://Stackoverflow.com/a/42406597/3445320 – Aryan

+1

wenn Sie skalieren oder drehen dann nur Ihre Schauspieler skaliert oder gedreht, aber für Font Actor, Actor ist nur ein Modell und es ist Ansicht ist Schriftart, die nicht betroffen ist – Aryan

Verwandte Themen