AGB  ·  Datenschutz  ·  Impressum  







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

Tastendruck abfrage

Ein Thema von Fabbe · begonnen am 26. Mai 2008 · letzter Beitrag vom 27. Mai 2008
Antwort Antwort
Seite 2 von 3     12 3      
Fabbe

Registriert seit: 26. Mai 2008
11 Beiträge
 
#11

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 17:51
Na ja in dem Timer-Zyklus will ich ja abfragen was für eine Taste gedrückt wird.
Darum gehts ja

Wie setzt man das um? >.<
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 17:56
..nun , dann mußt Du aber Glück haben wenn Du den TimerZyklus erwischt.
Das Tastendruck Event wird immer dann ausgelöst wenn eine Taste gedrückt wird.
Unabhängig ob ein Timer aktiv ist oder nicht.

Du kannst ja hier:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((spielaktiv > 0) or (not(spielaktiv > 0) and (key <> 27))) then exit;
      case key of
       {Escape} VK_ESCAPE: close;
       {left}   VK_LEFT : ;
       {up}     VK_UP : ;
       {right}  VK_RIGHT : ;
       {bottom} VK_DOWN : ;
               end;
end;
bestimmte Marker setzen die im TimerZyklus abgefragt werden.
Sozusage ein TempSpeicher für Tastendrücke.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Fabbe

Registriert seit: 26. Mai 2008
11 Beiträge
 
#13

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 18:06
Also unterbricht das tastendruck-ereignis den TimerZyklus?
Außerdem ist mein Problem, dass trotz keiner gedrückten Taste der Timer2 seine Befehle nichts ausführt, aus welchem Grund auch immer
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 18:07
Oder im Timer GetKeyState abfragen, und das mit dem FormKeyDown weglassen.
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Fabbe

Registriert seit: 26. Mai 2008
11 Beiträge
 
#15

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 18:11
Wie würde dass dann aussehen? Wie gesagt kenn mich nicht grade gut aus
  Mit Zitat antworten Zitat
bluesbear

Registriert seit: 14. Dez 2005
Ort: Hahnstätten
355 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 18:18
Zu GetKeyState könntest du mal in der Delphi-Hilfe nachgucken, und hier im Forum suchen.

Deinen Timer2 solltest du im Debugger durchlaufen, und gucken, wo es hängt.
Z.B. wenn zblock1 = 0 ist, tut sich da gar nichts, aber das ist von hier aus schlecht feststellbar.
Klaus M. Hoffmann
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#17

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 18:26
Noch eine Möglichkeit: einen Typen definieren und bei Tastendruck setzen.
Delphi-Quellcode:
type TTaste = (ttNone,ttLeft,ttRight,ttDown,ttTurn);

...
//privates Feld vom Typ TTaste im Form definieren und mit ttNone initialisieren
...

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((spielaktiv > 0) or (not(spielaktiv > 0) and (key <> 27))) then exit;
      case key of
       {Escape} VK_ESCAPE: close;
       {left}   VK_LEFT : FTaste := ttLeft;
       {up}     VK_UP : FTaste := ttTurn;
       {right}  VK_RIGHT : FTaste := ttRight;
       {bottom} VK_DOWN : FTaste := ttDown;
               end;
end;
Im Timer-Event wertest Du nun FTaste aus und bewegst den Stein entsprechend. Anschließend FTaste wieder auf ttNone setzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Fabbe

Registriert seit: 26. Mai 2008
11 Beiträge
 
#18

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 19:48
Ich glaub ich bin immernoch zu doof dazu
also ich hab nun folgendes:

Delphi-Quellcode:
case zblock1 of

        1:begin {langes}
          with canvas do
            begin
              x:=114;
              x1:=234;
              y:=-10+(runter-1)*30;
              y1:=-10+(runter)*30;
              y2:=21+(runter-1)*30;
              y3:=20+(runter)*30;
              Brush.color:=clblack;
              if runter=1 then else
              rectangle(x,y,x1,y2);
              Brush.color:=clmaroon;
              rectangle(x,y1,x1,y3);
              If Ftaste=ttdown then
              begin
              Brush.color:=clblack;
              y2:=y2+30;
              if runter=1 then else

              rectangle(x,y,x1,y2);
              Brush.color:=clmaroon;
              y1:=y1+30;
              y3:=y3+30;
              rectangle(x,y1,x1,y3);
              Ftaste:=ttnone;
              runter:=runter+1;
              end;
            end;
         end;
und den anderen Block hab ich übernommen:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((spielaktiv > 0) or (not(spielaktiv > 0) and (key <> 27))) then exit;
      case key of
       {Escape} VK_ESCAPE: close;
       {left}   VK_LEFT : FTaste:=ttLeft;
       {up}     VK_UP : FTaste:=ttTurn;
       {right}  VK_RIGHT : FTaste:=ttRight;
       {bottom} VK_DOWN : FTaste:=ttDown;
               end;
end;
Am anfang der Unit hab ich auch daran gedacht

Delphi-Quellcode:
...

type
  TTaste = (ttNone,ttLeft,ttRight,ttDown,ttTurn);
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Hauptmenue: TMenuItem;
    Neu: TMenuItem;

...
und hab auch darab gedacht:

Delphi-Quellcode:
var
FTaste:Ttaste;
...
aber der Stein geht dann einfach nicht schneller runter, bzw. geht einfach nicht einmal mehr runter
hat da jemand einen Vorschlag, bitte?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#19

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 20:17
Das hier versteh ich überhaupt nicht:
Zitat:
Delphi-Quellcode:
if runter=1 then else
              rectangle(x,y,x1,y2);
              Brush.color:=clmaroon;
              rectangle(x,y1,x1,y3);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Fabbe

Registriert seit: 26. Mai 2008
11 Beiträge
 
#20

Re: Tastendruck abfrage

  Alt 26. Mai 2008, 20:22
Delphi-Quellcode:
if runter=1 then {nichts, da es in dem ersten durchlauf nichts zu löschen gibt} else rectangle(x,y,x1,y2); {löschen des voherigen Blockes, also der vorherigen Position}
              Brush.color:=clmaroon; {ändern der Farbe}
              rectangle(x,y1,x1,y3);{neue Position}
Ich werd bald wahnsinnig...
wenn diese doofe Tastenerkennung gehen würde wäre der rest schon viel einfacher
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:41 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