Also wenn Du skalierst, dann musst Du Koordinaten umrechnen und auch die bounding Boxen anpassen. Dabei ist es egal, an welcher Stelle du die Skalierung durchführst.
Generell gilt hier aus meiner Sicht auch: Separation of Concerns.
Du solltest also auch hier sauber trennen:
- Model: Du hast also irgend ein Model. Dieses kennt keine Skalierung oder so, da dies eine Frage der Darstellung ist. Die Elemente des Model haben also irgend welche Koordinaten und Größen und damit kannst Du dann z.B. Kollisionen und so bestimmen inkl. dem notwendigen Verhalten.
- Darstellung - die Darstellung ist davon komplett getrennt. Im Client hast Du dann ggf. eine Skalierung der Anzeige, weil der Anwender rein und raus zoomen kann. Die Kernproblematk bleibt aber natürlich bestehen: Du wirst hier eine Umrechnung brauchen, denn Du hast zwei Koordinatensysteme: Neben den von dem Model hast du eine Darstellung auf dem Bildschirm und da musst Du dann ggf auf ein Mausklick reagieren oder so.
Ich selbst habe die Skalierung in JAdventure, welches ein 2D Level hat, im Client rein über die Darstellung des Bildes gemacht. Ein Level hat ein Bild, Objekte haben Bilder ... diese werden dann in der vorgegebenen Größe gezeichnet. Da gibt es dann keine Skalierung.
Erst wenn dann das Endergebnis angezeigt wird: Da gibt es dann die Skalierung. Und das kann man dann mit einem einfachen Faktor ausrechnen. Die Koordinate xm,ym wird dann in der Darstellung xd,yd mit xd = xm*sf, yd = ym,*sf mit
xm/ym die x/y Koordinate des Model
xd/yd die x/y Koordinate in der Darstellung
sf dem Skalierungsfaktor.
Die Bildschirm-Koordinate xb,yb wird dann natürlich noch durch ein Offset (ox, oy) gekennzeichnet. Es wird ja nur ein Ausschnitt des Levels gezeigt.
xb = xd - ox
yb = yd - oy
ox,oy ist dann der obere linke Punkt der Darstellung vom darzustellenden Level.
Sowas immer aufzeichnen - dann ist es relativ einfache Mathematik und man kann die Formeln schnell und einfach aufstellen. Dazu am besten eigene Klassen schreiben, die dann entsprechend umgerechnet werden können.
(Das fehlt bei mir noch - die Idee hatte ich selbst noch nicht... )