C++(SFML) Çıldırtan 2 Tuş Aynı Anda Basma Problemi

whatamnotsaying

Katılımcı Üye
29 Mar 2020
408
5
stfvlecgmmp4dso3v0iv.jpg


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 :D

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:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.