Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Jump and Run! need help ! (https://www.delphipraxis.net/81531-jump-run-need-help.html)

Bartuc 28. Nov 2006 20:10


Jump and Run! need help !
 
Hi zusammen

Wollte ein Jump and Run Spiel programmieren.

Geht soweit gut voran, allerdings hab ich probleme bei der Steuerung.

Habe ein Bild eingefügt das sich bewegt wenn man die Pfeiltasten drückt. (links/rechts)
Nun will ich das aber noch zum "Springen" bringen durch drücken der Leertaste.

Wie klappt das genau. Am besten ohne großen hänger.
Hab mal was versucht. Das Bild wird zwar weiteroben angezeigt aber es kommt nicht mehr runter.

Ich hoffe ihr könnt mir helfen

MFG

jakobwenzel 28. Nov 2006 20:12

Re: Jump and Run! need help !
 
Der Fehler liegt in Z. 123! :mrgreen:

Jetz ma im ernst: Ohne COde kann dir niemand helfen.

Bartuc 28. Nov 2006 21:07

Re: Jump and Run! need help !
 
also das ist ein auszug des quelltextes

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case Key of
    VK_LEFT: begin
      ImgCartman.Left := ImgCartman.Left - 10;
      Key := 0;
    end;

    VK_Right: begin
      ImgCartman.left := ImgCartman.Left + 10;
      Key := 0;
    end;

    VK_Space: begin
      ImgCartman.Top := ImgCartman.top - 50;
      Key := 0;
    end;
end;
Möchte jetzt nur das zum "Springen" bringen wenn man auf die Leertaste drückt

[edit=r_kerber]Delphi-Tags eingefügt. Mfg, r_kerber[/edit]

Nicodius 28. Nov 2006 21:15

Re: Jump and Run! need help !
 
naja ;) wenn du ne schöne sprunganimation haben willst musste entweder eine schleife machen die für das rauf und dann wieder runterkommen da is bzw einen timer schalten wo du im gewissen sekundentakt das bild je nachdem auf welcher höhe es sich befindet nach oben oder unten steuert


obwohl das so natürlich kein jum and run sondern ein press and move the picture programm is ;)


lg Nico

Relicted 28. Nov 2006 21:42

Re: Jump and Run! need help !
 
juhu ein southpark jump and run ! :D

Sunlight7 28. Nov 2006 23:11

Re: Jump and Run! need help !
 
Hallo Bartuc, herzlich Willkommen in der DP! :cheers:

Suchst Du jetzt Leute, die mit Dir ein Spiel programmieren wollen, oder Hilfe wie Du es programmierst?
Bei zweiterem wäre die Sparte die Falsche.

Wenn Du Quellcodes postest, dann benutze bitte die Delphi-Tags, damit man das besser lesen kann.
Grüßle! :dp:

PS: Für echt flüssige Sprünge solltest Du wohl eher nicht eine Image auf dem Formular verschieben. :wink:

Bartuc 29. Nov 2006 05:58

Re: Jump and Run! need help !
 
Eigentlich brauche ich Hilfe um das Spiel zu programmieren.

Muss das für die Schule machen.
Hab auch noch nicht so viel Delphikenntnisse

Welche Möglickeiten gibt es denn sonst noch um "Figuren" springen zu lassen?

DP-Maintenance 29. Nov 2006 06:04

DP-Maintenance
 
Dieses Thema wurde von "r_kerber" von "Projekte" nach "Multimedia" verschoben.
Du suchst ja keine Mitstreiter in einem Projekt sondern hats eine Frage zu Multimedia (im weitesten Sinne) Deshalb verswchiebe ich mal.

Nicodius 29. Nov 2006 06:17

Re: Jump and Run! need help !
 
ich darf dir wärmstens "Delphi for Kids" von Hans-Georg Schumann ans herz legen - von der Reihe gibts dann auch eine für Game-Programming, 3D Programmierung usw(wobei das game-Programming sogar so ein 2D jump and Run in sehr einfacher Form beinhalted)

das Buch ist nicht teuer und gibts in jedem guten Buchladen(glaub 15-21€musst du rechnen)


übrigens glaube ich dir nicht dass dein Professor dir ein Jump and Run als hausaufgabe gibt, weil die programmierung eines solchen sicher zu lange dauert für die üblichen wochen, monats abgaben ;)

lg Nico

Sunlight7 29. Nov 2006 06:30

Re: Jump and Run! need help !
 
Zitat:

Zitat von Bartuc
Welche Möglickeiten gibt es denn sonst noch um "Figuren" springen zu lassen?

Für den Anfang wirds reichen, wenn Du Dich mit Hier im Forum suchenTCanvas und Hier im Forum suchenTBitmap beschäftigst.

Relicted 29. Nov 2006 19:09

Re: Jump and Run! need help !
 
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

Bartuc 29. Nov 2006 20:26

Re: Jump and Run! need help !
 
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?

Relicted 29. Nov 2006 21:13

Re: Jump and Run! need help !
 
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

Bartuc 30. Nov 2006 21:22

Re: Jump and Run! need help !
 
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?

uwewo 1. Dez 2006 07:08

Re: Jump and Run! need help !
 
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

panzerfischer 1. Dez 2006 09:35

Re: Jump and Run! need help !
 
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

Bartuc 1. Dez 2006 11:58

Re: Jump and Run! need help !
 
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. :wink:

Cöster 1. Dez 2006 15:19

Re: Jump and Run! need help !
 
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).

Bartuc 1. Dez 2006 20:01

Re: Jump and Run! need help !
 
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).

Cöster 1. Dez 2006 20:33

Re: Jump and Run! need help !
 
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.

Bartuc 2. Dez 2006 01:41

Re: Jump and Run! need help !
 
Klappt bei mir nicht so ganz.....
wenn ich starten will kommt dieser Fehler:

Delphi-Quellcode:
TFigur = class
[Error] Unit1.pas(51): ',' or ':' expected but '=' found
was heißt das genau?
oder muss man den Teil an einer bestimmten stelle einfügen?

Cöster 2. Dez 2006 08:09

Re: Jump and Run! need help !
 
Deswegen hab ich ja zu den beiden Tutorials verlinkt. In den Type-Abschnitt kommt die Typ-Deklaration.

Bartuc 2. Dez 2006 11:33

Re: Jump and Run! need help !
 
