![]() |
Bewegung ins Spiel bringen...
Liste der Anhänge anzeigen (Anzahl: 2)
halli hallo liebe delphi community =)
zunächst entschuldigt bitte, falls dieses thema schon einmal behandelt wurde - ich habe bereits erfolglos gesucht.. nun aber zu meinem problem, bzw. zu meiner frage: seit einiger zeit beschäftige ich mich mit delphi und schreibe momentan ein kleines 2d spiel (ansicht von oben). ich habe eine kleine spielfigur in einem TRotateImage (drehbares bild, wie der name schon sagt). ein timer läuft nebenbei (ja - geht bestimmt auch eleganter) und überprüft jedesmal, ob die tasten a oder d gedrückt sind. wenn ja, wird der winkel der figur verändert (sie dreht sich, W A S D-steuerung). so nun möchte ich, dass sich die figur beim drücken der w und s taste natürlich auch bewegt. und zwar in genau die richtung, in die sie gerade blickt, bzw. gedreht ist. ich habe also den winkel, bzw. die steigung und die geschwindigkeit (ich dachte an px/timerdurchlauf) der figur und möchte nun die neuen koordinaten berechnen. kann mir vielleicht jemand von euch sagen, wie ich das machen kann?? :( ich weiß leider überhaupt nicht, wie ich meine versuche weiterführen kann, bzw. ob das überhaupt der richtige ansatz ist. hier hattte ich mal was versucht:
Code:
im anhang befindet sich zwei screenshots von dem spiel, der zweite mit winkel"erklärung" (im code wäre das die variable newangle). das rote ding da mit dem kreis soll ein mensch von oben sein... :oops:
var newangle,m,a,dX,dY,alpha,sinA:Double;
begin newangle:=MyChar.Angle; if IsKeyDown('D') then begin newangle:=MyChar.Angle-3; end; if IsKeyDown('A') then begin newangle:=MyChar.Angle+3; end; if newangle>360 then newangle:=newangle-360 else if newangle<0 then newangle:=newangle+360; if IsKeyDown('W') AND (newangle<>90) AND (newangle<>270) then begin m:=tan(DegToRad(newangle)); a:=MyChar.Speed; alpha:=180-90-newangle; sinA:=sin(alpha); dX:=sinA*a; dY:=dX*m; dX:=dX*-1; end; // jetzt noch die spielfigur an die neuen koordinaten verfrachten... soo ich hoffe ich hab nix vergessen. ich wär euch richtig dankbar, wenn ihr mir hier helfen könntet! vielen dank schonmal... LG Myribo =) |
Re: Bewegung ins Spiel bringen...
Herzlich willkommen in der Delphi-PRAXiS, Myribo.
Wenn Speed in pixel/sec angegeben wird, dann sollte dein Code wohl so aussehen:
Delphi-Quellcode:
Getippt und nicht getestet.
const
DEG_TURN = 3; var newAngle, dist, dX, dY: Double; begin newAngle := MyChar.Angle; if IsKeyDown('D') then newAngle := newAngle - DEG_TURN; if IsKeyDown('A') then newAngle := newAngle + DEG_TURN; newangle := (newAngle + 360) mod 360; if IsKeyDown('W') then begin dist := MyChar.Speed * elapsedTime; // konstant? dX := dist * cos(DegToRad(newAngle)); dY := dist * sin(DegToRad(newAngle)); // jetzt noch die spielfigur an die neuen koordinaten verfrachten... // ... end; MyChar.Angle := newAngle; end; Freundliche Grüße vom marabu |
Re: Bewegung ins Spiel bringen...
:-D genial!!
funktioniert prima.... super! besten dank!! glg Myri :love: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz