THT DUYURU

C/C++ Çok paradigmalı ve çok kullanılan C/C++ dillerinin dökümanlarının paylaşım alanı.

Seçenekler

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

whatamnotsaying - ait Kullanıcı Resmi (Avatar)
Katılımcı Üye
Üyelik tarihi:
03/2020
Mesajlar:
411
Konular:
47
Teşekkür (Etti):
232
Teşekkür (Aldı):
148
Ticaret:
(0) %
0
219
3 Gün önce
#1


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:
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);
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
Konu Eronmay tarafından (2 Gün önce Saat 02:36 ) değiştirilmiştir.

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler