Openframeworks Ders 5 (Mouse Hareketi)

talhakoc 28 Ağustos 2015Openframeworks

Daha önceki derslerde draw() fonksiyonuna şekil çizildi ve klavyeden alınan veriye göre hareket ettirildi. Bu derste ise mouse’tan alınan verilere göre program şekillendirilecektir. Programınızı aşağıdaki gibi şekillendirin.

void testApp::mouseMoved(int x, int y){
    cout << "Mouse hareket halinde ve konumu: " << x << ", " << y << endl;
}
void testApp::mouseDragged(int x, int y, int button){
    cout << "Mouse sürükleniyor, yani butona basili tutuluyor, konum: " << x << ", " << y << " button: " << button << endl;
}
void testApp::mousePressed(int x, int y, int button){
    cout << "Mouse butonuna basildi, konum: " << x << ", " << y << " button: " << button << endl;
}
void testApp::mouseReleased(int x, int y, int button){
     cout << "Mouse butondan parmak cekildi, konum: " << x << ", " << y << " button: " << button << endl;
}
Yukarıdaki programı çalıştırın ve mouse olaylarındaki değişimleri gözlemleyin. mouseMoved() fonksiyonu mouse hareket halindeyken çalışacaktır. Fonksiyonun içinde mousun penceredeki konumunu x ve y değişkenlerine döndürecektir.
mouseDragged() fonksiyonu ise mousun herhangi butonuna basılı haldeyken çalışacaktır. Bu fonksiyon bir dosya sürüklemek gibi amaçlarla kullanılabilir. mouseMoved() fonksiyonu gibi mousun konumunu x ve y değişkenlerine döndürür. Aynı zamanda basılan butonun hangisi olduğunu da 0-1-2 şeklinde kendine göre sıralayarak döndürür. Örneğin sol tık “0”değerini almaktadır.
mousePressed() ise mousun herhangi bir butonuna basıldığı anda çalışacaktır. Bu da mouseDragged() gibi x ve y konumları ve basılan buton değerleri döndürecektir.
mouseReleased() ise herhangi bir butonuna basılmış olan mousun o butondan parmak çekildiği anda çalışan fonksiyondur. Bu da mouseDragged() gibi x, y konumları ve hangi butondan parmağın çekildiği bilgileri verir.
Şimdi klavyeden “s” tuşuna basıldığı anda mouse ile şeklin sürüklenebildiği ve “b” tuşuna basıldığı anda mouse ile boyutlanabildiği bir uygulamayı inceleyelim.
#include “ofApp.h”;
int xeksen;
int yeksen;
int yaricap;
bool surukle;
bool boyutla;
bool surukleak;
bool boyutlak;
//————————————————————–
void ofApp::setup(){
xeksen=500;
yeksen=500;
yaricap=50;
surukle=false;
boyutla=false;
surukleak=false;
boyutlak=false;
}//————————————————————–
void ofApp::draw(){
ofSetColor(0,255,0);
ofCircle(xeksen,yeksen,yaricap);
}

//————————————————————–
void ofApp::keyPressed(int key){
if (key==’s’)
{
if(surukle)
surukle=false;
else
surukle=true;
}
if (key==’b’)
{
if(boyutla)
boyutla=false;
else
boyutla=true;
}
}

//————————————————————–
void ofApp::mouseDragged(int x, int y, int button){
if (button==0)
{
if (surukle&&x<xeksen+yaricap&&x>xeksen-yaricap&&y>yeksen-yaricap&&y<yeksen+yaricap)
{
surukleak=true;
boyutlak=false;
}
if (surukleak)
{
xeksen=x;
yeksen=y;
}
if (boyutla)
{
float mesafe=ofDist(xeksen,yeksen,x,y);
if (abs(mesafe-yaricap)<2)
{
boyutlak=true;
surukleak=false;
}
if (boyutlak)
{
yaricap=mesafe;
}
}
}
}

