![]() |
Figur mit Tasten Bewegen
So, ich hab jetzt so viel Zeit dafür verschwendet, um eine Figur oder eine Graphik mit Tasten bewegen zu können, und es klappt immernoch nicht. Jetzt frag ich hier nach. Ich brauche eine Prozedur für das Tastenereignis und die Deklarierung im Kopf der Unit. Ich hab schon ähnliche Themen im Forum gelesen, aber dabei wurde keine Deklarierungten angegeben wonach das Programm Delphi aber immer fragt.
|
Re: Figur mit Tasten Bewegen
Du hast ein TImage Objekt?
Das kannst du mit dem Ereignis OnKeyDown,des Formular, über die Virtual Keys steuern. Du solltest aber nach jeder Bewegung das Image refreshen weil es sonst ruckelt. Viele Grüße Schaedel |
Re: Figur mit Tasten Bewegen
Hi,
Ereignisse von Form1: OnKeyDown, OnKeyUp, OnKeyPress. Ausserdem im OI das KeyPreview auf True stellen. |
Re: Figur mit Tasten Bewegen
Wenn dus schnell brauchst(die oben genannten sind "relativ" langsam):
Delphi-Quellcode:
das geht auch für vk_right, vk_up, vk_down, vk_escape, vk_prior, vk_next
if GetAsyncKeystate(VK_LEFT) < 0 then
begin //Blubberdifasel end; |
Re: Figur mit Tasten Bewegen
Delphi-Quellcode:
bei dem Code kannst du dein Objekt nicht aus der Form hinaus bewegen. :zwinker:
unit LaufenUnit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Shape1: TShape; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var absu,absl,absr,abso: integer; begin //beim rand anstoßen abso:= shape1.top; absu:= form1.clientheight-(shape1.top+shape1.height); absl:= shape1.left; absr:= form1.clientwidth-(shape1.left+shape1.width); if (abso>10) then abso:= 10; if (absu>10) then absu:= 10; if (absl>10) then absl:= 10; if (absr>10) then absr:= 10; //bewegung des balles if (key=38) then shape1.top:= shape1.top-abso; if (key=40) then shape1.top:= shape1.top+absu; if (key=37) then shape1.left:= shape1.left-absl; if (key=39) then shape1.left:= shape1.left+absr; end; end. |
Re: Figur mit Tasten Bewegen
Heißt das, wenn GetAsyncKeystate(VK_ANYTHING)<0 bedeutet, dass die Taste mit dem Scancode VK_ANYTHING gerade gedrückt ist? Wenn ja, dann wäre das die Funktion, nach der ich schon so lange gesucht habe!
|
Re: Figur mit Tasten Bewegen
Ja, so ist es.
GetASyncKeyState liefert zwar immer feste Werte, aber der Check auf kleiner 0 hat bei mir bisher immer optimal funktioniert :) air |
Re: Figur mit Tasten Bewegen
sicherer ist noch wenn du abfragst ob es ungleich (<>) 0 ist.
|
Re: Figur mit Tasten Bewegen
Was genau gibt denn jetzt GetAsyncKeyState zurück?
|
Re: Figur mit Tasten Bewegen
Zitat:
|
Re: Figur mit Tasten Bewegen
Aha. Nebenbei, was würde sich mehr empfehlen? Bit 1 oder Bit 8 abfragen?
|
Re: Figur mit Tasten Bewegen
Steht doch alles schön im MSDN: Auf das niedrigste Bit kannst du dich seit dem Sprung auf 32-Bit nicht mehr verlassen, würde ich also nicht abfragen :wink: .
|
Re: Figur mit Tasten Bewegen
Bei mir funzt <> 0 aber wunderbar...(Delphi7)
|
Re: Figur mit Tasten Bewegen
Zitat:
Drücke z.B. die Taste vor dem Aufruf von GetAsyncKeyState und lass sie wieder los, <> 0 wird trotzdem erfüllt (aber das höchstwertige Bit eben nicht gesetzt) sein. |
Re: Figur mit Tasten Bewegen
wenn ich nich borland delphi oder andere windoofspiele benutze, benutz ich sowieso linux. und nichts gegen meine einstellungen :wink:
aber nichts für ungut, jetzt hab ich ja wieder was dazu gelernt :-D |
Re: Figur mit Tasten Bewegen
Mhh, der Formkeydown-Befehl klappt. Danke für die Hilfe.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz