Unity3D Inspector Özellikleri – 1

Merhaba, bu yazımda Unity3D içerisinde ki “Inspector” alanında değişkenlerin yanında ekstra özellikler kullanmaya bakacağız. Bu yazıda kullanmış olduğum temel yapılardan bahsedeceğim. C# kullanmaktayım.
HideInInspector
Unity içerisinde C# yazarken “private” ve “public” değişken kullanırken biraz farklılık bulunmakta. “private” değişken “Inspector” panelinde görünmüyor ve Unity arayüzü üzerinden değiştirilemiyor. “public” değişken ise “Inspector” panelinde görünüyor ve Unity arayüzü ile değiştirmek mümkün. Ayrıca “private” değişken demek diğer script yapılarından o değişkene ulaşamamak demek. Bazen bir değişkenin Unity arayüzünde görünmesin ama başka bir script üzerinden o değişkene ulaşılmasını isteyebiliriz. Tabi bunu “getter-setter” metodlar ile de yapabiliriz. Eğer “getter-setter” metodları kullanmadan yapmak istersek, değişkenin önüne “[HideInInspector]” yazabiliriz.
Header
“Inspector” paneli içerisinde bir script içerisinde ki bir değişkene veya birden fazla değişkenin üzerine açıklama tarzında bir başlık eklememizi sağlamakta. Parametre olarak içerisine string bir değer almakta. Kullanımı ise, “[Header(“Header”)]” şeklindedir.
Space
Eğer “Inspector” paneli üzerinde iki değişken arasında boşluk bırakmak isterseniz “Space” yapısını kullanabilirsiniz. Parametre olarak float değer almakta. Kullanımı ise, “[Space(20.5f)]” şeklindedir.
Range
Eğer bir değişkenin belli bir değerler arasında değer almasını istiyorsak “Range” yapısını kullanabiliriz. İki farklı kullanım durumu var. Eğer altına yazdığımız değişken int tipinde ise “[Range(0, 5)]” şeklinde yazarak tam sayı olarak değişmesini sağlayabiliriz. İkinci alternatif olarak altına yazılan değer float tipinde ise “[Range(0f, 5f)]” şeklinde yazarak değerlerin virgüllü şekilde hareket etmesini sağlayabiliriz.
Tooltip
“Inspector” üzerinde bir değişkenin üzerine gelindiği zaman bir açıklama göstermek istersek “Tooltip” yapısını kullanabiliriz. Parametre olarak string bir değer almakta. Kullanım şekli ise, “[Tooltip(“Açıklama”)]”.
RequireComponent
Yukarıda incelediklerimiz dışında bu yapı biraz farklı. Öncelikle yukarıdakiler bir değişken için özel durumları ifade ediyordu. Bu yapı ise bir script için yazılmakta. Örneğin, script içerisinde o objeye ait “Rigidbody” değerini alacaksınız, eğer obje üzerinde “Rigidbody” eklenmemiş ise “GetComponent” ile alırken null olarak gelecek. Bunun önüne geçmek için o class üzerine “RequireComponent” ile “Rigidbody” ekliyoruz ve Unity arayüzünde scripti attığımız objeye otomatik olarak “Rigidbody” ekleniyor. Kullanımı ise, “[RequireComponent(typeof(Rigidbody))]”
Serializable
Son olarak “Serializable” yapısına bakalım. Script üzerinde bir tane sınıf yazdık ve bu sınıfın değerlerini arayüz üzerinden değiştirmek istiyoruz. Bir dizi yapısı kullanarak arayüz de göstermeye çalışırsak bu değişken görünmez. Göstermek için ise yazdığımız sınıfın üstüne “[Serializable]” eklememiz gerekmekte. Burada ek olarak kullandığımız yapı “System” altına yani “using System” olarak eklememiz gerekiyor.
Yanlış bilgi vermemeye çalışmak adına yazarken test ettiğim scriptin de arayüz içerisinden ekran görüntüsü ve scripti paylaşayım.
image-8-1

Teşekkürler, görüşmek üzere.

Android XML ile Ekranı Oranlama

Merhaba, bu yazımda ekranı dikey veya yatay olarak parçalara ayırmaktan bahsedeceğim. Ekranı oranlamak, yaptığımız XML tasarımın her cihazda aynı görüntüyü elde etmesini sağlayacak. Bu parçalama işlemi yapılırken cihazın yüksekliğini veya genişliğini kullanacağız.
Bu oranlama işlemini yapabilmek için layout tipi olarak “LinearLayout” yapısını kullanacağız. “LinearLayout” yapısının yatay ve dikey olarak iki türü bulunmakta. Her ikisi ile ilgili olarak aşağı da örnek yapacağız.
Öncelikle “weightSum” ifadesinden bahsedelim. Bu değer layout içerisindeki toplam ağırlığı ifade etmekte. İkinci olarak “layout_weight” ifadesi ise layout içerisindeki bir nesneye ait ağırlığı ifade etmekte. Aşağıdaki örneğimizde ekran yüksekliğine göre 3’e böleceğiz. Bunun için “LinearLayout” için “weightSum” değeri 3 olacak. Bunun içerisinde kullanacağımız “RelativeLayout” için “layout_weight” değerleri ise 1 olacak.
Bunlara ek olarak bir önemli bilgi daha ekleyelim. Örneğimizde “LinearLayout” kullandık ve ekran yükseklik olarak ayıracağımız için “orientation” değeri “vertical” oldu. “LinearLayout” içerisinde yer alan “RelativeLayout” için “layout_weight” vermiştik. Bu yüzden her bir “RelativeLayout” için “layout_height” değerlerini “0dip” vereceğiz.

image-7-1

İkinci örnek olarak, ekranı yatay olarak 10 birime bölelim ve 7 birim ile 3 birim şeklinde 2 adet “RelativeLayout” şeklinde parçalayalım.
“LinearLayout” için “orientation” değeri artık “horizontal” oldu. Ekranı yatay oranladığımız için “layout_width” değeri “0dip” olmalıdır.

image-7-2
Teşekkürler, görüşmek üzere.

OpenGL ES Dokunma Hareketleri Yakalama

Merhaba, bu gün ekrana dokunma hareketlerini yakalamaktan bahsedeceğim. Bir önceki yazımda dokunma işlemlerini yakalamanın GLSurfaceView üzerinde olduğundan bahsetmiştim. Dilerseniz buradan okuyabilirsiniz.
Önceki yazımda kullanmış olduğumuz sınıflar üzerinden devam edeceğiz. Java üzerinde “onTouchEvent” fonksiyonunu “override” ederek “getAction” metodu ile dokunma hareketlerini sınıflandırarak kontrol edeceğiz. Temel olarak dokunma hareketlerini tek parmak ve çok parmaklı olarak 2’ye ayıracağız.
Tekli Parmak Hareketi Algılama
Burada 4 tane temel aksiyon var. Bunlar;
ACTION_DOWN: İlk parmak ekrana değdiği zaman çalışır ve her zaman 0. parmağın yollamakta.
ACTION_MOVE: Parmak ekranda dolaşırken çalışmakta.
ACTION_UP: Son parmak ekrana değmeyi bıraktığı zaman çalışır ve her zaman 0. parmağı yollamakta.
ACTION_CANCEL: Her hangi bir sebepten dolayı parmak ekrandan çıkınca çalışmakta.

