2017-03-05 3 views
0

내 게임에 Scene2D 기능을 사용합니다. 가상 화면 크기가 1920x1080 인 FitViewport이 있습니다.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

스케일을 변경하거나 회전 한 액터 만 크기를 조정하거나 회전 할 때 글꼴 액터의 경우 액터는 모델이며보기가 영향을받지 않는 글꼴입니다. – Aryan

관련 문제