Andengine Geometrik Şekiller Oluşturma

Android oyun programlama işlemi sürecinde kendi çizimlerimizi oyun motoru aracılığıyla yapmamız mümkündür. Elbette hazır araçları kullanarak da projenize ekleyebilirsiniz. Ancak eğer bu işten para kazanmak istiyorsanız, native bir oyun yapısı oluşturmak istiyorsanız kendi çizimlerinizi yapabilecek seviyeye gelmelisiniz. En azından fonksiyonların nasıl kullanıldığını anladıktan sonra hazır tasarımları kendinize uyarlamanız kolaylaşacaktır. Andengine geometrik şekil oluşturma işlemleri oldukça basit ve sadedir. Zaten fonksiyonlar hazırdır.

Andengine Line Sınıfı

Andengine kütüphanesi içerisinde bulunan Andengine Line Sınıfı yapısı çizgi ve dikdörtgen oluşturmamızı sağlar. Bu sınıfı kullanabilmemiz için aşağıdaki satırı class yapımıza import etmemiz gereklidir. 


import org.anddev.andengine.entity.primitive.Line

Bu sınıf içerisinde iki tane yapıcı metot kullanabilirsiniz. Bu metotlardan bir tanesi parametre olarak başlangıç x,y noktası ile bitiş x,y noktasını almaktadır. Bunların yanında çizgi kalınlığını da parametre olarak alır.

Andengine Rectangle Sınıfı

Geometrik şekiller çizmemizde bize yardımcı olan bir diğer sınıf da Andengine Rectangle Sınıfıdır. Bu sınıf bize direkt olarak dikdörtgen çizmemizi sağlar. Yani Andengine Line sınıfı ile uğraşmaktansa dikdörtgen şekiller çizmek istediğimizde bu sınıfı kullanmamız daha doğru olacaktır.

Bu sınıf da tıpkı Line sınıfı gibi 2 yapıcı metot kullanmaktadır. İçerisine parametre olarak dikdörtgenin başlangıç noktaları ile yükseklik ve genişlik değerlerini almaktadır. Diğer yapıcı metot ise değişkenlerin yanında RectangleVertexBuffer nesnesini alır.

Andengine Geometrik Şekiller Çizme Uygulaması

Şimdi projemize devam edelim, hatırlarsanız daha önce projemizi oluşturup içerisine jar dosyalarını import etmiştik. Daha sonraki uygulamamızda ise temel metotları oluşturmuştuk. Şimdi ise projemizde yeni bir aktivite oluşturalım, adına da GeometrikSekil diyelim. 

Projemize ilk olarak exdends ifadesinden sonraki kelimeyi silelim ve BaseGameActivity yazalım. Daha sonra aşağıdaki satırları projemizin üst kısmına ekleyelim.






// ********** Algoritma Uzmanı *********** //
// ******www.algoritmauzmani.com**********//
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;
import org.anddev.andengine.entity.primitive.Line;
import org.anddev.andengine.entity.primitive.Rectangle;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.ui.activity.BaseGameActivity;

Aşağıdaki satırları GeometrikSekil activity içerisine ekleyelim. Ekleyince hata alacaksınız, umursamayın sebebi henüz onLoadComplete metodunu yazmamış olmayız. Onu da birazdan anlatacağım.
public class GeometrikSekil extends BaseGameActivity {

    private static final int CAMERA_WIDTH = 800;
    private static final int CAMERA_HEIGHT = 480;
    private Camera camera;
    private Engine engine;
    private Scene sahne;

    @Override
    public Engine onLoadEngine()
    {
        camera = new Camera(0,0, CAMERA_WIDTH, CAMERA_HEIGHT);
        final EngineOptions engineOptions = new EngineOptions(true, EngineOptions.ScreenOrientation.LANDSCAPE, new FillResolutionPolicy(), camera);
        engineOptions.getTouchOptions().setRunOnUpdateThread(true);
        engine = new Engine(engineOptions);

        return engine;
    }

    @Override
    public Scene onLoadScene()
    {
        this.engine.registerUpdateHandler(new FPSLogger());
        this.sahne = new Scene();

        sahne.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));

        // Çizgimizi Oluşturuyoruz
        Line line = new Line(20, 20, 780, 20);

        // Dikdörtgen Oluşturuluyor
        Rectangle rectangle = new Rectangle(20, 40, 760, 420);

        // Oluşturulan nesneler sahne üzerine çizdiriliyor
        this.sahne.attachChild(line);
        this.sahne.attachChild(rectangle);

        return this.sahne;
    }


}

OnLoadEngine Metodu İçerisinde Gerçekleştirilen İşlemler