//————————————————————–
void ofApp::mouseReleased(int x, int y, int button){
if (button==0)
{
surukleak=false;
}
}

Yeni bir çalışma oluşturun ve ilgili yerleri yukarıdaki gibi güncelleyin. Açılan uygulamada “s” tuşuyla sürüklemeyi aktif edebilir ve cismi mouse ile tutarak sürükleyebilirsiniz. tekrar “s” tuşuna bastığınızda sürükleme pasif olacaktır. “b” tuşuna bastığınızda dairenin sınırından tutup ileri ya da geri çektiğinizde çemberin sınırının sürüklediğiniz yere gelerek dairenin yarıçapının değiştiğini gözlemleyebilirsiniz. Şimdi uygulamayı inceleyelim.
#include ile başlayan satırın altında oluşturulacak olan şeklin x ve y eksen bilgileri ve yarıçap bilgileri için değişkenler oluşturulmuştur. Ayrıca klavyeden “s” veya “b” ye basıldığında gerekli eylemlerin aktifleştirilmesi için bool tipinde değişkenler tanımlanmıştır.
setup() fonksiyonunda bu değişkenlere ilk değerler atanmıştır. Beklenileceği üzere bool tipi değişkenler false değerini alacaklardır.
draw() fonksiyonunda çizilecek olan şekle renk ayarlayıp tanımlanan değişken değerlerinde koordinat ve yarıçapında daire çizilmiştir.
keyPressed() fonksiyonunda bir önceki derste gösterildiği gibi klavyeden basılan tuşları kontrol etmektedir. Bir önceki derste yön tuşları kullanıldığı için ascıı karşılıkları kullanılmıştır. Ancak eğer bu değer bir harf ya da rakamsa tek tırnaklar arasında istenilen karaktere eşitlenebilir. key==’s’ ifadesinin anlamı key değeri “s” harfinin ascii karşılığına eşit olduğunda işlem yap anlamı taşımaktadır. Bu fonksiyonun içinde klavyeden s’e basıldığında sürükleme aktifse pasif, pasifse aktif yapar. Bunu surukle değişkeni ile sağlar. Aynı zamanda “b” tuşuna basıldığında boyutlandırma aktifse pasif, pasifse aktif yapar ve bunu da boyutla değişkeni ile sağlar.
keyDragged() fonksiyonunda görüldüğü üzere en başta buton kontrolü vardır. Hatırlanacağı mouse üzerindeki butonlar “0” dan başlayarak sıralanmıştı. Genel olarak sol tıklama yapan butonun değeri “0” dır. mouseDragged() fonksiyonu ise butona basılı kaldığı müddetçe çalışacaktır.
if (button==0) keyDragged() fonksiyonu “0” dan başlayarak basılan butonun numarasını döndürüyordu. Bu numara “0” a eşitse yani sol butona basılı ise altındaki işlemleri yapacaktır. Bu komutlarda ise eğer sürükleme eylemi aktifse ve mouse dairenin üstündeyse şeklin xeksen ve yeksen parametrelerini mouse konumuna güncellenecektir. Yani daire mouse un bulunduğu konuma gelecektir. Ve eğer mouse un bulunduğu konum ile dairenin merkezi arasındaki mesafe ile dairenin yarıçağı arasındaki mesafe az ise mouse imleci dairenin sınırlarınında demektir ve boyutlama eylemi aktifse dairenin yeni yarı çapı mouse konumu ile dairenin merkezi arası olacaktır. Böylelikle dairenin çapı değiştirilebilecektir.
mouseReleased() fonksiyonunda ise butondan parmak çekildiği anda sürükleak değişkeni false durumuna gelecektir. Yani sadece mouse şeklin üstündeyken ve mouse tıklı iken eylemin gerçekleşmesi sağlanmaktadır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Arama

Twitterda

© 2014 - Talha Koç. All Rights Reserved. Powered by Wordpress and Design by We Create Web Designs