Openframeworks Ders 4 (Klavye Kontrol)
Şekil çizip onu hareket ettirme kısımlarından sonra bu şekli klavye ile kontrol etme üzerine çalışalım. setup(), draw() ve update() fonksiyonları haricindeki fonksiyonlar kullanıcı programla etkileşimi sırasında aktif olmaktadır. keyPressed() ve keyReleased() Fonksiyonları klavyeden girilen herhangi bir değer olduğu anda aktif olmaktadır. Klavyeden herhangi bir tuşa basıldığında keyPressed() fonksiyonu çalışacaktır. Tuştan el çekildiği anda ise keyReleased() fonksiyonu çalışacaktır. Ascii tablosu kullanılarak hangi tuşa basıldığı bulunarak projede herhangi bir değişiklik yapılabilir.
Bu derste amaç yön tuşları ile bir daireyi kontrol etmektir. Yön tuşlarına basıldığı anda hangi yön ise o yöne doğru daire hareket etmeye başlayacak ve bu hareketine el yön tuşlarından çekilecek kadar devam edecektir. Bunu sağlamak için true ya da false değerler olan bool değişkenler atanabilir. Klavye de tuşa basıldığı aman true, tuştan parmak çekildiği zaman false olur. true olduğu müddetçe işlem yapılır. Bunun için #include deyiminden sonra şu değişkenler tanımlanır:
#include “ofApp.h”
bool yukari;
bool asagi;
bool sag;
bool sol;
int xeksen;
int yeksen;
Çizilecek olan daire için ilk değerler verilir ve bool değişkenler başlangıçta hareketsiz olması için false ayarlanır. Bu işlem setup() fonksiyonunda yapılır.
void ofApp::setup(){
xeksen=500;
yeksen=500;
yukari=false;
asagi=false;
sag=false;
sol=false;
}
draw() fonksiyonunda çizimin rengi ve şekli ayarlanır.
void ofApp::draw(){
ofSetColor(255,0,0);
ofCircle(xeksen,yeksen,30);
}
Klavyeden bir tuşa basıldığında keyPressed() fonksiyonu çalışmaktadır. Ve bir tuşa basıldığı zaman fonksiyon “key” isimli değişkene ascıı karşılığını döndürür. Yani klavyeden bir tuşa basıldığında hangi tuşa basıldıysa “key” değişkeni o tuşun ascıı karşılığına eşit olacaktır. “key” değişkeni if komutuyla kontrol edilerek istenilen tuşa basıldığında istenilen eylemin gerçekleşmesi sağlanabilir. Bunun için keyPressed() fonksiyonu şöyle olmalıdır:
void ofApp::keyPressed(int key){
if (key==357)
{
yukari=true;
}
if (key==356)
{
sol=true;
}
if (key==358)
{
sag=true;
}
if (key==359)
{
asagi=true;
}
}
357 yukarı yön tuşunun ascıı karşılığıdır. 356 sol, 358 aşağı ve 359 sağ yön tuşlarının ascıı karşılıklarıdır. klavyeden bir tuşa basıldığında bu sayılardan birine eşitse o tuşa basılmış demektir. Ve bool değişkenini aktif eder. O tuştan parmak çekildiği taktirde pasif olur. ve bu da keyReleased() fonksiyonu ile sağlanır. bu fonksiyondaki kodlar keyPressed() fonksiyonuna benzerlik göstermekle beraber bool değişkenleri true iken false haline getirilir. Yani tuşa basılı kaldığı müddetçe yukari, asagi, sag veya sol değişkenleri true olarak kalır. keyReleased() fonksiyonunun kullanımı aşağıdaki gibidir.
void ofApp::keyReleased(int key){
if (key==357)
{
yukari=false;
}
if (key==356)
{
sol=false;
}
if (key==358)
{
sag=false;
}
if (key==359)
{
asagi=false;
}
}
keyPressed() gibi kullanılmıştır. bool değişkeni true olduğu müddetçe update() fonksiyonunda yukarı, aşağı, sağ veya sola hareket için işlem yapılacaktır. update() fonksiyonundaki kodlama ise şöyledir:
void ofApp::update(){
if (yukari)
{
yeksen-=4;
}
if (asagi)
{
yeksen+=4;
}
if (sag)
{
xeksen+=4;
}
if (sol)
{
xeksen-=4;
}
}
Openframeworks resim yapısı da matrissel bir dizimle oluşturulmuştur. Yani y ekseni yukarıdan aşağı doğru artmaktadır. x ekseni ise soldan sağa doğru artış sağlamaktadır. Yani update() fonksiyonunda yukarı aktif ise yeksen değişkeninden 4 çıkarılır. Aşağıda ise 4 eklenir. Aynı şekilde sağ için xeksen’e 4 eklenir, sol için ise çıkarılır. Uygulama çalıştırıldığında ortada bir daire olduğu ve yön tuşlarıyla kontrol edilebildiği görülecektir.