Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dwa problemy - Obrót koła i wystrzał pocisków [ SFML 2.1 ]

Ostatnio zmodyfikowano 2013-12-27 13:05
Autor Wiadomość
Darono
Temat założony przez niniejszego użytkownika
Dwa problemy - Obrót koła i wystrzał pocisków [ SFML 2.1 ]
» 2013-12-27 00:58:57
Witam. Otóż stworzyłem koło - sf::CircleShape, oraz lufe sf::Sprite. Leżą one obok siebie i pierwszy problem polega na tym że gdy nasze koło obraca się o np. 69% to żeby lufa obracała się razem z nim.
Drugi mój problem polega na tym, iż gdyby wieżyczka (koło i lufa) namierzyły gracza, to żeby wystrzelały do niego pociski. Nie chodzi mi tu o strzały w góre,dół,lewo,prawo, ew. na skos, tylko o strzał związany z kątem lufy. Sorka jeżeli nie wyrażam się jasno, ale trochę trudno jest mi to przedstawić. Mój aktualny kod wygląda tak
EDIT: W kodzie jest orginX i Y, dlatego bo próbowałem zrobić setOrgin(), ale po użyciu tego lufa nawet nie pojawiała się na ekranie.

C/C++
int _tmain( int argc, _TCHAR * argv[] )
{
   
    sf::Event evente;
    sf::RenderWindow okno( sf::VideoMode( 500, 500, 32 ), " TURRET TEST " );
    sf::Texture textturreta;
    textturreta.loadFromFile( "xxx" ); //ścieżka was chyba nie obchodzi :P
    sf::CircleShape turret( 20.0, 100 );
    turret.setTexture(( sf::Texture * ) & textturreta );
    turret.setPosition( 240, 240 );
   
   
    sf::Texture Lufatext;
    Lufatext.loadFromFile( "xxx" );
   
    sf::Sprite lufa;
    lufa.setTexture( Lufatext );
   
   
   
    int orginY = turret.getPosition().y + 20;
    int orginX = turret.getPosition().x + 20;
   
    lufa.setPosition( turret.getPosition().x + 18, turret.getPosition().y + 35 );
   
    while( okno.isOpen() )
    {
        while( okno.pollEvent( evente ) )
        {
           
           
           
        }
       
       
       
        okno.display();
        okno.clear();
        okno.draw( turret );
        okno.draw( lufa );
    }
   
    return 0;
}
Liczę na pomoc :)
P-100270
pekfos
» 2013-12-27 11:07:36
EDIT: W kodzie jest orginX i Y, dlatego bo próbowałem zrobić setOrgin(), ale po użyciu tego lufa nawet nie pojawiała się na ekranie.
http://sfml-dev.org​/documentation/2.1​/classsf_1_1Transformable.php#a56c67bd80aae8418d13fb96c034d25ec

Co do strzelania: Poszukaj.. Było o tym tyle tematów, że tego nie da się nie znaleźć.
P-100276
Darono
Temat założony przez niniejszego użytkownika
» 2013-12-27 11:26:04
Dobra z tym strzelaniem to raczej znajdę coś na forum, ale o tym linku co mi podałeś to dawno wiedziałem i czytałem ale problem leży w tym że kompletnie nie rozumiem jak to działa. Bo jeżeli domyślnie setOrigin() ustawiony jest na 0,0 ,a ja ustawie to na 20,20 ,to logicznie myśląc ustawienie wtedy sprit'a na 1,1 ustawi mi go patrząc na domyślne ustawienie na pozycje 21,21. Może mi ktoś (najlepiej na obrazku) wytłumaczyć ?
P-100282
pekfos
» 2013-12-27 11:32:57
a ja ustawie to na 20,20
Nie ustawiasz na 20.
P-100283
Darono
Temat założony przez niniejszego użytkownika
» 2013-12-27 11:46:28
co to znaczy że nie ustawiam ? ja teraz ustawiłem to tak :
C/C++
lufa.setOrigin( turret.getPosition().x + 20, turret.getPosition().y + 20 );
Czyli co to znaczy ? że środkiem jest środek koła - turreta, a jeżeli teraz dam lufie funkcje rotate() to będzie obracać się wookół koła ? Co w takim razie z setPosition(), jak wtedy działa ta funkcja ?
P-100286
pekfos
» 2013-12-27 13:05:42
co to znaczy że nie ustawiam ?
http://sfml-dev.org​​/documentation/2.1​​/classsf_1_1Transformable.php#a56c67bd80aae8418d13fb96c034d25ec
The coordinates of this point must be relative to the top-left corner of the object, and ignore all transformations (position, scale, rotation). The default origin of a transformable object is (0, 0)
20 to 20, a nie 20 + pozycja czegośtam.
P-100293
« 1 »
  Strona 1 z 1