Bu yazının konusu başlıktan da anlaşılacağı üzere dinamiğin temeli olan hareket. İlk yazı olduğu için programlama kısmını aşırı basit anlatmaya çalıştım. Graphics kullanmak yerine çizimleri butonlar üzerinden yaptım. Hatta Timer'ın ne yaptığını bile anlattım. Ama hiç merak etmeyin bi kaç yazı sonra hiçbişey anlaşılmayan fantastik yazılar yazmaya başlarım. C# dilini genel olarak öğrenmesi ve uygulması basit olduğu için seçtim. Ama burada öğrendiğiniz mantığı her türlü dile uygulayabilirsiniz.
Yeni bir Windows Form Application üreterek yazmaya başlayalım. Bu programda "Timer" ve "Button" kullanacağız. Sürükle bırak yöntemiyle Toolbox'tan 3 buton ve bir timer ekleyelim. Butonların biri başlatma, biri de durdurma butonu olacak. Hareket işlemlerini de diğer butona uygulayacağız.
Programımızda hareketi sağlayan temel obje Timer. Timer default olarak saniyede 10 kez çalışır. Ancak hareketlerin sürekli ve mantıklı görünebilmesi için bizim en az 25 fps'ye ihtiyacımız var. Bunun için timer intervalini 40 yapalım. Artık Timer'imiz her 40 milisaniyede bir çalışacak.
Boş bir yere sağ tıkladıktan sonra "View Code" diyip kod kısmını açın. Öncelikle kodun başına dönüp değişkenleri tanımlayalım. x yönündeki hızı vx ve ivmeyi ax ile göstereceğiz. Başlangıç değeri olarak x'e 100, y'ye 50 verelim. Ayrıca ay'ye de başlangıç ivmesi olarak 0.5 verelim. Diğer değişkenler de başlangıç olarak 0 olmalı. Siz değişik hareketler üretmek için istediğiniz değerleri verebilirsiniz. Bu arada değişkenlerin virgüllü değerler de alabilmesi için değişkenler double türünde olmalı.
Butonlara ve Timer'a çift tıklayıp fonksiyonları açalım. Timer her çalıştığında konumu hıza, hızı da ivmeye göre değiştirmeliyiz. timer1_Tick fonksiyonun içine kodlarımızı yazalım.
Ayrıca Timer her çalıştığında cismimizin konumunu x ve y'ye göre yeniden ayarlamalıyız. Burada önemli olan nokta şu: Formun içindeki nesnelerin konumlar int (tamsayı) cinsinden. Bu yüzden x ve y'yi int'e çevirmelyiz. Bunun için önlerine "(int)" yazacağız. Timer'a bu kodu da ekleyelim.
Butonların fonksiyonlarını da ekleyelim. Start butonu Timer'ı çalıştıracak, Pause butonu ise durduracak.
Programı bu haliyle çalıştırırsak butonun aşağı doğru düşüp kaybolduğunu görürüz. Butonun kaybolmasını engellemek için butonun belli bir yerden sekmesini sağlayabiliriz. Bunun için y belli bir değerin üzerine çıktığında vy yi ters çevirmeliyiz. Timer'a kodumuzu ekleyelim.
vy=-vy; kısmı hızı ters çevirdiğimizi gösteriyor. Ayrıca bir de y-=vy; kısmı ekledik. Böylece yukarda y+=vy; koduyla ilerleyen cismi geri almış olduk. Bu kısmı eklemeseydik cisim geçmemesi gereken 250 seviyesini geçebilecekti. Bu kodu asıl önemli yapansa enerjiyi korumamızı sağlaması. Bu kısmı eklemeden çalıştırırsanız cismin maksimum yüksekliğinin giderek arttığını veya azaldığını hatta bazı durumlarda cismin saçmaladığını görebilirsiniz.
İşimiz neredeyse tamam. Ancak bir adım daha kaldı. Eğer cisme yatay bir hız veya ivme verirseniz cismin sağ veya soldan kaybolduğunu görürsünüz. Bunun için y'ye yaptığımız işlemi x'e de yapmalıyız.
Programımız bitti. Artık vx veya ax'e istediğiniz değeri verip, sağa sola delice hareket eden veyahut eğik atış hareketi yapan bir buton üretebilirsiniz.
-------------------------------
Kraliçenin de iznini alıp toprağa gömmüşler...

Ulan ya üzülüyorum...
YanıtlaSil