Burada öncelikle “queueEvent” ten bahsedelim. OpenGL ES tarafından yazılan bu yapı sayesinde doğru olan thread’i çağırmamızı sağlamakta. Böylelikle dokunma hareketlerini yakalıyoruz.
Fonksiyona gelen “MotionEvent” sınıfından “getX” fonksiyonu ile x ekseninde ki konumunu, “getY” fonksiyonu ile y ekseninde ki konuma erişmekteyiz.
Fonksiyon geri dönüş değeri yukarıda ki gibi olursa sadece ACTION_DOWN çalışmakta. Bunu önlemek için geri dönüş değerini “true” yapıyoruz.
image-6-1
Çoklu Parmak Hareketi Algılama
Çoklu parmak için ek olarak 2 tane yeni aksiyon bulunmakta. Bu iki fonksiyonun ortak özelliği ekranda ki tek parmaktan sonra ki parmaklar için çalışmakta.
ACTION_POINTER_DOWN: Diğer parmaklar ekrana değdiği zaman çalışmaya başlar. “getActionIndex” fonksiyonu ile alabiliriz.
ACTION_POINTER_UP: Diğer parmaklar ekrana değmeyi bıraktığı zaman çalışır. “getActionIndex” fonksiyonu ile alabiliriz.
Ek olarak fonksiyonun başında ekrandaki parmak sayısını yine ”MotionEvent” sınıfının “getPointerCount” fonksiyonu ile alarak bu parmakların ekrandaki pozisyonlarını döngü ile dizi yapısına ekledik.
Fonksiyonun son hali aşağıdaki gibi oldu.

Örnek olarak, ekrana 4 parmak koyduktan sonra 2. koyulan parmaktan itibaren çekilirken ekran görüntüsü.
image-6-2
Ekrana koyulan parmakların index değerleri 0 ‘dan başlıyor. Ancak ekrandan aradaki bir değeri olan parmağı kaldırdığımız zaman arada değer atlaması olmamakta. Yani kalan parmaklar tekrar 0’dan itibaren dokunma sırasına göre sıralanmakta.
Teşekkürler, görüşmek üzere.

Android Studio ile OpenGL ES Giriş

Merhaba, bu yazımda OpenGL ES başlangıcı yapacağız. Öncelikle OpenGL ES, OpenGL for Embedded System kısaltılmış halidir. 2D ve 3D grafik kütüphanesi olan OpenGL’nin gömülü sistemler için için olan versiyonudur.
AndroidManifest.xml
XML dosyasının en üst kısmına farklı Android versiyonları için farklı değerde tanımlamalar gerekmektedir.
Android 2.2 ve üzeri için v2.0,

Android 4.3 ve üzeri için v3.0,

Android 5 ve üzeri için v3.1

Ben v2.0 kullanmayı tercih ettiğim için tanımlaması yaptım.
SurfaceView
Normalde kullanılan XML yapısı yerine çizimleri üzerinde yapabileceğimiz SurfaceView sınıfına benzer GLSurfaceView sınıfını kullanacağız. GLSurfaceView sınıfının en temel farkı, üzerinde yapılan dokunma hareketlerini algılayabilmesidir.
GLSurfaceView.Renderer
GLSurfaceView üzerine grafik çizebilmek için ihtiyacımız olan sınıftır. “implement” ettikten sonra 3 tane sınıfı “override” yapmamız isteniyor.
onSurfaceCreated : Sınıf oluşturulduğunda bir kere çalışmaktadır.
onSurfaceChanged : Telefon durumu değiştiğinde çalışmaktadır.
onDrawFrame : Her karede çalışmaktadır.
Proje Örneği
Yukarıdaki sınıfları kullanarak arka planı gri yaptığımız bir örnek verelim.
Öncelikle MainActivity.java sınıfı.

XML yapısı kullanmayıp kodla ekran boyutu kadarlık bir alana “FrameLayout” oluşturduktan sonra GLSurfaceView sınıfını dahil edeceğimiz MyGLSurfaceView sınıfını oluşturduk.

Anlatımda da bahsettiğim gibi üzerinde çizimler yapacağımız MyRenderer sınıfı bulunmakta.

Bunların sonucunda ekran görüntümüz,
image-5-1
Teşekkürler, görüşmek üzere.

Android Studio ile NDK Giriş