Habs mir jetzt nochmal durchgelesen.Verstehen tue ich aber nicht viel :(

hab ne neue Unit für die Klasse erstellt.
aber beim starten tritt diesmal dieser Fehler auf

Zitat:

function TUnit2.IstAufDemBoden(const map: TCanvas): Boolean;

[Error] Unit2.pas(23): Undeclared identifier: 'TCanvas'
Ich weiß nicht was ich falsch gemacht habe.

Cöster 2. Dez 2006 12:08

Re: Jump and Run! need help !
 
Ja, wenn so ein Fehler kommt, hilft immer: Mit dem Cursor in das Wort gehen (also TCanvas), F1 drücken. Dort liest du dann, in welcher Unit der Typ deklariert ist. In diesem Fall: Graphics. Das musst du dann unter "uses" einbinden.

Bartuc 2. Dez 2006 13:46

Re: Jump and Run! need help !
 
Danke das hat geklappt,

aber jetzt gibts wieder ein problem... eigentlich genauso wie von vorher aber ich weiß nicht was ich jetzt machen soll:

Delphi-Quellcode:
if Key = VK_SPACE then
  if ImgCartman.IstAufDemBoden(ImSchwarzWeiss.Canvas) then
    Imgcartman.YSpeed := -20;
Delphi-Quellcode:
[Error] Unit1.pas(141): Undeclared identifier: 'IstAufDemBoden'
[Error] Unit1.pas(141): Undeclared identifier: 'ImSchwarzWeiss'
[Error] Unit1.pas(141): 'THEN' expected but identifier 'Canvas' found
Muss ich da wieder was bei uses eintragen? "F1" hat mir nicht weiterhelfen können

Cöster 2. Dez 2006 20:01

Re: Jump and Run! need help !
 
Ja, du musst wieder etwas in die Uses-Klausel einfügen. Wenn du einen Typ aus einer anderen Unit verwendest (wie z.B. TCanvas, was in der Unit Graphics deklariert ist), musst du die Unit im Uses-Abschnitt eintragen. Genauso ist das bei Prozeduren und Funktionen. Die Funktion IntToStr ist z.B. in der Unit SysUtils deklariert und implementiert. Wenn du in deinem Code also IntToStr verwendest, musst du in dieser Unit SysUtils unter Uses einbinden.

IstAufDemBoden hast du wahrscheinlich selbst in einer anderen Unit implementiert. Dann musst du in der Aufrufenden Unit die Unit einbinden, in der du IstAufDemBoden deklariert hast.
Dass dir in diesem Fall F1 nicht weiterhilft, ist normal: Über F1 gelangst du in die Delphi-Hilfe. Dort stehen aber natürlich nur Informationen über Klassen, Methoden oder sonstiges, die von Delphi kommen. Über von dir geschriebenen Code kann Delphi ja nichts in seiner Hilfe schreiben.

Mit ImSchwarzWeiss meinte ich nur den Namen des Images, in das du die Schwarz-Weiß-Version der Map laden solltest. Dazu musst du natürlich erstmal ein solches Image auf deinem Formular platzieren und über die Eigenschaft Picture im OI das Bild einfügen. Du kannst dem Image natürlich auch einen anderen Namen geben als "ImSchwarzWeiß".

Bartuc 3. Dez 2006 21:03

Re: Jump and Run! need help !
 
Zitat:

Zitat von Cöster
Die Funktion IntToStr ist z.B. in der Unit SysUtils deklariert und implementiert. Wenn du in deinem Code also IntToStr verwendest, musst du in dieser Unit SysUtils unter Uses einbinden.

IstAufDemBoden hast du wahrscheinlich selbst in einer anderen Unit implementiert. Dann musst du in der Aufrufenden Unit die Unit einbinden, in der du IstAufDemBoden deklariert hast.

SysUtils stand schon unter Uses drin. =(
Woran kanns sonst liegen?

Was meintest du mit "in einer anderen Unit implementiert" ?
bzw "Dann musst du in der Aufrufenden Unit die Unit einbinden"?

Bartuc 4. Dez 2006 18:23

Re: Jump and Run! need help !
 
Delphi-Quellcode:
    if Key = VK_SPACE then begin
  if Unit2.IstAufDemBoden(image1.TCanvas) then begin
    ImgCartman.YSpeed := -20;
end;


Delphi-Quellcode:
[Pascal Error] Unit1.pas(154): E2066 Missing operator or semicolon
[Pascal Error] Unit1.pas(155): E2003 Undeclared identifier: 'YSpeed'
Wieso verlangt der vor der Klammer einen operator oder ein semikolon?
und was hat das mit YSpeed auf sich?

Need help please =(

inherited 4. Dez 2006 19:02

Re: Jump and Run! need help !
 
du hast zwei begin's aber nur ein end ;)

Bartuc 4. Dez 2006 19:57

Re: Jump and Run! need help !
 
das 2. end; hab ich vergessen einzufügen :wink:

aber das scheint irgendwie nicht zu klappen... sonst noch einer eine idee?

Cöster 4. Dez 2006 21:11

Re: Jump and Run! need help !
 
Zitat:

Zitat von Bartuc
SysUtils stand schon unter Uses drin. =(

Das war auch nur ein Beispiel, um zu zeigen, wofür die Uses-Klausel da ist.

Zitat:

Zitat von Bartuc
Was meintest du mit "in einer anderen Unit implementiert" ?

Teilst du dein Projekt auf mehrere Units auf? Dann verteilt sich dein Code auch auf mehrere Units. Mit "Implementierung" bezeichnet man den Teil des Codes, in dem steht, was gemacht werden soll, also alles, was unter dem Schlüsselwort "implementation" steht. Die Implementation einer Methode steht immer in der gleichen Unit wie ihre Deklaration. "IstAufDemBoden hast du wahrscheinlich selbst in einer anderen Unit implementiert" bedeutet "Der Code der Prozedur IstAufDemBoden steht wahrscheinlich nicht in der Haupt-Unit, sondern in einer anderen Unit".

Zitat:

Zitat von Bartuc
bzw "Dann musst du in der Aufrufenden Unit die Unit einbinden"?

Die "aufrufende Unit" ist die Unit, in der die Funktion IstAufDemBoden aufgerufen wird. Units werden "eingebunden", indem ihr Name in der Uses-Klausel eingetragen wird.

Bartuc 5. Dez 2006 12:28

Re: Jump and Run! need help !
 
Irgendwie blick ich da nicht so ganz durch mit den mehreren Units.

Habs mal mit nem Timer versucht.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if imgcartman.Top = imgcartman.Top -100 then begin
timer1.Enabled := false;
timer2.enabled := true;
end
else begin
  repeat
  Imgcartman.Top := Imgcartman.left -5;
until (imgcartman.Top = imgcartman.Top -100);
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if imgcartman.Top = imgcartman.top +100 then begin
timer2.enabled := false;
end
else begin
repeat
  imgcartman.Top := imgcartman.Top +5;
until (imgcartman.Top = imgcartman.Top +100);
end;
end;
Timer1 wird durch die Leertaste gestartet.

Delphi-Quellcode:
    VK_SPACE: begin
      timer1.enabled := true;
      Key := 0;
      end;
Aber es klappt nicht... wenn ich die leertaste drücke friert das Programm ein.
wo liegt der Fehler? ich finde den nicht.

Cöster 5. Dez 2006 13:52

Re: Jump and Run! need help !
 
Sorry, aber so langsam beginne ich daran zu zweifeln, ob du das wirklich ernst meinst. Wie soll denn eine Zahl gleich sie selbst + 100 sein (imgCartman.Top = imgCartman.Top + 100)? Keine der Bedingungen kann je erfüllt werden. All deine Repeat-Until-Schleifen sind Endlos-Schleifen. Die Verknüpfung von Left und Top (Zeile 9) scheint mir auch total sinnlos.

Bartuc 5. Dez 2006 14:01

Re: Jump and Run! need help !
 
ok hab ich gerade auch gesehen :?

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if imgcartman.Top = -100 then begin
timer2.enabled := true;
timer1.Enabled := false;
end
else begin
  repeat
  Imgcartman.Top := Imgcartman.top -5;
until (imgcartman.Top = -100);
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if imgcartman.Top = 100 then begin
timer2.enabled := false;
end
else begin
repeat
  imgcartman.Top := imgcartman.Top +5;
until (imgcartman.Top = 100);
end;
end;
so besser? aber es friert immernoch ein =(

Cöster 5. Dez 2006 14:17

Re: Jump and Run! need help !
 
Welchen Wert besitzt imgCartman.Top denn, bevor der Timer gestartet wird? Ist er größer als -101? Ist er durch 5 teilbar? Statt mit '=' zu vergleichen, könntest du auch mal '<', '>', '<=' oder '>=' nehmen.

inherited 5. Dez 2006 14:59

Re: Jump and Run! need help !
 
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if imgcartman.Top = -100 then
  begin
    timer2.enabled := true;
    timer1.Enabled := false;
  end
  else
  begin
    repeat
      Imgcartman.Top := Imgcartman.top -5;
    until (imgcartman.Top = -100);
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if imgcartman.Top >= 100 then
  begin
    imgcartman.Top:=100;
    timer2.enabled := false;
  end
  else
  begin
    repeat
      imgcartman.Top := imgcartman.Top +5;
    until (imgcartman.Top = 100);
  end;
end;
Schau mal, so ist es gelich viel lesbarer und tut auch garnicht mehr in den Augen weh ;)
Ich glaube dein Problem ist, dass du hier von ideen und Möglichkeiten überhäuft wirst und du das alles garnicht so schnell verstehen kannst. So wie oben kann es nicht Funktionieren.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if imgcartman.Top <= -100 then
  begin
    timer2.enabled := true;
    timer1.Enabled := false;
  end
  else
  begin
    Imgcartman.Top := Imgcartman.top -5;
  end;
end;


procedure TForm1.Timer2Timer(Sender: TObject);
begin
  if imgcartman.Top >= 100 then
  begin
    imgcartman.Top:=100;
    timer2.enabled := false;
  end
  else
  begin
    imgcartman.Top := imgcartman.Top +5;
  end;
end;
SO ist es besser. Dafür, dass der Code mehrmals ausgeführt wird, sind die TImer ja schon da. Dann brauchst du auch keine repeat..untils mehr. Außeerdem kann es ja sein dass Top deines Images zb 2 ist, dann kommt der bei schrittweisem decrimentieren von 5 niemals auf 100.

Bartuc 5. Dez 2006 16:30

Re: Jump and Run! need help !
 
hm.... bei mir bleibt das bild in der Luft stehen.
hab aber bissl rumprobiert und jetzt "springt" mein bild.

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if imgcartman.Top = 234 then begin
timer2.enabled := true;
timer1.Enabled := false;
end
else begin
  Imgcartman.Top := Imgcartman.top -2;
end;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if imgcartman.Top = 424 then begin
timer2.enabled := false;
end
else begin
  imgcartman.Top := imgcartman.Top +2;
end;
end;
Das blöde ist das der jetzt immer bis auf top 424 fällt und nicht andere shapes oder so beachtet.
jemand eine idee?

Cöster 5. Dez 2006 16:52

Re: Jump and Run! need help !
 
Zitat:

Zitat von Bartuc
Das blöde ist das der jetzt immer bis auf top 424 fällt und nicht andere shapes oder so beachtet.
jemand eine idee?

Guck mal hier

Bartuc 5. Dez 2006 18:23

Re: Jump and Run! need help !
 
cool danke..... klappt schon fast....

es gibt nur noch 2 probleme :angel2:

das 1. ist...

wenn ich mit dem bild von der Seite an das Shape komme läuft mein bild trotzdem noch hinein.
wie kann ich der kollisionsabfrage sagen das das bild dann vor dem shape stehen bleibt?

das 2. ist...
wenn ich auf einer höheren ebene bin (shape) und ich gehe in richtung "abgrund", schwebt das bild weiter auf der selben höhe wie am shape. Aber es sollte ja wieder runter fallen bis es auf ein anderes shape kommt. Wie geht das?

momentan siehts so aus:

Delphi-Quellcode:
procedure TForm1.Timer3Timer(Sender: TObject);
begin
if IsCollision (Imgcartman.BoundsRect, S_2.BoundsRect) then
  timer2.enabled := false ;
  end;
procedure TForm1.Timer4Timer(Sender: TObject);
begin
if IsCollision (Imgcartman.BoundsRect, S_1.BoundsRect) then
  timer2.enabled := false
  end;
Vielleicht hat jemand noch eine idee hat wie es einfacher geht. z.b. mit nur einem timer die abfrage machen.

Danke schonmal =)

Cöster 5. Dez 2006 18:34

Re: Jump and Run! need help !
 
Zitat:

Zitat von Bartuc
wenn ich mit dem bild von der Seite an das Shape komme läuft mein bild trotzdem noch hinein.
wie kann ich der kollisionsabfrage sagen das das bild dann vor dem shape stehen bleibt?

Da müsste man den Code sehen.

Zitat:

Zitat von Bartuc
wenn ich auf einer höheren ebene bin (shape) und ich gehe in richtung "abgrund", schwebt das bild weiter auf der selben höhe wie am shape. Aber es sollte ja wieder runter fallen bis es auf ein anderes shape kommt. Wie geht das?

Delphi-Quellcode:
else
  Timer2.Enabled := True;
Zitat:

Zitat von Bartuc
Vielleicht hat jemand noch eine idee hat wie es einfacher geht. z.b. mit nur einem timer die abfrage machen.

Die beiden Bedingungen mit or verknüpfen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 Uhr.
Seite 1 von 2  1 2      

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