Hi,
habs noch nicht alles richtig gesichtet, aber das klingt danach, dass :
entweder das Objekt keinen Endpunkt angegeben bekommt und weiterlaufen will
oder die Funktion nicht aufhört, die Koordinaten zu verändern.
Ich hab hier mal einige grundsätzliche Tips zum Objektbewegen, aus eigener Erfahrung :
Startkoordinate festlegen
Endkoordinaten festlegen
Objektposition 0/0 ist z.B. bei einem Quadrat die linke obere Ecke. Für die Mitte muss man draufrechnen.
Ist-Position feststellen
Wenn erreicht - Ende
Wenn nicht - weiterbewegen
Im Zweifelsfall habe ich die Koordinaten as den Variablen per textout ständig anzeigen lassen, so konnte ich beim Testen sehen, was drinsteht.
@Ben : in meinem letzten Game zeigte sich, dass objx zum berechnen nicht so zuverlässig funktionierte, wie das Abfragen eigener Variablen per if_num. Mag aber auch an der Menge und der benötigten Geschwindigkeit der Daten liegen ( Raumkampfsimulation )
Darum mach ich damit weiter. Kenne das objx aber natürlich schon
Berechnet wurde also eine eigens definierte Variable, die Position wurde nur mit objx ausgelesen.
Ausgehend von den Startkoordinaten 200&200 würde ich deine Funktion so schreiben ( bei einer Screengröße von 800x600 ) :
Im Startscript oder im on(enter) Skript sollte das Objekt an 200 / 200 bewegt werden :
setnum (magnet_x;200)
setnum (magnet_y;200)
moveobj (magnet;[magnet_x];[magnet_y];5)
Jetzt die Funktion bei on (mouse)
setnum (magnet_x;[objx:magnet]) -> Das ist die aktuelle Ist Position des Objektes.
setnum (magnet_y;[objy:magnet])
Ich lasse das Objekt jetzt nach links oben bewegen, wenn die Maus nach links bewegt wird und nach rechts unten, wenn der Zeiger rechts der Mitte ( X>400) des Screens steht .
Die Mauszeigerposition wird permanent ausgelesen und in den Variablen mousex und mousey gespeichert.
Wenn Du den Zeiger schlagartig versetzen willst, kannst Du diese Variablen auch beschreiben.
if_num (mousex;<400) ->Screenbreite ist 800
{
if_num (magnet_x;>1)
setnum (magnet_x;-1)
if_num (magnet_y;>1)
setnum (magnet_y;-1)
}
if_num (mousex;>400) ->Screenbreite ist 800
{
if_num (magnet_x;<750) -> wenn das Objekt 50 Pixel breit ist, endet die rechte Kante genau bei 800 Pixeln : 750 + 50
setnum (magnet_x;+1)
if_num (magnet_y;<550)
setnum (magnet_y;+1) -> wenn das Objekt 50 Pixel hoch ist, endet die untere Kante genau bei 600 Pixeln : 550 + 50
}
moveobj (magnet;[magnet_x];[magnet_y];5)
ähh...ich glaube, das müsste funktionieren...
Gruß
Manni