AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Jump and Run! need help !

Ein Thema von Bartuc · begonnen am 28. Nov 2006 · letzter Beitrag vom 8. Dez 2006
Antwort Antwort
Seite 2 von 5     12 34     Letzte » 
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: Jump and Run! need help !

  Alt 29. Nov 2006, 19:09
try this... spiel mal bissl mit den sleep werten und den until bedingungen..

Delphi-Quellcode:
var
  nCurrTop : integer;
begin
  with ImgCartman do
  begin
    // Zwischenspeichern der aktuellen Höhe speichern
    nCurrTop := Top;
    // Hochspringen
    repeat
      Top := Top - 10;
      { TODO -oBartuc : hier kannst du noch eventuell nach links oder rechts springen.. einfach mit Left := Left +/- n; }
      // Kurz warten damit's ned zu schnell geht..
      Sleep(15);
      // Rechenzeit frei geben damit das Bild auch flüssig hoch und runter hüpft...
      Application.ProcessMessages;
    until ( Top = nCurrTop - 150 );

    // Und wieder runter fallen...
    repeat
      Top := Top + 10;
      Sleep(15);
      Application.ProcessMessages;
    until ( Top = nCurrTop );
  end;
Gruß
Reli
  Mit Zitat antworten Zitat
Bartuc

Registriert seit: 28. Nov 2006
21 Beiträge
 
#12

Re: Jump and Run! need help !

  Alt 29. Nov 2006, 20:26
Danke schonmal für die Tipps...

Also flüssig springen tut er jetzt schon, aber jetzt gibt es eine andere sache.
Wenn ich nach links oder nach rechts gehe, fängt der auch an zu springen.

Wie kann ich denn den Befehl "springen" auf die Leertaste belegen?
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Jump and Run! need help !

  Alt 29. Nov 2006, 21:13
klar... musst bei dir mit in den case-switch bauen...

Delphi-Quellcode:
    VK_Space: begin
      // hier rein
    end;
hast es doch quasi selbst schon geschrieben wie du es einsetzen musst
die variablendeklaration muss natürlich zwischen procedure und dem begin

gruß
Reli
  Mit Zitat antworten Zitat
Bartuc

Registriert seit: 28. Nov 2006
21 Beiträge
 
#14

Re: Jump and Run! need help !

  Alt 30. Nov 2006, 21:22
Cool danke... klappt soweit....
Nur gibt es jetzt noch ein kleines Problemschen.

wenn ich 2xmal die Leertaste drücke bleibt das bild weiter oben stehen.
gibt es ein befehl der das bild beim sprung immer auf eine "Grundlinie" bringt?
  Mit Zitat antworten Zitat
uwewo

Registriert seit: 14. Jul 2004
Ort: Karlsruhe
479 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Jump and Run! need help !

  Alt 1. Dez 2006, 07:08
Du solltest einfach beim drücken der Taste Space vorher überprüfen, ob das Bild auf der Grundlinie ist. Und nur dann den Code ausführen der es springen lässt.

Uwe
Uwe
  Mit Zitat antworten Zitat
panzerfischer

Registriert seit: 18. Sep 2006
Ort: Ilmenau
33 Beiträge
 
#16

Re: Jump and Run! need help !

  Alt 1. Dez 2006, 09:35
ich denke mal am besten wäre es, wenn du dir einen timer einbaust, der alle 50ms überprüft, ob sich unter deinem bild ein "boden" (z.b. ein anderes bild) befindet, wenn dies nicht der fall sein sollte, fällt cartman runter, bis er an einem bild ist (deswegen timer)

hat den vorteil, das du im fall noch irgendwas anderes berechnen kannst, und nicht in der schleife hängst

würde das evtl so umbauen, das dein bild ne globale variable für die geschwindigkeit hat (in x und y) die dann jedesmal beim durchlauf des timers beachtet wird (bzw. geändert durch schwerkraft)

dann musst du nur beim sprung definieren, das Vy = 20 ist, und das ding fliegt los,
der timer bewegt bei jedem durchlauf das bild um 20 pixel nach oben, und zieht von Vy z.b. 5 ab sodas er in der nächsten schleife nur noch 15 nach oben geht und so weiter bis er irgend wann mal bei 0 pixeln, dann gehts wieder rückwärts. ne kollisions abfrage rein, damit er auch wieder am boden damit aufhört.

beim laufen setzt du einfach Vx auf +/- 10 oder so und wenn die taste losgelassen wird wieder auf 0 zurück (außer du bist in der luft dann fliegt er sogar parabeln, wenn er schief springt).

wenn du das alles hast, hast du quasi ne simple physik engine, die das schon sehr realistisch aussehen lassen

MfG
  Mit Zitat antworten Zitat
Bartuc

Registriert seit: 28. Nov 2006
21 Beiträge
 
#17

Re: Jump and Run! need help !

  Alt 1. Dez 2006, 11:58
Zitat:
würde das evtl so umbauen, das dein bild ne globale variable für die geschwindigkeit hat (in x und y) die dann jedesmal beim durchlauf des timers beachtet wird (bzw. geändert durch schwerkraft)
Was meinst du mit der Geschwindigkeit (in x und y)?
und wo geb ich das an?

