Jak zrobić powtarzalne strzelanie w grze

0

Potrzebuje pomocy w z robieniu strzelania powtarzalnego.
Chcę aby shape1 strzelał pociskami shape2
Nie wiem jak mam to zrobić a pilnie jest mi to potrzebne.

Shape1-bohater
Shape2-pocisk

procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  If Key = VK_LEFT then  Shape1.left := Shape1.left - 10;
  if Key = VK_RIGHT then Shape1.left := Shape1.left + 10;
  if Key = VK_UP then    Shape1.top  := Shape1.top - 10;
  if Key = VK_DOWN then  Shape1.top  := Shape1.top + 10;
  If key = Vk_Escape then
  begin
    form3.hide;
    form4.show;
  end;

  If key = Vk_SPACE then
  begin
    Timer1.Enabled := True;
  end;
end;

procedure TForm3.Timer1Timer(Sender: TObject);
begin
  shape2.left := shape2.left - 100;
end;

end. 
0

Powtarzalne? O co konkretnie chodzi? Bo strzelanie powtarzalne to przeładowanie po każdym strzale :) Chodzi Ci o automatyczne czy co?

0
funkcja strzal() {
    przeladuj();
    strzel();
}

obsluga:
if(keys[LPM] == true) {
     strzal();
}

O cos takiego chodzi? Czy chcesz bez trzymania przycisku strzelac?

0
shape2.left:=shape2.left-100;
if shape2.left<0 then shape2.left:=shape1.left;
0

chodzi mi o coś takiego

strzal.jpg

bez przeladowań tylko automatyczne

0
ths napisał(a)

Nie wiem jak mam to zrobić a pilnie jest mi to potrzebne.

Tak pilnie, że nie było czasu dokładniej wyjaśnić w czym problem i czego oczekujesz..?

Zgaduję: chodzi o to, że po wciśnięciu klawisza Spacji zostaje włączone strzelanie automatyczne (jeden strzał za drugim bez ingerencji użytkownika), a po wciśnięciu drugi raz - strzelanie zostaje wyłączone? Jeśli tak, to:

  • jeśli pocisków na ekranie może być więcej niż jeden, to kłania się dynamiczne tworzenie komponentów (czyt: dynamiczne tworzenie kontrolek klasy TShape jako kolejnych pocisków),
  • jeśli pocisk na ekranie może być tylko jeden, to trzeba sprawdzić, czy pocisk trafił w coś i jeśli tak - usunąć go i stworzyć nowy lub przesunąć istniejący tam, skąd wylatuje w momencie strzału;
    To taki ogólny zarys, bo bez większej ilości kodu nic nie można konkretniej napisać; Poza tym podane przez Ciebie zdarzenie jest nieoptymalne dlatego że warunki nie są przerywane w momencie ich wykonania; W zamian należy wykorzystać instrukcję wyboru case .. of, więc Twój kod powinien wyglądać tak:
procedure TForm3.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_LEFT:   Shape1.left := Shape1.left - 10;
    VK_RIGHT:  Shape1.left := Shape1.left + 10;
    VK_UP:     Shape1.top  := Shape1.top - 10;
    VK_DOWN:   Shape1.top  := Shape1.top + 10;
    VK_SPACE:  Timer1.Enabled := True;
    VK_ESCAPE: begin
                 Form3.Hide();
                 Form4.Show();
               end;
  end;
end;
  • oczywiście zmodyfikować go tak, by spełniał założenia (wypunktowane wyżej).
0

Automagiczne strzelanie no to chyba zrobiłeś w ten sposób, ze odpalasz timer i on Ci powinien wywoływać procedure Strzel;

Problem chyba polega na tym, ze na ekranie musi pojawić się kilka pocisków na raz. I nie zrealizujesz tego mając jeden pocisk( shape2 ).
Musisz utworzyć więcej shapów-pocisków a w zasadzie skopiować ten co masz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1