- 29 Mar 2020
- 408
- 5
Aynı anda iki tuşa basıldığını algılama problemi tek c++'ya özel değildir. JS'de de bu sorunu yaşamıştım. Her ikisinde de oyun kodlarken W,A,S,D tuşlarından mesela W ve A'ya aynı anda basıldığında ya sola gitmeye devam ediyordu ya da yukarı gitmeye devam ediyordu ikisini aynı anda anlayamıyordu.
Buradaki: https://en.sfml-dev.org/forums/index.php?topic=15477.0
yöntemle sorun çözülüyo ama eğer benim gibi oyun kodlamaya çalışıyorsanız sürekli basmayı algılamıyor... Ben kodu vereceğim algoritmayı anlaması size kaldı. Çünkü ben deneye yanıla düşüne buldum ama algoritmasını bende tam anlamadım henüz ama işe yarıyo
Kod:
[COLOR="Red"]bool moving_down = false,moving_up=false,moving_left=false,moving_right=false;
while (window.isOpen()){
sf::Event event;
while (window.pollEvent(event)){
switch(event.type){
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch(event.key.code){
case sf::Keyboard::D:
moving_right=true;
break;
case sf::Keyboard::A:
moving_left=true;
break;
case sf::Keyboard::W:
moving_up=true;
break;
case sf::Keyboard::S:
moving_down=true;
break;
}
break;
case sf::Event::KeyReleased:
switch(event.key.code){
case sf::Keyboard::D:
moving_right=false;
break;
case sf::Keyboard::A:
moving_left=false;
break;
case sf::Keyboard::W:
moving_up=false;
break;
case sf::Keyboard::S:
moving_down=false;
break;
}
break;
}
}
int x=0,y=0;
if(moving_down&&moving_right){
y+=3;
x+=3;
}else if(moving_up&&moving_right){
y-=3;
x+=3;
}else if(moving_right){
x+=3;
}
if(moving_left&&moving_down){
x-=3;
if(!moving_right){
y+=3;
}
}else if(moving_up&&moving_left){
if(!moving_right){
y-=3;
}
x-=3;
}else if(moving_left){
x-=3;
}
if(!moving_right&&!moving_left&&moving_down){
y+=3;
}if(!moving_right&&!moving_left&&moving_up){
y-=3;
}
kazim.move(x,y);
[/COLOR]
bu "kazim" tahmin edebileceğiniz üzere sprite değişkeni adıdır. Her neyse oraya takılmanıza gerek yok sfml kullananlar anlayacaklardır zaten. Başkaları gereksiz yere vakit kaybedip benim gibi içleri şişmesin diye paylaşmak istedim. Teşekkürler
Moderatör tarafında düzenlendi: