Moin,
ich bastel gerade an einem kleinen Spiel. In diesem Spiel gibt es eine Spielfläche die im prinzip endlos groß ist (viewport lässt sich nach belieben verschieben). Auf dieser Spielfläche sind Nodes (Planeten/Items/Spielfiguren/usw.)
Ich möchte das ganze so gestalten, das man prinzipiell beliebig Zoomen kann.
Zu diesem zweck habe ich mir ein ParallelCamera objekt auf die (FX) Scene gelegt. Der zoom erfolgt dann durch
camera.setScaleX(camera.getScaleX()-0.1);
camera.setScaleY(camera.getScaleY()-0.1);
bzw
camera.setScaleX(camera.getScaleX()+0.1);
camera.setScaleY(camera.getScaleY()+0.1);
Nun zum Problem:
Ich möchte mir ein Spielobjekt Node erstellen und dabei eine hochauflösende Textur verwenden (2000x2000 px +). Je größer ich meine Textur mache, destro größer ist aber auch der node im coordinaten-space meiner ParallelCamera. Genau das möchte ich aber nicht. Ich kann natürlich die Textur entsprechend runterskalieren, aber dann wird die Grafik beim heranzoomen der Camera pixelig.
Was ich im prinzip brauche ist eine transformation des Coordinaten-Space des Nodes auf den Coordinate-Space der Camera.
also sowas wie
Die Textur ist 2000x2000 pixel groß
der node 1 ist 100x100 in coordinaten groß
der node 2 ist 70x70 in coordinaten groß
beide lassen sich bis 2000x2000px anzeigefläche ohne pixelig zu werden zoomen
Kann mir jemand von euch eine Hilfestellung geben?
Scene code:
Planet code:
ich bastel gerade an einem kleinen Spiel. In diesem Spiel gibt es eine Spielfläche die im prinzip endlos groß ist (viewport lässt sich nach belieben verschieben). Auf dieser Spielfläche sind Nodes (Planeten/Items/Spielfiguren/usw.)
Ich möchte das ganze so gestalten, das man prinzipiell beliebig Zoomen kann.
Zu diesem zweck habe ich mir ein ParallelCamera objekt auf die (FX) Scene gelegt. Der zoom erfolgt dann durch
camera.setScaleX(camera.getScaleX()-0.1);
camera.setScaleY(camera.getScaleY()-0.1);
bzw
camera.setScaleX(camera.getScaleX()+0.1);
camera.setScaleY(camera.getScaleY()+0.1);
Nun zum Problem:
Ich möchte mir ein Spielobjekt Node erstellen und dabei eine hochauflösende Textur verwenden (2000x2000 px +). Je größer ich meine Textur mache, destro größer ist aber auch der node im coordinaten-space meiner ParallelCamera. Genau das möchte ich aber nicht. Ich kann natürlich die Textur entsprechend runterskalieren, aber dann wird die Grafik beim heranzoomen der Camera pixelig.
Was ich im prinzip brauche ist eine transformation des Coordinaten-Space des Nodes auf den Coordinate-Space der Camera.
also sowas wie
Die Textur ist 2000x2000 pixel groß
der node 1 ist 100x100 in coordinaten groß
der node 2 ist 70x70 in coordinaten groß
beide lassen sich bis 2000x2000px anzeigefläche ohne pixelig zu werden zoomen
Kann mir jemand von euch eine Hilfestellung geben?
Scene code:
Java:
Planet planet = new Planet();
Group universe = new Group();
universe.getChildren().add(planet);
Scene scene = new Scene(universe, Color.BLACK);
AlyaDisplay.this.setScene(scene);
ParallelCamera camera = new ParallelCamera();
scene.setCamera(camera);
camera.setScaleX(camera.getScaleX()-0.9);
camera.setScaleY(camera.getScaleY()-0.9);
Planet code:
Java:
public class Planet extends Region
{
public Planet()
{
int width = 2000;
int height = 2000;
File img = new File("texture.png");
Canvas planetCanvas = new Canvas(width,height);
GraphicsContext gc = planetCanvas.getGraphicsContext2D();
Image texture = null;
try
{
texture = new Image(new FileInputStream(img));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
gc.drawImage(texture, 0, 0, width, height);
// ... apply of some effects
this.getChildren().add(planetCanvas);
}
[code]