| Autor |
Beitrag |
elle333
      
Beiträge: 19
|
Verfasst: 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
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 public 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
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 19
|
Verfasst: Sa 09.10.10 16:18
ok danke habs hinbekommen
die bewegungen stocken zwar ein bisschen aber es geht
|
|
elle333 
      
Beiträge: 19
|
Verfasst: 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.
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 public 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
|
Verfasst: Sa 09.10.10 17:37
Wie so zweiter Timer? Du brauchst doch nur die x-Komponente des Bewegungsvektors negieren.
|
|
elle333 
      
Beiträge: 19
|
Verfasst: Sa 09.10.10 17:39
aber wo definiere ich dann die rückwärtsbewegung
Delphi-Quelltext 1: 2: 3: 4: 5:
| begin ImAuto.Left := ImAuto.Left + x; If ImAuto.Left < -300 then ImAuto.Left := clientwidth; end; |
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 19
|
Verfasst: Sa 09.10.10 17:51
jaenicke hat folgendes geschrieben : | 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 Narses: Beiträge zusammengefasst---
Edit:
ok ich bin dumm
alles klar
problem behoben
danke für eure geduld
|
|
|