AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bewegung ins Spiel bringen...

Ein Thema von Myribo · begonnen am 4. Feb 2008 · letzter Beitrag vom 4. Feb 2008
Antwort Antwort
Myribo

Registriert seit: 11. Sep 2007
Ort: Bielefeld
14 Beiträge
 
#1

Bewegung ins Spiel bringen...

  Alt 4. Feb 2008, 18:53
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:
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...
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...


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 =)
Miniaturansicht angehängter Grafiken
spielfigur_mit_winkel_170.jpg   spielfigur_149.jpg  
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Bewegung ins Spiel bringen...

  Alt 4. Feb 2008, 20:23
Herzlich willkommen in der Delphi-PRAXiS, Myribo.

Wenn Speed in pixel/sec angegeben wird, dann sollte dein Code wohl so aussehen:

Delphi-Quellcode:
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;
Getippt und nicht getestet.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Myribo

Registriert seit: 11. Sep 2007
Ort: Bielefeld
14 Beiträge
 
#3

Re: Bewegung ins Spiel bringen...

  Alt 4. Feb 2008, 20:58
genial!!
funktioniert prima....
super! besten dank!!
glg Myri
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz