Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kollisions Abfrage bei Pictures



FF I Weißmagier
30.04.2005, 20:46
---

übelster Held
30.04.2005, 22:01
ähm... 215-160=45...ja... welche rundungsregeln hast du da angewendet???
bei mir ist 215-160 immernoch 55...

also ich nehm mal an wen der wert des helden vorher 160 war
und nachher -50, ist/war der wert der gegners 210...
du hast nur falsch abgezogen, wenn du auf 50 kommen willst...
denn 160-210=-50
ist klar dass der held getroffen wird, da du ja nur fragst ob der
errechnete wert kleiner als 30 ist, und -50<30...
und 210-160=50, und 50 wollen wir ja haben, da 50>30...
also speicher erst den wert des monsters in eine extravariable, oder
lass sie wo sie ist und zieh dann den wert des Helden ab...


üH

Beril
30.04.2005, 23:09
also du solltest auf jeden Fall noch abfragen, ob die errechnete Vari kleiner 0 ist und wenn ja, dann rechnest du sie mal -1. Dann kannst du auch bei deiner einen Abfrage bleiben und brauchst nicht mit einbeziehen, ob die Vari negativ ist.

derBenny
30.04.2005, 23:12
Für Probleme dieser Art ist es immer gut, sich eine Anzeige zu scripten, die die Werte der jeweiligen Variablen die ganze Zeit über anzeigt. Es ist zwar umständlich, aber manchmal erkennt man dann ganz schnell, wo der Fehler liegt. Allerdings ist das Scripten der Anzeige natürlich mit einigem Aufwand verbunden, aber wenn du erstmal eine hast, kannst du sie später eventuell auch für andere Probleme verwenden.

-edit-
(Du könntest auch F9 drücken, um die Werte der Variablen zu überprüfen)

Blackadder
30.04.2005, 23:19
215 - 160 = 45

...

Am Ende der Kollision standen dann diese Werte hier:

Gegner x = 210
Held x = -50

Gegner x sollte aber eigentlich 45 sein, Held x dürfte sich nicht verändert haben.

Held x hat sich aber trotzdem verändert. Es war vorher 160.

die differenz zwischen 160 und -50 beträgt 210, was sicher nicht zufällig der x wert des gegners ist.

wenn bei mir solch ein fehler auftritt, dann liegt es meistens daran, dass ich mit den falschen variablen operiere. check erstmal gründlich, ob deine berechnungen die richtigen variablen verwenden.

ehrlich gesagt versteh ich den gedanken hinter diesem skript nicht, da es nur ein auschschnitt daraus zu sein scheint.
kannst du nicht das skript posten, wie du es im maker selber gemacht hast?

was ich jetzt schon sagen kann:
ich würde nicht zuerst fragen, wer auf welcher seite steht. setze die werte des helden immer als mittelpunkt, von denen du die werte des gegners abziehst. wenn der gegner links steht, ist der verbliebene wert positiv, wenn sie negativ ist, also minus, dann steht er rechts.

bsp:

monster 10x, held 20x
20x - [10x] = 10x
da 10x positiv ist, steht der gegner links.

monster 20x, held 10x
10x - [20x] = -10x
-10x ist negativ, also das gegenteil von oben, ergo: gegner rechts.

um dann einen bereich zu erzeugen, also die "kollisions-zone", musst du den wert mit zwei variablen abfragen. mal angenommen der radius ist 30 (also vom held aus in jede richtung 30, ein durchmesser von 60), dann fragst du, ob der wert grösser als -30 UND kleiner als 30 ist.
erst wenn diese beiden forks zutreffen, findet das weitere kollisons-prozedere statt.

aber das ist nur eine möglichkeit von vielen.

poste erstmal das skript, dann kann ich dir auch helfen. ;)

Beril
01.05.2005, 09:57
also so wie du das beschreibst kann es eigentlich nicht gehen, da dann nur eine Kollision stattfindet, wenn die beiden Pictures auch die gleiche y Koordinate haben...

um dann einen bereich zu erzeugen, also die "kollisions-zone", musst du den wert mit zwei variablen abfragen. mal angenommen der radius ist 30 (also vom held aus in jede richtung 30, ein durchmesser von 60), dann fragst du, ob der wert grösser als -30 UND kleiner als 30 ist.
erst wenn diese beiden forks zutreffen, findet das weitere kollisons-prozedere statt.
Naja siehe das was ich oben geschrieben hab. Außerdem lässt sich mit dem Maker schwerlich ein "radius" d.h. ein Kreis als Kollisionsfeld berechnen.
Du könntest allerdings den x und den y Wert des Gegners berechnen, dann die Differenz zum Hero nehmen und wenn´etwas negatives rauskommt mal -1 rechnen. Jetzt müsstest du den Unterschied der und der y Koordinate kennen. Dann ergibt sich folgende Formel:



(XDifferenz)²+(YDifferenz)² = (Entfernung zum Gegner)²
Pytaghoras wir danken dir...

du solltest dann mit dem Taschenrechner ausrechnen wie groß die Entfernung sein darf (in deinem Fall 900). Aaaalso fragst du dann ab, ob Entfernung kleiner/= 900 ist und fertig.
Nochmal alles im Überblick:


Change Variable [Gegner X] (Set) Gegner's X Pos
Change Variable [Gegner X] (Set) Gegner's Y Pos
Change Variable [Hero X] (Set) Hero's X Pos
Change Variable [Hero Y] (Set) Hero's Y Pos
Change Variable [Hero X] (-) [Gegner X]
Change Variable [Hero Y] (-) [Gegner Y]
Change Variable [Differenz X] (Set) [Hero X]
Change Variable [Differenz Y] (Set) [Hero Y]
if ([Differenz X] < 0 )
Change Variable [Differenz X] (*) -1
End
if ([Differenz Y] < 0 )
Change Variable [Differenz Y] (*) -1
End
Change Variable [Differenz X] (*) [Differenz X]
Change Variable [Differenz Y] (*) [Differenz Y]
Change Variable [Differenz X] (+) [Differenz Y]
Change Variable [Entfernung] (Set) [Differenz X]
if ([Entfernung] <= 900)
Kollision
End

Hoffe du kannst es verwenden.

greetz Beril