moveobj - "kein gültiger Gleitkommawert"

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
allph
PaC-DK Newby
Posts: 23
Joined: 01 Jan 2016, 15:05

moveobj - "kein gültiger Gleitkommawert"

Post: # 82897Post allph
13 Jan 2016, 23:36

Ich will Objekt mit Click darauf nach rechts unten und dann nach links oben bewegen
(abhängig von Koordinaten; Startkoordinaten 200,200):

Skript (Magnet / Objekt):

Code: Select all

on (mouse)
 {
  setstring (objekt;  Magnet  )
  showinfo ( [objekt] ;true )
 }
on (click)
function (f-moveobj)
Skript (f-moveobj / Skript):

Code: Select all

setbool (highx;true)
setbool (highy;true)
setbool (lowx;false)
setbool (lowy;false)
setnum(ox; [objx]:[objekt]  )
setnum(oy; [objy]:[objekt]  )

if_num (  [ox]; > 870)
{
setbool (highx; true)
setbool (lowx; false)
}
if_num (  [oy]; > 370)
{
setbool (highy; true)
setbool (lowy; false)
}
if_num (  [ox]; <30)
{
setbool (lowx; true)
setbool (highx; false)
}
if_num (  [oy]; <30)
{
setbool (lowy; true)
setbool (highy; false)
}
if_bool (lowx;true)
setnum (movex; [ox] + 65)

if_bool (lowy;true)
setnum (movey; [oy]+ 65)

if_bool (highx;true)
setnum (movex; [ox]-65)
if_bool (highy;true)
setnum (movey; [oy] - 65)

moveobj ([objekt];[movex]; [movey]; 6)
Das Spiel lässt sich erstellen, aber dann:
Da erhalte ich bei anklicken des Magnetes die Fehlermeldung:
'Magnet' ist kein gültiger Gleitkommawert.
bei OK dann nocheinmal 'Magnet' ist kein gültiger Gleitkommawert. ,
dann wandert der Magnet ins Eck oben links, und da bleibt er dann auch.

Kann mir jemand meinen Fehler erklären ?
Last edited by allph on 14 Jan 2016, 13:10, edited 1 time in total.
Beste Grüße aus Wien
Image

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82898Post Zimond
14 Jan 2016, 00:45

Beim Befehl if_num die eckigen Klammern beim ersten Wert weglassen. Die eckigen Klammern bedeuten immer das der Inhalt der Variable genutzt wird, nicht der Name selber.

Angenommen du hast 2 Zahlen und einen String.

Code: Select all

setnum (zahl1 ; 10)
setnum (zahl2 ; 20)
setstring (text1 ; zahl2)

if_num (zahl1 ; 10) guckt ob der Wert 10 ist.

if_num ([text1] ; 20) wäre jetzt das gleiche wie 
if_num (zahl2 ; 20)
Das hab ich so gemacht weil man so einfache Arten von Arrays erstellen kann. Zb.

Code: Select all

if_num (zahl[nummer] ; 10)
Hiermit könntest du jetzt divesere Werte mit den Namen zahl1, zahl2, zahl3 usw abfragen nur durch ändern des Wertes Nummer.

Zur Fehlermeldung

Die spezielle Variable für objekt positionen schreibt sich so :

[objx:objektname]

Was du gemacht hast [objx]:[objekt] versucht den Wert von objx (nicht definiert also 0) durch den Wert von [objekt] (nicht definiert also auch 0) ohne Rest zu teilen. und 0 durch 0 findet der nicht so prickelnd. :ugly2:
Image

allph
PaC-DK Newby
Posts: 23
Joined: 01 Jan 2016, 15:05

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82899Post allph
14 Jan 2016, 02:03

Danke, Ben!

Code: Select all

setnum(ox;  [objx:[objekt]]  )
setnum(oy;  [objy:[objekt]]  )
ergiebt keine Fehlermeldung mehr, aber das Objekt bewegt sich nicht wie erwartet :?
Magnet wandert wieder nach links oben und dann ists aus :cry:

werte von movex und movex sind 0 (wieso??)

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82900Post Zimond
14 Jan 2016, 11:40

nur eine eckige Klammer

[objx:object]

du hast geschrieben

[objx:[object]]

was ergibt :

[objx:0]

Ein Objekt mit dem Namen 0 gibt es aber nicht, deswegen keine Position.
Image

allph
PaC-DK Newby
Posts: 23
Joined: 01 Jan 2016, 15:05

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82901Post allph
14 Jan 2016, 13:08

Zimond wrote:
Ein Objekt mit dem Namen 0 gibt es aber nicht, deswegen keine Position.
Hab ich doch erzeugt:
Skript Magnet/Objekt:

Code: Select all

on (mouse)
 {
 setstring (objekt;  Magnet  )
  showinfo ( [objekt] ;true )
Das Skript f-moveobj funktioniert jetzt, aber nur, wenn ich
den Objektnamen verwende

Code: Select all

setnum(ox;  [objx:Magnet]  )
setnum(oy;  [objy:Magnet]  )
Wie übergebe ich die Variable?? funktioniert weder mit [] noch ohne :cry:
Beste Grüße aus Wien
Image

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82902Post Zimond
14 Jan 2016, 16:39

achso.. ok.

Das muss ich mal genauer testen. Kann sein das es bei dem Fall objx mit noch einer Variable Probleme macht.

PS : Eine Zahl irgendwo namens Objekt hast du aber nicht? Weil in dem Fall würde diese vorgezogen werden.
Image

allph
PaC-DK Newby
Posts: 23
Joined: 01 Jan 2016, 15:05

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82903Post allph
14 Jan 2016, 16:56

Zimond wrote:achso.. ok.

PS : Eine Zahl irgendwo namens Objekt hast du aber nicht? Weil in dem Fall würde diese vorgezogen werden.
Hab ich nicht - bin in einem "Testraum".

loop1 funktioniert auch nicht -
hab ich ins Raumskript gepackt:

Code: Select all

 on (loop1)
 {
 function (f-moveobj)
 }
Magnet wartet auf ein Mouseover, dann bewegt er sich nach rechts unten und zittert vor sich rum.

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82905Post japanhonk
14 Jan 2016, 17:50

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
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82906Post Zimond
14 Jan 2016, 18:53

Code: Select all

 on (loop1)
 {
 function (f-moveobj)
 }
Ich weis nicht genau ob es dehalb nicht läuft aber so in das ungünstig weil da ist potentiall für Fehler drin.

Entweder sollte der Inhalt von f-moveobj direkt im loop1 Teil stehen oder du solltest die Funktion selber loopen lassen :

Code: Select all

on (enter)
 function (f-moveobj ; *)
on (exit)
 stopfunction (f-moveobj)
Der Grund ist : Das Loop Script wird so 50 mal pro Sekunde aufgerufen, die Funktion könnte aber durch wait oder einen anderen Befehl eine Verzögerung haben mit dem (ich bin mir nicht 100% sicher wie sich das verhält) Resultat das die Funktion immer wieder neugestartet wird und nicht durchläuft.
Image

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82907Post japanhonk
14 Jan 2016, 19:05

Wenn ich das richtig im Kopf habe, reagiert das neue on (mouse) jetzt aktiv auf das Überfahren von Objekten, nicht so, wie vorher, wo es quasi nur einen Impuls gab...

Da müsste es doch möglich sein, die Funktion mittels on (mouse) laufen zu lassen, bis man das Objekt verlässt...

oder ??

Gruß

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

allph
PaC-DK Newby
Posts: 23
Joined: 01 Jan 2016, 15:05

Re: moveobj - "kein gültiger Gleitkommawert"

Post: # 82908Post allph
14 Jan 2016, 20:06

Code: Select all

on (enter)
 function (f-moveobj ; *)
on (exit)
 stopfunction (f-moveobj)
Das funktioniert :D
Magnet prallt wie ein Flummi immer wieder ab!
- allerdings nur bei Aktivierung durch mouseover (???)
und bei auskommentierten Anfang des Skriptes:

Code: Select all

(*
setbool (highx;false)
setbool (highy;false)
setbool (lowx;true)
setbool (lowy;true)
*)
Warum das stört, ist mir ein Rätsel...

Besten Dank für die Hilfe

Post Reply