Konuyu Oyla:
  • Derecelendirme: 4.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Hareket ettirme
#1
Merhaba;

Timer ile belirli aralıklarla Glyph create ediyorum (düşman gemisi) pozisyonlarında belirmiş olduğum formun bir yerinden ortaya çıkıyor, buraya kadar bir sıkıntı yok fakat bu gemilerin birbirinden bağımsız olarak hareket etmelerini nasıl sağlarım?

Yaptığım uygulama

procedure TForm1.Timer2Timer(Sender: TObject);
var
  GlyphDusman: TGlyph;
begin
  GlyphDusman := TGlyph.Create(Self);
  GlyphDusman.Parent := Self;
  GlyphDusman.Align := TAlignLayout.None;
  GlyphDusman.Images := DusmanUcak;
  GlyphDusman.Height := 70;
  GlyphDusman.Width := 40;
  GlyphDusman.Position.Y := DusGemiTop;
  GlyphDusman.Position.X := DusPozition[RandomRange(0, 5)];
  if GlyphDusman.Images <> Nil then
  begin
    GlyphDusman.ImageIndex := DusGemiSec[RandomRange(0, 5)];
  end;
end;
Cevapla
#2
(07-07-2017, Saat: 17:05)brs Adlı Kullanıcıdan Alıntı: Merhaba;

Timer ile belirli aralıklarla Glyph create ediyorum (düşman gemisi) pozisyonlarında belirmiş olduğum formun bir yerinden ortaya çıkıyor, buraya kadar bir sıkıntı yok fakat bu gemilerin birbirinden bağımsız olarak hareket etmelerini nasıl sağlarım?

Yaptığım uygulama

procedure TForm1.Timer2Timer(Sender: TObject);
var
  GlyphDusman: TGlyph;
begin
  GlyphDusman := TGlyph.Create(Self);
  GlyphDusman.Parent := Self;
  GlyphDusman.Align := TAlignLayout.None;
  GlyphDusman.Images := DusmanUcak;
  GlyphDusman.Height := 70;
  GlyphDusman.Width := 40;
  GlyphDusman.Position.Y := DusGemiTop;
  GlyphDusman.Position.X := DusPozition[RandomRange(0, 5)];
  if GlyphDusman.Images <> Nil then
  begin
    GlyphDusman.ImageIndex := DusGemiSec[RandomRange(0, 5)];
  end;
end;
   Merhabalar hocam, sanırsam size algoritmik olarak yardımcı olabilirim. Öncelikle birkaç hareket şablon oluşturun ve create etmiş olduğunuz uçaklara isimler verdikten sonra rastgele şablonları veriniz. Bu sebeple rastgele ve bağımsız biçimde hareketlerini yapacaklardır.

 Youtube'de oyun konularında gerçekten iyi olan, ve işini hakkıyla veren bir kanal var. Bunu sizinle paylaşayım umarım bir fikir verme mahiyetinde size yararı dokunur.

 Bkz. Arley Rincon

İyi çalışmalar,
Saygılarımla.
kisisel_logo_dark.png
WWW
Cevapla
#3
(07-07-2017, Saat: 20:12)hyperxman Adlı Kullanıcıdan Alıntı:  Youtube'de oyun konularında gerçekten iyi olan, ve işini hakkıyla veren bir kanal var. Bunu sizinle paylaşayım umarım bir fikir verme mahiyetinde size yararı dokunur.

 Bkz. Arley Rincon

İyi çalışmalar,
Saygılarımla.

Fikir kafam oluştu gibi, rica etsen biraz daha ayrıntı verir misiniz?
Cevapla
#4
(08-07-2017, Saat: 02:05)brs Adlı Kullanıcıdan Alıntı:
(07-07-2017, Saat: 20:12)hyperxman Adlı Kullanıcıdan Alıntı:  Youtube'de oyun konularında gerçekten iyi olan, ve işini hakkıyla veren bir kanal var. Bunu sizinle paylaşayım umarım bir fikir verme mahiyetinde size yararı dokunur.

 Bkz. Arley Rincon

İyi çalışmalar,
Saygılarımla.

Fikir kafam oluştu gibi, rica etsen biraz daha ayrıntı verir misiniz?

   Tekrar merhabalar;

Şablonlar yani hareket fonksiyon veya prosedürleri oluşturursunuz. Sonra bu prosedürleri oluşturduğunuz uçaklara rastgele atarsınız, birbirinden bağımsız harekete geçmesini sağlarsınız;

Tam olarak demek istediğim;

procedure Hareket1(glyph ataması icin gerekli değisken ataması);
begin
// Hareket kodlarınız…
End;
kisisel_logo_dark.png
WWW
Cevapla
#5
http://wiki.freepascal.org/Game_Engine

Kod okumanızın da size fayda sağlayacağı kanaatindeyim daha önce yapılmış örnekler size farklı bakış açıları da kazandırabilir.

https://www.udemy.com/delphi-flappy-bird...e-english/
bir ara ücretsizdi

“Do. Or do not. There is no try.”
Cevapla
#6
Teşekkür ederim.
Cevapla
#7
Konuyu biraz daha "story" olarak işlememiz gerekirse;

Yapacağınız bağımsız hareketler için bu bağımsız hareketlerin her birisini ayrı ayrı prosedür olarak tanımlamanız gerekir. Bunu yapmanın en pratik yolu kaç farklı hareket istiyorsanız o kadar uzunlukta bir integer array değişken oluşturmanız ve bu değişkenin değerini rastgele (random) olarak atamanız.

Böylece;

TGlyphMovements = array of Integer;

tipini oluşturduktan sonra global tutacağınız değişkeni (AMovements:TGlyphMovements;) formun constructor'ında doldurun. (Örn. 1-2-3-4-5-6-7-8)

HareketEttir(AGlyphDusman:TGlyph;AMovement:TGlyphMovements); imzalı prosedürünüzü oluşturduktan sonra;

Kullanım olarak: HareketEttir(dusman,randomSayi); olarak yönetimini sağlayabilirsiniz.
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi