2017-03-05 9 views
0

私はゲームでScene2Dの機能を使用しています。私はFitViewportと仮想スクリーンサイズ1920x1080を持っています。Scene2D座標

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

また、Actorクラスから延長MyActorクラスがあります。私はこの取得実行している場合

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()); 

} 

MyActorコンストラクタ:

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; 
     } 
    }); 
} 

そしてMyActordraw()メソッドをオーバーライド

bounds strange behavior

InputListenerは、入力を処理するだけで、私はもかかわらず、緑の四角形の内側にタッチしたときテキストに期待される接触の

だからどこに問題がありますか? BitmapFontdrawメソッドは左上隅の位置を取るか、座標に問題がありますか?

答えて

1

アクターの高さを追加するだけで問題を解決できます。

font.draw(batch, text, getX(), getY()+ getHeight()); 

あなたの俳優は十分ではありませんが、あなたは唯一の位置を変更することができます。回転とスケーリングはそれでは機能しません。

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(); 
} 

そして、あなたは良くありませんそれぞれ別々のフォント俳優、フォントを作成し、一度フォントを作成し、すべてのフォント俳優にそれを渡しているに注意してください。

+0

ありがとうございます!スケーリングとローテーションがうまくいかない理由を説明できますか? – danielleontiev

+1

このスレッドをチェックするhttp://stackoverflow.com/a/42406597/3445320 – Aryan

+1

拡大縮小または回転した俳優のみを拡大/縮小したり回転したりすると、Font Actorでは俳優は単なるモデルであり、そのビューは影響を受けません – Aryan