Zitat:
dann musst du nur beim sprung definieren, das Vy = 20 ist, und das ding fliegt los,
der timer bewegt bei jedem durchlauf das bild um 20 pixel nach oben, und zieht von Vy z.b. 5 ab sodas er in der nächsten schleife nur noch 15 nach oben geht und so weiter bis er irgend wann mal bei 0 pixeln, dann gehts wieder rückwärts. ne kollisions abfrage rein, damit er auch wieder am boden damit aufhört.
Wofür steht Vy = 20 ?
und wie schreibe ich eine Kollisionsabfrage?


Danke schonmal für die Erläuterungen.

Bin erst paar monate mit Delphi am programmieren und hab noch nicht soviel Ahnung von den Begriffen.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Jump and Run! need help !

  Alt 1. Dez 2006, 15:19
Programmierst du objektorientiert, d.h. du verwendest mehrere Units mit mehreren Klassen? Das erweist sich nämlich fast immer als sehr vorteilhaft. Tutorials dazu findest du auf dsdt.info.

Dann könntest du z.B. eine Klasse TPlayer bauen, in der alle möglichen Instanzen eines Spielers, also einer Figur gespeichert werden. Dort kannst du dann u.a. die Geschwindigkeit in x-Richtung und die Geschwindigkeit in y-Richtung speichern. Das ist das, was Panzerfischer sagte. Mit Vy meint er die Y-Gescheindigkeit, also die senkrechte.

Wenn gesprungen wird, wird die Y-Geschwindigkeit auf einen Wert gesetzt und dann kontinuierlich erniedrigt, bis sie ein anderes Vorzeichen hat und die Figur irgendwann wieder auf dem Boden steht.

Die Abfrage, ob die Figur auf dem Boden steht, kannst du so machen:

Du hast ja sicher eine Map. Diese könntest du zusätzlich in schwarz-weiß speichern (also Monochrome-Bitmap). Schwarz machst du dann alle Pixel, die NICHT betreten werden dürfen und weiß die anderen. Bei jedem Timer-Aufruf prüfst du dann alle Pixel dieses Monochrome-Bitmaps, die sich dort befinden, wo gerade die Füße der Figur direkt drauf stehen. Wenn alle weiß sind, fällt die Figur, sonst muss die Y-Geschwindigkeit auf 0 gesetzt werden (falls sie das noch nicht ist).
  Mit Zitat antworten Zitat
Bartuc

Registriert seit: 28. Nov 2006
21 Beiträge
 
#19

Re: Jump and Run! need help !

  Alt 1. Dez 2006, 20:01
Bei den Tutorials habe ich nur was für 3D gelesen. Möchte es aber 2D machen.

und kannst du mir die Abfrage vielleicht was genauer erklären?

Zitat:
Du hast ja sicher eine Map. Diese könntest du zusätzlich in schwarz-weiß speichern (also Monochrome-Bitmap). Schwarz machst du dann alle Pixel, die NICHT betreten werden dürfen und weiß die anderen. Bei jedem Timer-Aufruf prüfst du dann alle Pixel dieses Monochrome-Bitmaps, die sich dort befinden, wo gerade die Füße der Figur direkt drauf stehen. Wenn alle weiß sind, fällt die Figur, sonst muss die Y-Geschwindigkeit auf 0 gesetzt werden (falls sie das noch nicht ist).
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Jump and Run! need help !

  Alt 1. Dez 2006, 20:33
Ich meinte nicht die Graphik-Tutorials, sondern die zur Objektorientierung. Wenn du damit noch keine Erfahrung hast, kannst du hier oder hier lesen, wie das geht.

So könnte eine Klasse TFigur aussehen:

Delphi-Quellcode:
TFigur = class
private
  FLeft: Integer;
  FTop: Integer;
  FWidth: Integer;
  FHeight: Integer;
  FXSpeed: Integer;
  FYSpeed: Integer;
  FBitmap: TBitmap;
  { ... }
public
  function IstAufDemBoden(const Map: TCanvas): Boolean; // Map ist die Schwarz-Weiß-Karte
  property YSpeed: Integer read FYSpeed write FYSpeed;
  { ... }
end;

implementation

function TFigur.IstAufDemBoden(const Map: TCanvas): Boolean;
var
  Randposition: Integer;
begin
  Result := False;
  for Randposition := 0 to FWidth do
    if Map.Pixels[FLeft + Randposition, FTop + FHeight] = clBlack then
    begin
      Result := True;
      Exit;
    end;
end;


{ ... }
In der Haupt-Unit schreibst du dann im FormKeyDown:

Delphi-Quellcode:
if Key = VK_SPACE then
  if Figur.IstAufDemBoden(ImSchwarzWeiss.Canvas) then
    Figur.YSpeed := -20;
Und im Timer-Aufruf:

Delphi-Quellcode:
if Figur.IstAufDemBoden then
  FYSpeed := 0
else
  FYSpeed := FYSpeed + 3;

Wenn du noch fragen hast, sag Bescheid.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:50 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