premikanje z tipkami

Vse kar se tiče programiranja iger.
Odgovori
jernejb
Prispevkov: 16
Pridružen: 16.02.2007 21:33:36

premikanje z tipkami

Odgovor Napisal/-a jernejb » 07.12.2007 18:09:03

jaz mam en problem, ki je verjetno ze bil kje razlozen, vendar jaz nisem nasel nicesar. Rad bi, da se mi ob npr. pritisku tipke za gor, slika zacela premikati gor, dokler ne pritisnem druge tipke. Probal sem dati delay in sleep vendar ne uspe.

Koda: Izberi vse

 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_LEFT then
repeat
begin
Image1.Left:=Image1.Left-4;
sleep(100);
end
until (Key<>VK_LEFT);


if Key = VK_RIGHT then
repeat
Image1.Left:=Image1.Left+4;
until (Key<>VK_RIGHT); 
prosil bi za pomoc, ker ne vem, kako naj ta problem resim. Ce pustim samo
if Key = VK_RIGHT then
repeat
Image1.Left:=Image1.Left+4;
until (Key<>VK_RIGHT); potem se mi program zastopa

GJ
Prispevkov: 1078
Pridružen: 13.03.2004 12:34:48

premikanje z tipkami

Odgovor Napisal/-a GJ » 07.12.2007 19:31:56

Rabil boš timer-ček in dve variabli za pomik, ki ju prištevaš ob izteku timerja.
Variabli, recimo PomikX in PomikY nastaviš ob pritisku določene tipke.

LP GJ
Zadnjič spremenil GJ, dne 07.12.2007 19:32:50, skupaj popravljeno 1 krat.
Kdor se zadnji smeje, se smeje zadnji!

G16
Prispevkov: 462
Pridružen: 11.02.2005 21:54:48

premikanje z tipkami

Odgovor Napisal/-a G16 » 07.12.2007 19:40:51

Zakaj pa ne daš samo:
if Key = VK_LEFT then
Image1.Left:=Image1.Left-4;
Napisal G16 (nekdanji G11,G14,G15°) Uporabljam: Delphi7 Ent.
http://delphi4u.awardspace.com/
Čas teče naprej...

G16
Prispevkov: 462
Pridružen: 11.02.2005 21:54:48

premikanje z tipkami

Odgovor Napisal/-a G16 » 07.12.2007 19:54:28

Koda: Izberi vse

 var
  B:boolean;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Key = VK_LEFT) and b then begin
Image1.Left:=Image1.Left-4;
b:=false;
end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
B:=true;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
b:=false;
end; 
Timer nastaviš na koliko časa naj se premakne.
Napisal G16 (nekdanji G11,G14,G15°) Uporabljam: Delphi7 Ent.
http://delphi4u.awardspace.com/
Čas teče naprej...

jernejb
Prispevkov: 16
Pridružen: 16.02.2007 21:33:36

premikanje z tipkami

Odgovor Napisal/-a jernejb » 07.12.2007 20:40:04

jaz bi pac hotu, d ob prtisku na tipko levo se mi slika premika proti levi strani dokler ne bom prtisnu tipke gor alpa kere druge. Sm probu s timerjem samo mi ni ravno prav uspelo.
G14, sm probu tvojo kodo, pa mi premakne samo enkrat pol pa nc. lahko se kdo pomaga?

G16
Prispevkov: 462
Pridružen: 11.02.2005 21:54:48

premikanje z tipkami

Odgovor Napisal/-a G16 » 07.12.2007 22:19:49

Če nimaš posebnih zahtev glede hitrosti naredi takole:

Koda: Izberi vse

 procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
case key of
 vk_down:Image1.Top:=Image1.Top+1;
 vk_left:Image1.Left:=Image1.Left-1;
 vk_right:Image1.Left:=Image1.Left+1;
 vk_up:Image1.Top:=Image1.Top-1;
end;
end; 
Če hočeš da se slika premika hitreje pa namesto enk daj kakšne višje številke.
Napisal G16 (nekdanji G11,G14,G15°) Uporabljam: Delphi7 Ent.
http://delphi4u.awardspace.com/
Čas teče naprej...

Silver_War
Prispevkov: 664
Pridružen: 01.06.2004 14:50:41

premikanje z tipkami

Odgovor Napisal/-a Silver_War » 07.12.2007 22:23:49

Saj ni težko, malo je samo treba razmislit. Prvo potrebuješ timer, ki bo skrbel za samo premikanje slike, in pa štiri variable, od katerih bo odvisno, v katero smer se ti bo slika premikala. Te štiri variable so recimo tipa boolean (PremikVlevo: Boolean). V OnTimer eventu preverjaš katera od prejšnjih spremenljivk je True in glede na to določiš smer gibanja. V KeyDonEventu, pa glede na pritisnjeno tipko določiš, katera od zgornjih spremenljivk, bo bila postavljena na True in pa da so ostale postavljene na False.
Pa še koda pisana iz glave:

Koda: Izberi vse

 var PremikLevo,PremikDesno,PremikGor,PremikDol: Boolean;

...

procedure TForm1.OnTimer(Sender: TObject);
begin
    if PremikLevo then Slika.Left := Slika.Left-4
    else if PremikDesno then Slika.Left := Slika.Left+4
    else if PremikGor then Slika.Top := Slika.Top-4
    else if PremikDol then Slika.Top := Slika.Top+4;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if Key = VK_LEFT then
    begin
        PremikLevo := True;
        PremikDesno := False;
        PremikGor := False;
        PremikDol := False;
    end
    else if Key = VK_RIGHT then
    begin
        PremikLevo := False;
        PremikDesno := True;
        PremikGor := False;
        PremikDol := False;
    end
    else if Key = VK_UP then
    begin
        PremikLevo := False;
        PremikDesno := False;
        PremikGor := True;
        PremikDol := False;
    end
    else if Key = VK_DOWN then
    begin
        PremikLevo := False;
        PremikDesno := False;
        PremikGor := False;
        PremikDol := True;
    end;
end; 

Uporabniški avatar
Lee_Nover
Prispevkov: 3653
Pridružen: 20.05.2001 14:31:55

premikanje z tipkami

Odgovor Napisal/-a Lee_Nover » 08.12.2007 04:35:44

kok komplicirate ...
tole je cisto zadostna koda:

Koda: Izberi vse

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  LastKey := Key;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const
  COffset = 4;
  COffsets: array[VK_LEFT..VK_DOWN] of Integer = (-COffset, -COffset, COffset, COffset);
begin
  case LastKey of
    VK_LEFT, VK_RIGHT: Image1.Left := Image1.Left + COffsets[LastKey];
    VK_UP, VK_DOWN: Image1.Top := Image1.Top + COffsets[LastKey];
  end;
end;
Zadnjič spremenil Lee_Nover, dne 08.12.2007 04:42:33, skupaj popravljeno 1 krat.
.. my 2 c ..
- I hate noobs -

Odgovori