Merhaba, bu yazımda Android içerisinde NDK kullanımına giriş niteliğinde kurulumu yapacağız. NDK, açılımı “Native Development Kit” olan Android uygulama içerisinde C/C++ kullanmamızı sağlayan bir kütüphanedir. Yanlış hatırlamıyorsam Android Studio 1.3 ‘den itibaren NDK desteklemeye başladı. Bu yüzden, güncellenmesi gerekebilir.
Proje Oluşturma
Android Studio üzerinden proje oluştururken önemli bir nokta “Include C++ Support” seçeneğinin aktif olması. Gerisi normal şekilde devam edilebilir.
image-4-1
Kurulum
Tools -> Android -> SDK Manager içerisinde SDK Tools başlığı altında CMake, LLDB ve NDK indiriyoruz. Boyutu 1 Gb civarı biraz uzun sürebilir.
image-4-2
Not
Aslında bu işlemden sonra projenin çalışacağını düşünmüştüm ancak altta ki görselde ki gibi bir hata ile karşılaştım.
image-4-3
Çözüm olarak, “app” klasörü içerisindeki “gradle” dosyasında cmake { cppFlags “”} kod satırlarını sildim. Şu an için bir problem oluşturmadı.
İlk Örnek
Normalde “Hello World” yazan TextView içerisinde değişiklik yapacağız. “activity_main” XML yapısı;

Şimdi Java tarafına geçelim. Burada farklı olarak artık C++ metodlarını çağırmamız için gerekli olan kütüphane yükleme kodumuz bulunmakta.

Ayrıca artık “app” klasörü altında “cpp” adında bir klasör bulunmakta. Buraya yeni C++ sınıfları ekleyebiliriz.
image-4-4
Ayrıca “native-cpp” içerisinde ki metodu çağırmamız için “native” bir metod yapısı bulunmakta. Bizde bu metodu çağırarak TextView içerisine dönen değeri yazıyoruz.
image-4-5
Ekran görüntüsü;
image-4-6
Teşekkürler, görüşmek üzere.

Android Studio ile Kütüphane Oluşturma ve Yayınlama

Merhaba, bu yazımda Android üzerinde kütüphane olacak şekilde proje oluşturup bunu github üzerinde paylaşarak diğer kişilerin kullanımına sunacağız.
1 – Projeye Kütüphane Eklenmesi
Daha önceden bir Android Studio üzerinde proje olduğunu göz önüne alarak başlayacağım. File -> New -> New Module yolunu izleyerek yeni modül ekleme ekranını açıyoruz. Buradan “Android Library” seçeceğiz.image-1
Seçtikten sonra, kütüphaneye bir isim vermemiz isteniyor. “Library” diyerek devam ediyorum. Daha sonra paket ismini değiştirdim. Son olarak “Finish” diyerek oluşturuyoruz.
image-2
İşlem tamamlandıktan sonra, bir Android projesine benzer şekilde proje dizinin de görünecek.
image-3
2 – Layout Dosyası Eklenmesi
“library” dizini altında “res” klasörüne sağ tıklayarak New -> XML -> Layout XML File yolunu izliyoruz. Buradan “test_view” diyerek oluşturdum. 2 Adet “TextView” ekliyorum.
image-4
3 – Java Dosyası Eklenmesi
“library” dizini altında “java” -> paket ismine sağ tıklayarak New -> Java Class diyoruz. “TestView” ismini vererek oluşturdum. Burada XML içerisinde kullandığımız LinearLayout sınıfını extend etmemiz gerekiyor. Bu durumda yeni metotları eklememizi istemekte ve ekliyoruz.
Oluşturmuş olduğumuz XML dosyasını burada tanımlamamız gerekmekte. Bunun için “definition” isminde metot yazıyorum ve “inflate” metodunu çağırıyoruz. Daha sonra oluşturduğumuz her “constructor” metotları içerisinden bu metodumuzu çağırıyoruz.
image-5
Kütüphane kısmı burada bitiyor. Artık bu oluşturduğumuz kütüphaneyi projemizde kullanma kısmına geçiyoruz.
4 – Kütüphaneyi Ekleme
Öncelikle kütüphaneyi projeye dahil etmemiz gerekmekte. Bunun için “app” içerisinde bulunan “build.gradle” içerisine eklememiz gerekmekte. “dependencies” altına
compile project(“:library”)
yapısını ekliyoruz.
image-6
5 – Kütüphaneyi Kullanma
Burada iki ayrı şekilde ekleyebiliriz. Birincisi, XML içerisinde “TestView” yapısını kullanarak; ikincisi ise Java içerisinde “TestView” yapısını kullanarak.
Ben XML içerisinde dahil ettim. Burada direk Java sınıfının yolu ile ekleyebiliyoruz.
image-7
Buraya kadar kütüphaneyi oluşturduk ve kendimiz kullandık. Artık yayınlama kısmına geçelim.
6 – Projeyi Yayınlama
Proje yayınlama kısmında jitpack.io ve github kullanacağız.
6 – 1 Gradle Güncelleme
Gradle-wrapper.proporties içerisinde gradle versiyonu bulunmakta. Jitpack.io en az v3.0 istemekte. Güncel sürümleri http://services.gradle.org/distributions/ üzerinden takip edebilirsiniz. Ben 3.1 –all kullandım.
6 – 2 Root Gradle İşlemleri
buildscript -> dependencies içerisine

ekliyoruz.

image-8
6 – 3 Kütüphane Gradle İşlemleri
Yukarıda verdiğimiz “library” isminin içerisinde bulunan gradle dosyasını açalım ve eklemeleri yapalım. (kbakacak yerine sizin Github hesap kullanıcı adınız.)

image-9

6 – 4 Github ‘a Yollama
Son olarak Github üzerinden projeyi paylaşacağız. Github içerisinde yeni bir proje oluşturup yollayınız. Ben GradleExample oluşturdum. Daha sonra yine Github içerisinde projeyi “release” yapmamız gerekiyor. Orada kullanılacak tag numarası önemli. Her hangi bir sorun olmazsa,
com.github.UserName:ProjectName:Tag
şeklinde kullanabilirsiniz. Benim oluşturduğum gradle linki.

6 – 5 Gradle ile İndirme
Peki kullanıcılar bu dosyayı nasıl indirecekler? Bunun için gradle dosyalarının içerisine allprojects -> repositories altına

eklenmeli ve daha sonra yukarıda oluşan gradle linkini “dependencies” içerisine kopyalayarak kullanabilirler.

Ek Bilgi
Ben oluştururken kullanmış olduğum bir tane gradle dosyasında sorun oluştu. Sizde de böyle bir şey olabilir. Bunu takip etmek için altta ki yapıyı kullanabilirsiniz.
https://jitpack.io/com/github/kbakacak/GradleExample/1.0.2/build.log
https://jitpack.io/com/github/UserName/ProjectName/Tag/build.log
Altta da almış olduğum hata. Tag 1.0.1 üzerinde.
image-10
Küçük bir kaynakça;
https://jitpack.io/docs/
https://github.com/blog/1547-release-your-software
Projeye, Github üzerinden ulaşabilirsiniz.
Umarım yardımcı olur, görüşmek üzere.

Cocos2D-x Nasıl Kurulur?

Cocos2D-x, 2 boyutlu ve açık kaynaklı olarak geliştirilen oyun motorudur. Cocos2D-x C++ veya Lua temel alınmaktadır. Ek olarak Cocos2D-js olarak Javascript versiyonu bulunmaktadır. Bu yazımız da Cocos2D-x Android için kurulumunu Windows ortamında gerçekleştireceğiz. Bu süreç de karşılaştığım 2 hatayı da yazıma ekleyeceğim. IDE Eclipse kullanacağım.Gerekli olan araçların linklerini vererek başlayalım.

www.cocos2d-x.org/download
Adresinden Cocos2D-x V3.4 ‘ü indirebiliriz. Bu sürüm ile birlikte Android 5 desteği de gelmiş. Ancak şu an V3.6 da mevcut.

http://developer.android.com/ndk/downloads/revision_history.html
Adresinden android-ndk-r10c indiriyoruz. R10c olması önemli diğerleri ile çalışmamaktadır(r9d ile çalışıyor ek olarak ancak Android 5 desteği yok).

http://developer.android.com/sdk/index.html#Other
IDE olarak Eclipse kullanacağımız için Android Studio ihtiyacımız yok. Bu yüzden alt taraftan “SDK Tools Only” altında bulunan sisteminize uygun olanı indirebilirsiniz.

https://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2
Adresinden sağ tarafta bulunan “Download Links” üzerinden sisteminize göre olanı indirebilirsiniz. Daha güncel versiyonları da olabilir fark etmez diye düşünüyorum ben çalıştığım ve denediğim için aynı versiyonları vermekteyim 🙂

https://www.python.org/downloads/
Adresinden Python Versiyon 2 olanı indiriyoruz.

http://ant.apache.org/bindownload.cgi
Ve son olarak yukarıdaki adresten Apache Ant indiriyoruz. Bendeki versiyonu 1.9.4. Alt tarafta zip olarak indirebiliriz.

İndirmelerin ardından Cocos2D-x, SDK, NDK, Apache Ant dosyalarını rardan çıkararak ben C içerisine attım, python ise C içerisine kurdum. Eclipse ise istediğiniz yerden erişebilirsiniz. Burada önemli bir nokta bana göre, eğer bilgisayar kullanıcı adında Türkçe karakter bulunuyorsa sorun yaratabiliyor cmd içerisinde o yüzden direk C içerisine kurdum.

Şimdi cmd açıyoruz. Cocos2D-x klasörüne gireceğiz.
cd C:\cocos2d-x-3.4
Girdikten sonra setup.py ile kurulumuna başlayacağız.
İlk olarak NDK yolunu isteyecek.
cd C:\android-ndk-r10c
Ardından SDK yolunu isteyecek.
cd C:\adt-bundle-windows-x86_64-20140321\sdk
ANT yolunu isteyecek, burada önemli olan nokta bin klasörünü veriyoruz.
cd C:\apache-ant-1.9.4\bin
Cocos2d-x Anlatım1 - Temp - 1

Daha sonra cmd yi tekrar başlatalım.
Şimdi artık projeyi açabiliriz.
cd C:\cocos2d-x-3.4 içerisine giriyoruz.
cocos.py new ProjeIsmi –p paketIsmi(com.deneme.test) –l kullanılacakdil(cpp) yazarak tamamlamasını bekliyoruz. -d ile yolu da belirtebiliriz ancak ben cocos2d-x-3.4 klasörü içerisine yerleştirmesini istediğim için orada bıraktım.
Cocos2d-x Anlatım1 - Temp - 2

Artık projemiz hazır. Gelelim Apk almaya ve proje üzerinde işlem yapmaya. Eclipse programını açıyoruz. “File” menüsünden “Import” seçerek Android sekmesi altında “Existing Android Code Into Workspace” tıklıyoruz. “Root Directory” yanından dosya yolunu veriyoruz. Bu dosya yolumuz cocos2d-x-3.4 içerisinde proje ismidir.
Sağ taraftan “Dselect All” yaparak temizleyebiliriz. Ardından ilk olarak
Cocos2d\cocos\platform\android\java
Cocos2d-x Anlatım1 - Temp - 3

Ardından
Proj.android seçiyoruz. Finish diyerek bitiriyoruz.
Cocos2d-x Anlatım1 - Temp - 4

Project menüsünden “Properties” içerisinde Android kısmında alt tarafta Library olarak libcocos2dx yanında yeşil tik var ise çalışması gerekir. Eğer kırmızı çarpı var ise remove yaparak 2. hatamız kısmını uygulamanız gerekmekte. İşlemin sonunda “Add” diyerek eklenmesi gerekebilir.

Eğer her hangi bir hata yoksa ki bende 2 tane çıkarak oldukça uğraştırdı 🙂 Projeye sağ tıklayarak “Run as” yanında “Android Application” C:\cocos2d-x-3.4\TestForCpp\proj.android\bin konumuna apk çıktısını veriyor.
Cocos2d-x Anlatım1 - Temp - 5

Gelelim aldığım ilk hataya. Hata kodunu her hangi bir yere yapıştırmadığım için gösteremeyeceğim ancak PATH olarak python’ı görmüyordu. Çözüm olarak,
– Bilgisayarıma Sağ tıklıyoruz.
– Özellikler
– Gelişmiş sistem ayarları
– Gelişmiş sekmesi altında en altta bulunan Ortam Değişkenleri
– Sistem değişkenleri altında Path değerini buluyoruz.
– Düzenle diyerek en sonuna noktalı virgül(;) ile ayırarak ;C:Python27 ekliyoruz ve tamam diyerek çıkıyoruz. Garanti olması açısından bir bilgisayarı yeniden başlatabiliriz.

2. Hatamız, ProjeIsmi/src/org.cocos2dx.cpp/Appactivity.java/AppActivite altında
org.cocos2dx.lib.Cocos2dxActivity paketini görmez ise,
– Proje ismine sağ tıklıyoruz.
– En altta “properties” içerisine giriyoruz.
– “Java build path” seçiyoruz.
– “source” sekmesine geliyoruz.
– “Link source” diyoruz.
– “Linked folder location” yanında bulunan “Browse” ile dosya yolumuzu seçiyoruz bu dosya yolu C:cocos2d-x-3.4cocosplatformandroidjavasrc oluyor.
– Dosya ismi veriyoruz. Cocos2d-x-source yazdım.
– “Finish” ile bitiriyoruz. Böylelikle paket yolunu vermiş ve eklemiş olduk.
Not : Bu hatamızın çözümünü http://discuss.cocos2d-x.org/t/cant-link-to-cocos2dx-using-eclipse-for-android-on-osx/5149 Bu linkten aldım onu da eklemek isterim 🙂
Cocos2d-x Anlatım1 - Temp - 6

Cocos2d-x Anlatım1 - Temp - 7

Evet, hatalar bitti ise umarım bitmiştir 🙂 Tekrar projeye sağ tıklayarak “Run as” yanında “Android Application” seçimini yaparak apk dosyasını elde edebiliriz.
Hatalarım veya her hangi bir sorunuz için ulaşabilirsiniz.
Teşekkürler, iyi günler.

PHP için PDO ile CRUD İşlemleri

PDO(PHP Data Object) ile veri tabanına daha güvenli sorgular yapmak için PHP 5 ve sonraki sürümlerinde gelmiş olan yeni bir teknolojidir. Bu yazımda da kısaca ekleme, silme, güncelleme ve seçmeyi sorgularından bahsedeceğim.

Aslında her sorgu normal bir MySQL sorgusu gibi yazılacak.“Prepare” komutu ile hazır hale gelecek ve obje olarak dönecek. Bu dönen objeyi de “execute” komutu ile çalıştırılacak ve doğru veya yanlış değer döndürecek. Yani başarılı olursa doğru, başarısız olur ise yanlış değer dönecek.

Veri tabanı tablo ismi uye_seviye ve sütunları da SeviyeID, Seviye ve SeviyeIcon(normal şartlarda resim olacak ancak bu yazıda bu konuya değinmeyeceğim. Yani sadece ismini aldığımızı varsayacağım.) adında olsun. SeviyeID değeri otomatik arttırma olsun ve bu sebepten dolayı sorgulara eklemeyeceğiz.

Ek olarak veri tabanını açarken aktardığımız obje “db” adında olsun.

Ekle

Silme

Düzenleme

Seçme(Tek satıra obje halinde aktarıp onu kullanım şekli)

fetchObject ile birlikte o satırı obje halinde getirilecek ve kullanılmak istendiği zaman $row->Seviye şeklinde kullanılacak.

Seçme(foreach döngüsü ile her elemana sıra sıra erişme ve kullanım şekli)

Burada her satırı tek tek alıp istendiği zaman $row[‘SeviyeIcon’]; şeklinde kullanılacak.