Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - images abfangen


Delphi-Zone - Fr 24.09.10 20:36
Titel: images abfangen
So,

Wie kriege ich es hin das wenn ein images fällt, nicht über mein bildschirm rand fällt, und nicht mehr zu sehen ist.
Also das ein anderes images es aufhält.

Danke im Vorraus!

gruß tom


mkinzler - Fr 24.09.10 20:43

Wie meinst du das?


Delphi-Zone - Fr 24.09.10 20:48

Also...

Ich hab ein image, das ist ein mensch.
und wenn du taste oben ückst, denn springt er hoch.
und denn lass ich ihn mit dem TTimer wieder runterfallen,
aber er stoppt nicht. er fällt bis unter den bildschirmrand, obwohl er er auf dem boden stoppen soll.

Wie verhinder ich das?


mkinzler - Fr 24.09.10 20:50

Im Timer die Position mit der des Bodens abgleichen


Delphi-Zone - Fr 24.09.10 20:56

Wie genau mach ich das?
Ich bin relativ neu beim programmieren.
Wäre cool wenn ihr mir das genauer erklärt.


Gruß tom!


mkinzler - Fr 24.09.10 20:58

Na dein Image hat ja eine Postion (Left = Linker Rand; Top = Oberer Rand).
Du musst also überprüfen ob der untere Rand tiefer als der obere Rand des Bodens ist (Unter Rand = oberer Rand + Höhe)


Delphi-Zone - Fr 24.09.10 21:06

Sry, irgendwie versteh ich das nicht, mit der höhe und so ja, ist ja left und top und -1 und +1 und so.
Aber wie man das andere macht.

Am besten wären befehle.

danke


mkinzler - Fr 24.09.10 21:13

Die Figur soll ja stoppen, wenn die Füpsse den Boden berühren und nicht der Kopf. Deshalb musdst du zu Top die Höhe hinzuzählen um den unteren Rand des Images zu ermitteln.
Und zu den Befehlen: Ist ja ein einfacher Vergleich


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if <Boden>.Top > <Figur>.Top + <Figur>.Height then // Figur noch in der Luft  
begin
    <Figur>.Top := <Figur>.Top + <DeltaY>;
    ...
end
else
    <Figur>.Top := <Boden>.Top - <Figur>.Height;
    ...
end;


Delphi-Zone - Fr 24.09.10 21:32

So, ich hab jetzt das geschrieben und es geht immer noch nicht...

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:
67:
68:
69:
70:
71:
72:
73:
74:
75:
unit feld1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: 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 + 10;
 Image8.Top  := image8.Top + 10;
 if image2.Top > image8.Top + image8.Height then // Figur noch in der Luft
begin
    image8.Top := image8.Top + 520Y;
    ...
end
else
    image8.Top := image2.Top - image9.Height;
    ...
end;
end;

end.


Moderiert von user profile iconMartok: Delphi-Tags gesetzt


Delphi-Zone - Fr 24.09.10 21:51

oh man :( ich krieg das einfach nicht hin


mkinzler - Fr 24.09.10 21:55


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if image2.Top > image8.Top + image8.Height then // Figur noch in der Luft
  begin
    image8.Top := image8.Top + 10;
  end
  else
  begin
    image8.Top := image2.Top - image8.Height;
  end;
end;


Delete - Fr 24.09.10 21:56

user profile iconDelphi-Zone hat folgendes geschrieben Zum zitierten Posting springen:
So, ich hab jetzt das geschrieben und es geht immer noch nicht...

WAS geht nicht? Wir sind keine Hellseher. :roll:


elundril - Fr 24.09.10 23:37

Das ist jetzt schon der 3. Thread wo ich sehe das es dir massiv an Grundlagen mangelt. Da noch keiner dir es empfohlen hat, hol ich das hier mal nach: Bitte lern dir Grundlagen. Dazu gibt es das Delphi-Wikibook [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi] und Christian's Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs.html].

lg elundril


Delphi-Zone - Fr 24.09.10 23:55

ja, ich werde mir das nochmal durch lesen.