Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - images springen lassen


Delphi-Zone - Fr 24.09.10 17:22
Titel: images springen lassen
Hallo,

Ich hab ein kleines 2d game gemacht,

Ich wollte das meine figur (images)
springt.

aber wie mach ich das? es kann bisher nach lings und rechts laufen.

und wenn ich es versuche hochspringen zu lassen, denn bleibt es oben.

bitte um hilfe,

gruß tom


jaenicke - Fr 24.09.10 17:40

Du hast in Zeile 2199 vergessen die Figur wieder nach unten zu bewegen...


Delphi-Zone - Fr 24.09.10 17:45

1. hahahah witzig 2199^^
2. ja, wie beweg ich den nach unten? mit welchem befehl^?


Gausi - Fr 24.09.10 17:47

Um das Ding hochzukriegen, hast du sicherlich irgendwo ein image1.Top := image1.Top - 1; im Code. Wenn du das Bild wieder unten haben willst, würde sich doch eine der anderen drei Grundrechenarten anbieten, oder? ;-)


Delphi-Zone - Fr 24.09.10 17:48

-.- wenn ich ihn aber oben hab und denn wieder +1 anstatt -1 nehme bleibt er unten und bewegt sich garnicht


Gausi - Fr 24.09.10 17:51

Achso... ;-)

Dann würde ich das mit einem Timer machen. Beim Hochspringen aktivierst du den, beim runterspringen wird der wieder abgeschaltet (Eigenschaft Active). Und im OnTimer-Event setzt du das Bild wieder runter.


Delphi-Zone - Fr 24.09.10 17:57

ähmheißt das active control?


Gausi - Fr 24.09.10 18:00

Upps, mein Fehler. :oops:

Ich meinte enabled. Das ist eine Eigenschaft der TTimer-Komponente, die du dafür auf die Form packen musst.


Delphi-Zone - Fr 24.09.10 18:07

also enabled ist jetzt auf true, und jetzt was muss ich schreiben.

So also wenn man jetzt pfeiltaste oben drückt,ngeht er -50 , (nach oben)

Und bleibt da, ich muss jetzt doppelklick auf Ttimer machen, und den öffnet sich ja die prozedur.

so weit bin ich. wie gehts jetzt weiter?


gruß tom


Gausi - Fr 24.09.10 18:13

Da gehört dann entsprechend ein + 50 rein. ,-)

Zur Erklärung: Wenn der Timer "enabled" ist, wird immer nach "Interval"-vielen Millisekunden der Code ausgeführt, der durch das OnTimer-Event festgelegt wird. Wenn man etwas nur einmal ausgeführt haben will, dann setzt man im OnTimer-Event die Eigenschaft Enabled wieder auf false.


Delphi-Zone - Fr 24.09.10 18:28

Hmmmmm, irgendwie stimmt da noch was nicht. er bleibt immernoch oben.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
unit feld1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image7: TImage;
    Image8: TImage;
    Image6: TImage;
    Timer1: TTimer;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_LEFT: begin
      Image7.Left := Image7.Left - 5;
      image8.left := image7.Left - 5;
      image7.Visible := false;
      image8.Visible := true;
      Key := 0;
    end;
    VK_RIGHT: begin
      Image7.Left := Image7.Left + 5;
      image8.left := image7.Left + 5;
       image7.Visible := true;
      image8.Visible := false;
      Key := 0;
     end;
     VK_UP: begin
      image7.Top := image7.Top -50;
      image8.Top := image8.Top -50;
    end;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
image7.Top := image7.Top +50;
image8.Top := image8.Top +50;
end;

end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


platzwart - Fr 24.09.10 18:41


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
...
VK_UP: begin
image7.Top := image7.Top -50;
image8.Top := image8.Top -50;
end
VK_DOWN: begin
image7.Top := image7.Top +50;
image8.Top := image8.Top +50;
end

...


?!?


Delphi-Zone - Fr 24.09.10 18:47

ja, hab ich rausgenommen. sry^^

aber das ändert nichts an meinem problem.....


platzwart - Fr 24.09.10 18:55

Warum nicht reingenommen?

In deinem Programm sagst du, was gemacht werden soll, wenn man nach oben/links/rechts drückt. Aber was bei Taste_Runter gemacht werden soll, lässt du weg. Soll der PC raten, was geschehen soll?


Delphi-Zone - Fr 24.09.10 19:04

ja, aber er fällt den nicht von selber runter?!
und das soll er ja.


platzwart - Fr 24.09.10 19:06

Achso, von alleine, sorry.