2016-11-03 3 views
0

Im Moment programmiere ich auf einem kleinen Spiel, wo Sie Asteroiden mit einem Raumschiff vermeiden müssen. Damit das Spiel auf jedem Gerät mit einem FitViewport gleich aussieht. Leider kommen meine Koordinaten bei der Größenanpassung durch die Verwendung der Ansichtsfenster etwas zu kurz. Schauen Sie sich zuerst das Class Diagramm an, um ein besseres Gesamtbild zu erhalten.Koordinaten bei Verwendung von FitViewport

enter image description here

(Klasse Diagramm wurde mit ObjectAid erstellt)

Um dies zu beheben, ich brauche die viewport.unproject() -Methode in der update() -Methode in der Klasse Spaceship zu implementieren. Spaceship Klasse:

public void update() 
{ 

    if (Gdx.input.isTouched()) 
    { 

     y = MyGdxGame.HEIGHT - Gdx.input.getY(); 
     x = Gdx.input.getX(); 
     sprite.setPosition(x, y); 

    } 
} 

Die Ansichtsfenster ist nur avalible in der GameScreenClass, so kann ich nicht nur in der Update-Methode schreiben. Der GameScreen sieht so aus:

@Override 
public void render(SpriteBatch batch) 
{ 
    // TODO Auto-generated method stub 

    cam.update(); 
    batch.setProjectionMatrix(cam.combined); 
    batch.begin(); 
    em.render(batch); 
    [...] 

} 

Ich möchte nicht den Lochcode in der GameScreenClass haben. Ich habe versucht, eine Update-Methode mit einem Viewport-Parameter zu erstellen, aber ich habe gerade einen weißen Bildschirm. Gibt es eine andere Möglichkeit, wie ich dieses Problem beheben könnte? Hier können Sie sich einen kompletten Überblick über mein Projekt verschaffen. (https://github.com/Zui0per/SpaceAvoiding/tree/master/tmp)

Vielen Dank im Voraus!

Antwort

1

Die Lösung ist wahrscheinlich, Touchkoordinaten in Ihrer Hauptklasse zu unprojizieren und die nicht projizierten x und y als Parameter an Ihre verschiedenen update() Methoden zu übergeben. Zum Beispiel in Spaceship:

public void update(float unprojectedX, float unprojectedY) { 
    if (Gdx.input.isTouched()) { 
     sprite.setPosition(unprojectedX, unprojectedY); 
    } 
} 

Es ist schwer, den Code zu folgen, da Sie mehrere machen und unproject Methoden in jeder Klasse haben, aber Sie würden die Touch-Koordinaten unproject brauchen und geben sie in die EntityManager.update() Methode, und es könnte diese an seine Kinder weitergeben.

Verwandte Themen