Wenn alle Objekte/Sprites bei dir Gleich groß sind, ist das relativ einfach:
Delphi-Quellcode:
var
mx,my:Integer;
begin
mx:=x div Size
my:=y div Size
Object.x:=mx*Size
Object.Y:=my*Size
end;
Objekt ist dein Sprite was du erstellen möchtest, und Size ist die Größe der Spritest. Wie gesagt wenn sie alle gleich groß sind.
X und Y könnten z.b. die Mauszeiger Positionen enthalten.
Sind die Objekte alle Unterschiedlich groß gibt es ein Problem... Bein einem Spiel von mir habe ich das so gelöst, das ich eine Größe Ermittelt habe, die in etwa alle Objekte umfasst... dann habe ich daraus ein Raster erstellt und die Objekte alle in diesem Raster Zentriert ! optimal ist das zwar noch nicht, aber es scheint bei mir ganz gut zu laufen.
Den Code habe ich für meine 2D Engine geschrieben, aber wenn du ihn haben möchtest könnte ich ihn raußsuchen. Du musst ihn dann nur noch anpassen.
Ich könnte mir bei Unterschiedlich Großen Objekten auch noch folgendes vorstellen:
Wenn das Spielfehld nicht ganz so viele Objekte hat, könntest du feststellen, welches Objekt am nahsten vom das Objekt liegt welches erstellt werden soll. Dann könntest du diese Position als Ausgangs Position nehmen.
Problem ist dann nur noch die Richtige Seite zu ermitteln.
(Darum schreibe ich lieber Spiele wo alle Objekte gleich groß sind *G*)