Shape nesnesinden tekrar tekrar üretmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
casanowa123
Üye
Mesajlar: 4
Kayıt: 16 Eki 2010 05:31

Shape nesnesinden tekrar tekrar üretmek

Mesaj gönderen casanowa123 »

Arkadaşlar kod ile bir shape nesnesi tanımladım. Klavyeden space tuşuna bastığımda bu nesne forma yerleşicek ve timer'a bağlı olarak hareket edicek. Klavyeden tuş alma kısmında problemim yok. Tuşa her bastığımda bu shape'den tekrar tekrar üretilecel, üretilen shape'lerde timer'a bağlı olarak Top'ları azalıcak . Sizce nasıl bir yol izlemeliyim?
En son casanowa123 tarafından 27 Ara 2010 09:00 tarihinde düzenlendi, toplamda 3 kere düzenlendi.
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: Her tuşa basıldığında bir Shape nesnesi üretmek

Mesaj gönderen orhancc »

Blok oyunu mu yapmaya çalışıyorsun ?

Kod: Tümünü seç

procedure TForm3.ShapeOlustur;
var
  shape : TShape;
begin
   Randomize;
   shape := TShape.Create(Self);
   shape.Top := 0;
   shape.Brush.Color := Random(10000000);
   shape.Left := Random(300);
   shape.Shape := stCircle;
   shape.Width := 20;
   shape.Height := 20;
   shape.Parent := Form3;
end;

Formuna bir tane Panel koyup bu kodu çalıştırabilirsin Panel1 olacak ismi.

Kod: Tümünü seç

procedure TForm3.Asagi();
var
  i: integer;
  Spoz: Integer;
  pPoz: Integer;
begin
  for i := 0 to ComponentCount - 1 do
    begin
      if Components[i] is TShape then
        begin
          Spoz := TShape(Components[i]).Left + TShape(Components[i]).width;
          pPoz := Panel1.Left + Panel1.Width;
          TShape(Components[i]).Top := TShape(Components[i]).Top + 25;

          if (Spoz>Panel1.Left) and  (Spoz<Ppoz) and ((TShape(Components[i]).Top + TShape(Components[i]).Height) > Panel1.Top) or
            ((TShape(Components[i]).Left <  ppoz)) and ((TShape(Components[i]).Top + TShape(Components[i]).Height) > Panel1.Top)
             then
               begin
                 TShape(Components[i]).Free;
                 Break;
               end;

          if (TShape(Components[i]).Top + TShape(Components[i]).Height) > (Panel1.Top + Panel1.Height) then
            begin
              Panel1.Caption := 'Oyun Bitti Kaybettiniz !!!';
              GameOver := true;
            end;
        end;
    end;
end;
casanowa123
Üye
Mesajlar: 4
Kayıt: 16 Eki 2010 05:31

Re: Her tuşa basıldığında bir Shape nesnesi üretmek

Mesaj gönderen casanowa123 »

orhancc ilginiz için teşekkür ederim. Prosedürleri timer olayına bağlayıp kendi projeme göre 1-2 ufak değişiklik yaptım.Kodlar istediğim gibi çalışıyor.
casanowa123
Üye
Mesajlar: 4
Kayıt: 16 Eki 2010 05:31

Re: Shape nesnesinden tekrar tekrar üretmek

Mesaj gönderen casanowa123 »

yukarıdaki kodlar yardımıyla iki adet nesne ürettim. Birisi TImage,diğeri TShape(umermi). image ile shape karşılaşınca ikiside yok olacak.
Shape oluşturma kodum:

Kod: Tümünü seç

umermi := TShape.Create(self);
          umermi.Top := ucak.Top-17;
          umermi.Left:= ucak.Left+8;
          umermi.Height:= 10;
          umermi.Width:= 10;
          umermi.shape:=  stEllipse;
          umermi.Tag :=2;
          umermi.Parent:= self;
karşılaştıklarında yok olan kod ise :

Kod: Tümünü seç

 begin
          if  (TImage(Components[i]).Top >= umermi.Top) and  (TImage(Components[i]).left + TImage(Components[i]).Width >= umermi.Left) and (TImage(Components[i]).Left <= umermi.Left + umermi.Width) and (TImage(Components[i]).Top+(TImage(Components[i]).Height) - umermi.Top > 1)
              then
                  begin
                 TImage(Components[i]).Free;
                 umermi.Free;
                 Break;
               end;

ama karşılaştıklarından sonra program saçmalıyor ve

Resim

hatasını veriyor. Yarımcı olurmusunuz?
Cevapla