kugel mit maus rollen lassen
-
also ich will ein kleines spiel im BCB programmieren, aber weil mir DDraw DirectX etc. zu kompliziert ist, benutze ich einfach 2 Images.
Das spiel soll soetwas wie das uralte spiel "OXYD" werden. nur ich habe ein problem:
wie kann ich die kugel "rollen" lassen? also ich habe die koordinaten der Kugel und ich habe eine berechnete geschwindigkeit.
Die kugel soll der maus folgen, aber (wer das spiel kennt, weiß wie ich es meine) eben "langsam".
das bekomme ich einfach nicht hin. kann mir da jemand helfen?
wie bekomme ich das jetzt hin, dass die kugel langsam ausrollt?
-
Indem die Kugel in die Richtung des Vectors beschleunigt wird, der von der Kugel aus zu dem Mauszeiger zeigt.
-
Du musst bloss noch jeden Frame den Speed der Kugel reduzieren, am besten mit
SpeedReductionFactor = 0.01f; Kugel.Speed *= SpeedReductionFactor;
Dann dürfte die Kugel auch flüssig auslaufen.
-
Wie hier? Was ist da das Problem?
Bye, TGGC (Just think about it)
-
godlikebot schrieb:
Du musst bloss noch jeden Frame den Speed der Kugel reduzieren, am besten mit
SpeedReductionFactor = 0.01f; Kugel.Speed *= SpeedReductionFactor;
Dann dürfte die Kugel auch flüssig auslaufen.
Mit einem Wert von 0.01 verliert die Kugel in jedem Frame aber 99% ihrer Geschwindigkeit. Das ist doch viel zu viel... außerdem funktioniert dieser Ansatz nicht, wenn die Frames unterschiedlich lange dauern.
So ginge es:
const float SpeedReductionFactor = 0.1f; Kugel.Speed *= powf(SpeedReductionFactor, FrameDurationInSeconds);
-
also danke für eure antworten,
ich habe immernoch das problem, die kugel überhaupt zu bewegen. weil ich versteh das mit den vektoren nicht soo ganz. kann mir einer ein bsp dazu geben?
-
@TomasRiker:
Ja, an unterschiedliche Frame-raten hab ich nicht gedacht, aber der 0.01f Wert war nicht ganz ernst gemeint. Er muss sich halt den Wert raussuchen, der am besten passt.
-
@nuclearspider:
Deine Kugel braucht die Eigenschaften position, richtung und Geschwindigkeit.class Kugel { point2d position; vec2d direction; float speed; };
Den Richtungsvektor kannst du so rauskriegen (Maus und Kugel müssen dabei aber das gleiche Koordinatensystem benutzen):
vec2d NewVector = Kugel.position - MousePos; Kugel.direction = Normalize(NewVector); // NewVector wird nicht verändert, es wird nur eine normalisierte(???) Kopie zurückgegeben Kugel.speed += GetLength(NewVector) * ACCELERATION_FACTOR;// ACCELERATION_FACTOR ist ein Wert unter 1
-
Danke,
aber ich weiß immernoch nicht so ganz, iwe ich das verwenden soll. welche dateien muss ich includieren??? (damit ich Normalize() oÄ verwenden kann)und noch was:
zu framerate etc. :
Ich mache das ganze im BCB, und ich verwende kein DirectDraw oder ähnliches (es wäre besser, wenn ich DDraw verwenden würde, oder?).
und da ich im moment einge ganz nochrmal form habe habe ich keine framerate.
-
nuclearspider schrieb:
welche dateien muss ich includieren??? (damit ich Normalize() oÄ verwenden kann)
LOL.
Mal von "selber machen" gehört.
Bye, TGGC (Just think about it)
-
godlikebot schrieb:
@nuclearspider:
Deine Kugel braucht die Eigenschaften position, richtung und Geschwindigkeit.class Kugel { point2d position; vec2d direction; float speed; };
Wieso eigentlich noch speed? Die steckt doch schon im Betrag von direction drinnen.
nuclearspider schrieb:
und da ich im moment einge ganz nochrmal form habe habe ich keine framerate
Öhm... Was hat das damit zu tun? Jedes spielt hat ne gewisse Framerate, oder willst du nur ein einziges Mal zeichnen?
-
interpreter schrieb:
Wieso eigentlich noch speed? Die steckt doch schon im Betrag von direction drinnen.
Hmmm, stimmt
-
Öhm... Was hat das damit zu tun? Jedes spielt hat ne gewisse Framerate, oder willst du nur ein einziges Mal zeichnen?
ja bis jetzt habe ich es so, das das bild neu gezeichnet weird, wenn man die maus (und damit die kugel) bewegt.