Autor Beitrag
elle333
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 09.10.10 15:36 
Ich hab folgendes Problem:
Ich will ein Programm machen, wo es ein Auto gibt, dass vorwärts fährt, wenn man auf einen Knopf drückt und stopt wenn man auf einen knopf drückt.
Aber ich weiss nicht wie man die Geschwindigkeit reguliert.
Im Informatikunterricht haben wir das mir einem Timer gemacht.

Danke im Vorraus

ausblenden volle Höhe 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:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
unit auto;

interface

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

type
  TAuto1 = class(TForm)
    ImAuto: TImage;
    Timer1: TTimer;
    BuG2: TButton;
    BuG1: TButton;
    BuG3: TButton;
    BuG4: TButton;
    BuRueck: TButton;
    BuFahr: TImage;
    BuStop: TImage;
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaRueckMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Timer1Timer(Sender: TObject);
    procedure BuStopClick(Sender: TObject);
    procedure BuG2Click(Sender: TObject);
    procedure BuFahrClick(Sender: TObject);

    procedure BuG1Click(Sender: TObject);
    procedure BuG3Click(Sender: TObject);
    procedure BuG4Click(Sender: TObject);
    procedure BuRueckClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    v: Integer;
  end;

var
  Auto1: TAuto1;

implementation

{$R *.dfm}

procedure TAuto1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 ImAuto.Left := ImAuto.Left + 0;
 If ImAuto.Left > clientwidth
 then ImAuto.Left := -ImAuto.Width + 0;

end;

procedure TAuto1.PaRueckMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 ImAuto.Left := ImAuto.Left + -2;
 If ImAuto.Left < 0
 then ImAuto.Left := -ImAuto.Width;
end;

procedure TAuto1.Timer1Timer(Sender: TObject);
begin
 ImAuto.Left := ImAuto.Left + 3;
 If ImAuto.Left > clientwidth
 then ImAuto.Left := -ImAuto.Width + 2;
end;

procedure TAuto1.BuStopClick(Sender: TObject);
begin
Timer1.Enabled := False;
end;

procedure TAuto1.BuG2Click(Sender: TObject);
begin
Timer1.Enabled := True;
end;

procedure TAuto1.BuFahrClick(Sender: TObject);
begin
Timer1.Enabled := True;
end;


procedure TAuto1.BuG1Click(Sender: TObject);
begin
Timer1.Enabled := True;
end;

procedure TAuto1.BuG3Click(Sender: TObject);
begin
Timer1.Enabled := True;
end;

procedure TAuto1.BuG4Click(Sender: TObject);
begin
Timer1.Enabled := True;
end;

procedure TAuto1.BuRueckClick(Sender: TObject);
begin
Timer1.Enabled := True;
v := ImAuto.Left + 10

end;

end.


Am ende hab ich ein bisschen rumprobiert also nicht wundern


Zuletzt bearbeitet von elle333 am Sa 09.10.10 17:58, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 09.10.10 15:51 
Dann fangen wir mal ganz vorne an:
Was macht denn eine andere Geschwindigkeit aus? Dass du innerhalb einer bestimmten Zeiteinheit eine kürzere oder längere Strecke zurücklegst oder dieselbe Strecke in weniger oder mehr Zeit.

So, in deinem Programm gehst du im Timer immer alle X Millisekunden (das eingestellte Intervall eben) 3 Pixel nach rechts. Fällt dir etwas auf? ;-)

Für diesen Beitrag haben gedankt: elle333
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 09.10.10 16:18 
ok danke habs hinbekommen
die bewegungen stocken zwar ein bisschen aber es geht
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 09.10.10 17:15 
ok ich wollte einen rückwärtsgang einbauen und hab dafür einen 2ten timer eingebaut, da sonst die bewegung pro knopfdruck ja nur einmal ausgeführt wird.
Es funktioniert eiglt alles perfekt, bis ich den rückwärtsgang benutze.
Dann übernimmt timer 2 und dann fährt das auto nurnoch rückwärts.
man kann nurnoch die rückwärtsgeschwindigkeit regulieren.
anhalten geht nicht mehr.

ausblenden volle Höhe 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:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
unit auto;

interface

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

type
  TAuto1 = class(TForm)
    ImAuto: TImage;
    Timer1: TTimer;
    BuG2: TButton;
    BuG1: TButton;
    BuG3: TButton;
    BuG4: TButton;
    BuRueck: TButton;
    BuFahr: TImage;
    BuStop: TImage;
    Image1: TImage;
    Timer2: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure BuStopClick(Sender: TObject);
    procedure BuG2Click(Sender: TObject);
    procedure BuFahrClick(Sender: TObject);

    procedure BuG1Click(Sender: TObject);
    procedure BuG3Click(Sender: TObject);
    procedure BuG4Click(Sender: TObject);
    procedure BuRueckClick(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    v: Integer;
    x: Integer;
  end;

var
  Auto1: TAuto1;

implementation

{$R *.dfm}

procedure TAuto1.Timer1Timer(Sender: TObject);
begin
 ImAuto.Left := ImAuto.Left + v;
 If ImAuto.Left > clientwidth
 then ImAuto.Left := -ImAuto.Width + 1;
end;

procedure TAuto1.BuStopClick(Sender: TObject);
begin
Timer1.Enabled := False;
end;

procedure TAuto1.BuG2Click(Sender: TObject);
begin
v := 4
end;

procedure TAuto1.BuFahrClick(Sender: TObject);
begin
Timer1.Enabled := True;
end;


procedure TAuto1.BuG1Click(Sender: TObject);
begin
Timer1.Enabled := True;
v := 1
end;

procedure TAuto1.BuG3Click(Sender: TObject);
begin
v :=  8
end;

procedure TAuto1.BuG4Click(Sender: TObject);
begin
v :=  12
end;

procedure TAuto1.BuRueckClick(Sender: TObject);
begin
x := -2
end;

procedure TAuto1.Timer2Timer(Sender: TObject);
begin
 ImAuto.Left := ImAuto.Left + x;
 If ImAuto.Left < -300
 then ImAuto.Left := clientwidth;
end;

end.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.10.10 17:37 
Wie so zweiter Timer? Du brauchst doch nur die x-Komponente des Bewegungsvektors negieren.
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 09.10.10 17:39 
aber wo definiere ich dann die rückwärtsbewegung
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
begin
 ImAuto.Left := ImAuto.Left + x;
 If ImAuto.Left < -300
 then ImAuto.Left := clientwidth;
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 09.10.10 17:49 
Also, fangen wir mal an mit Grundschulmathematik. ;-)

Um vorwärts zu fahren zählst du drei Pixel zum Wert links hinzu. Was machst du dann wohl, wenn du rückwärts fahren willst?

Heißt: Du musst X auf den entsprechenden Wert setzen. 0 für keine Bewegung, +3 für vorwärts usw.
elle333 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 09.10.10 17:51 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Also, fangen wir mal an mit Grundschulmathematik. ;-)

Um vorwärts zu fahren zählst du drei Pixel zum Wert links hinzu. Was machst du dann wohl, wenn du rückwärts fahren willst?

Heißt: Du musst X auf den entsprechenden Wert setzen. 0 für keine Bewegung, +3 für vorwärts usw.

schon klar ;)
aber leider kommt dann das auto nicht mehr auf der anderen seite wieder rein

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Edit:
ok ich bin dumm
alles klar
problem behoben
danke für eure geduld