camera ve engine nesnelerini oluşturduk.
Camera nesnesi oluştururken 4 parametre girişi aldı. Bunlar X başlangıcı, Y başlangıcı ve X,Y değerlerinin bitiş noktalarından ibarettir.

EngineOptions nesnesinin parametrelerine geldiğimizde ise true değeri boolean bir değerdir. Bu bilgi uygulamamızın tam ekran olup olmadığını gösterir. 

İkinci değişken ise ScreenOrientation türünden bir nesnedir. Oyunumuz ekranda dikey mi yatay mı duracaktır onu gösterir. LANDSCAPE özelliğinde uzun kenar X ekseni iken PORTRAIT özelliğinde ise kısa kenar Y eksenidir. 

Üçüncü değişkenimizde görsel içeriklerin camera nesnesi içerisine nasıl oturtulacağını belirtir. Biz FillResolutionPolicy nesnesini tercih ettik. Bu nesne kamera boyutuna göre değil de ekran çözünürlüğüne göre resimlerin büyüklüğünü değiştirmektedir. Yani hangi telefon olursa olsun resimlerimiz telefona sığacaktır. Bir nevi Responsive içerik mantığı uyguladık yani.

FillResolutionPolicy Nesnesi yerine aşağıdaki nesneleri de kullanabilirdik;

RatioResolutionPolicy: Görüntü içeriklerini belirlenen oranda büyüklüğünü değiştirir. Ancak en boy oranı hep sabit kalır.

RelativeResolutionPolicy: Önceden belirtilmiş X ve Y değerlerine bağlı şekilde görsel boyutu ayarlama işlemi yapar. En boy oranı kullanıcıdan alınır. Görüntülerde bozulma riski taşımaktadır.

FixedResolutionPolicy: Oyunun gerçekleşeceği ekran boyutunu kullanıcı belirler. Kullanıcıdan alınan değerlere göre ekran boyutu belirlenir. Görsellerde bozulma riski mevcuttur.

Bir sonraki satırda yani engineOptions.getTouchOptions satırında ise andengine threading özelliği kazandırıyoruz. Bu özellik oyunu oynayan kişilerin telefona parmaklarıyla dokunduklarında hareketlerin algılanması için oluşturulmuştur. 

engine = new engine() satırında ise engine nesnesini oluşturduk. Bu işlem yapılırken engineOptions nesnesini değişken olarak Engine sınıfının yapıcı metoduna gönderdik. Sonra satırda engine nesnesini geri döndürüyoruz.

OnLoadResources Metodunda Yapılan İşlemler

onLoadResources metodu içerisinde texture, textureRegion ve benzeri nesnelerin oluşturulma işlemleri gerçekleştirilmektedir. Yani oyunun altyapısı hazırlanır. Ancak bu metot şu anda boş durumdadır.

OnLoadScene Metodunda Yapılan İşlemler

Esas işler onLoadScene metodu içerisinde gerçekleşir. Burada oyun kodları yapılandırılır. 

İlk satırda kullanıcıya gösterilecek çerçeveyi belirttik. Burada işlemi gerçekleştiren temel nesne FPSLogger nesnesidir. Değişken olarak da registerUpdateHandler() metoduna gönderiyoruz.

Oyun içerisindeki bilgilerin güncellenmesi amacıyla Update Panel denilen bir sistem kullanılır. 

this.sahne = new Scene() satırında sahnemizi oluşturduk. Oyunumuz bu sahnede gerçekleşecek.

Bir sonraki satırda sahne nesnesinin bir metodunu kullandık. setBackground metodu ile sahne arkaplanı rengini belirledik.

attachChild fonksiyonu ile cisimlerimiz ekrana çizdirilmektedir. attachChild Sahne nesnesinin bir fonksiyonudur. Kullanıldığı sahne üzerinde değişken olarak aldığı nesneyi çizdirmektedir. 

return this.sahne işleminde uygulamada gösterilecek ilk sahne döndürülür. 

Line line = new Line() komutunda ise çizgi oluşturduk. Line(x1,y1,x2,y2) parametrelerini alır, x1,y1 demek başlangıç x,y noktası, x2,y2 demek ise bitiş  noktası demektir. Yani biz x1,y1'den x2',y2 noktasına bir çizgi çizmiş olduk.

Rectangle satırında ise dikdörtgen çizdik, bunun formatı ise (x1,x2,y1,y2) şeklindedir. Bu noktalar arasında bir dikdörtgen çizmektedir.

this.sahne.attachChild(Line) dediğimiz zaman çizgimizi ekrana bastırmış oluruz. Yani bu komut oluşturulan sınıfı ekrana bastırmaktadır. 

Gelecek yazımızda Andengine Texture ve Sprite Nesnesi konusuna değineceğiz. 

Andengine Texture ve Sprite Nesnesi

Etiketler: , , , , ,