AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

solange taste gedrücktt tue! ???

Ein Thema von flori-da · begonnen am 22. Jan 2007 · letzter Beitrag vom 23. Jan 2007
Antwort Antwort
Seite 3 von 4     123 4      
flori-da

Registriert seit: 10. Jan 2007
30 Beiträge
 
Delphi 3 Professional
 
#21

Re: solange taste gedrücktt tue! ???

  Alt 22. Jan 2007, 20:12
Also so langsam versteh ich gar nix mehr..aber egal

Mein Programm sieht jetzt folgendermaßen aus:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if GetAsyncKeyState(vk_left) <0 then
     walk(1);
  if GetAsyncKeyState(vk_right)<0 then
     walk(3);
end;
was für mich auch eigentlich logisch ist und eigentlich funktionieren müsste.
Ich verstehe es so:
die procedure checkt (jetzt alle 100 ms)ob eine pfeiltaste (links oder rechts) gerade gedrückt wird und wenn ja , dasnn soll sich die figur entsprechend bewegen.
Das ende vom lied ist, das die scheiß procedure gar nix macht!!
das heißt: schon wieder ein logischer fehler in meinen / unserem plan
enabled ist auch auf true gesetzt.
gruß der flo
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#22

Re: solange taste gedrücktt tue! ???

  Alt 22. Jan 2007, 20:23
Versuche mal meinen Code, er kommt auch ohne Timer aus.
Delphi-Quellcode:
var
  ImagePos: integer;
const
  verschieben= 5;//je größer um so schneller verschieben

procedure TForm1.FormCreate(Sender: TObject);
begin
  ImagePos:= Image1.Left;
  Image1.Parent.DoubleBuffered:= true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    vk_Left:
      begin
      dec(ImagePos, verschieben);
      Image1.Left:= ImagePos;
      end;
    VK_RIGHT:
      begin
      inc(ImagePos, verschieben);
      Image1.Left:= ImagePos;
      end;
  end;
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: solange taste gedrücktt tue! ???

  Alt 22. Jan 2007, 20:28
Zitat von bitsetter:
Versuche mal meinen Code, er kommt auch ohne Timer aus.
Der dürfte nicht ganz den gewünschten Erfolg bringen, da die Tastatur nach dem ersten drücken einer Taste (wenn sie gehalten wird), erstmal eine Weile gar nix sendet und dann am Stück.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
flori-da

Registriert seit: 10. Jan 2007
30 Beiträge
 
Delphi 3 Professional
 
#24

Re: solange taste gedrücktt tue! ???

  Alt 22. Jan 2007, 20:31
die letzte version klapt auf jedenfall ganz gut.
simpel aber wirksam!
Ich weiß zwar noch nicht , ich damit auskommen (weil das alles noch viel komlepxer werden soll;
aber für den anfang reicht es aus! außerdem habe ich für heute genug von dem programm!!
Also vielen Dank für euere Hilf!

Bye der flo
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: solange taste gedrücktt tue! ???

  Alt 22. Jan 2007, 21:47
Außerdem hat die oben ohne Timer auskommende Funktion noch einen Nachteil: Kommt später mal Oben und Unten dazu, kann man nur in eine Richtung gleichzeitig, also zB entweder nach links, oder nach oben. Bei der Timerversion ist das nicht so.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
1ceman

Registriert seit: 16. Dez 2005
Ort: Odenthal
134 Beiträge
 
Delphi 6 Personal
 
#26

Re: solange taste gedrücktt tue! ???

  Alt 22. Jan 2007, 23:43
Zitat von inherited:
Zitat von 1ceman:
mach doch einfach 2 timer, einen für links und einen für rechts.
dann überprüfst du im FormKeyDown ob die linke oder die rechte pfeiltaste gedrückt wird und startest
dann den timer für links oder rechts.
Und was soll das bringen?
äh das die Figuren sich bewegen???
ob ich nun im Timer prüfe welche taste gedrückt wurde oder vorher ist doch eigentlich egal.
So hat man halt für jede bewegung nen eigenen timer und führt wenn die linke pfeiltaste
gedrückt wurde den timer für die bewegung nach links aus, bis die taste losgelassen wird. Bei
rechter pfeiltaste entsprechend den timer für den rechts-bewegung.
oder hab ich das problem falsch verstanden????
Roman
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#27

Re: solange taste gedrücktt tue! ???

  Alt 23. Jan 2007, 01:19
Inherited hatte recht, wenn man 2 Tasten bei meinem Code drückte, konnte man das Image nur in einer Richtung bewegen. Hier das ganze mit 1 Timer.
Delphi-Quellcode:
var
  ImagePosX, ImagePosY: integer;
const
  verschieben= 5;//je größer um so schneller verschieben

procedure TForm1.FormCreate(Sender: TObject);
begin
  ImagePosX:= Image1.Left;
  ImagePosY:= Image1.Top;
  Image1.Parent.DoubleBuffered:= true;
  Timer1.Interval:= 100;
  Timer1.Enabled:= false;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Timer1.Enabled= false then
  Timer1.Enabled:= true;
  //Timer1Timer(Sender);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if GetAsyncKeyState(VK_LEFT)< 0 then
  begin
  dec(ImagePosX, verschieben);
  Image1.Left:= ImagePosX;
  end;
    if GetAsyncKeyState(VK_RIGHT)< 0 then
    begin
    inc(ImagePosX, verschieben);
    Image1.Left:= ImagePosX;
    end;
      if GetAsyncKeyState(VK_UP)< 0 then
      begin
      dec(ImagePosY, verschieben);
      Image1.Top:= ImagePosY;
      end;
        if GetAsyncKeyState(VK_DOWN)< 0 then
        begin
        inc(ImagePosY, verschieben);
        Image1.Top:= ImagePosY;
        end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Timer1.Enabled:= false;
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
flori-da

Registriert seit: 10. Jan 2007
30 Beiträge
 
Delphi 3 Professional
 
#28

Re: solange taste gedrücktt tue! ???

  Alt 23. Jan 2007, 16:41
moin leute

also ich hab heut den vorschlag von bitsetter in die tat umgesetzt.
Und es funktioniert nicht.
Da hab ich mal mit F7 immer nur die einzelnen Anweisungen durchlaufen lassen und hab festgestellt, dass der Timer bei einen Tastendruck nicht angeht.Wenn ich eine Pfeiltaste drücke meldet sich die procedure keydown aber der Timer nicht. genausowenig die procedure KeyUp. Was ist da nur los?

gruß der flo
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#29

Re: solange taste gedrücktt tue! ???

  Alt 23. Jan 2007, 17:07
Lass den Timer immer laufen!
Also nicht erst starten o.s.ä.

und dann im Intervall überprüfen ob sich eine Taste gedrückt hat.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#30

Re: solange taste gedrücktt tue! ???

  Alt 23. Jan 2007, 17:21
Genau. Das mit dem OnKeyDown und OnKeyUp ist sinnlos, da im Timer ja eh überprüft wird, ob die Taste gedrückt ist.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz