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

Ruszanie kamerą w grze 2D

Ostatnio zmodyfikowano 2020-03-16 21:22
Autor Wiadomość
Żerbo
Temat założony przez niniejszego użytkownika
Ruszanie kamerą w grze 2D
» 2020-03-16 14:48:08
Mam problem, bo chcę aby grze podświetlały się te kwadraty na których jest myszka obecnie.
Chcę również aby móc kamerę przesuwać i problem pojawia się gdy już tą kamerę przesunę, wtedy myszka się tak jakby rozjeżdża z danym kwadratem. Wygląda to tak, że na starcie programu tam gdzie najadę to dany kwadrat zmienia kolor, natomiast gdy przesunę kamerę to mysz mysz jest np w rogu ekranu a podświetlony kwadrat jest w zupełnie innym miejscu. Gdy nie ruszam myszką podczas ruchu kamery to kwadrat zostaje w miejscu a mysz idzie tam gdzie kamera. A chciałbym aby to dzialo się równocześnie. Zawsze tam gdzie mysz tam i podświetlony kwadrat. Pomocy!

kod Okna i kamery:
C/C++
Okno.create( VideoMode( 900, 600, 32 ), "Projekt Gry" );
Okno.setFramerateLimit( 60 ); Okno.setActive( true );

View cam;
cam.setSize( Okno.getSize().x, Okno.getSize().y );
cam.setCenter( cam.getSize().x / 2, cam.getSize().y / 2 );

Ruch kamery
C/C++
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::W )
{
    cam.move( 0, - 15 ); Okno.setView( cam );
}
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::S )
{
    cam.move( 0, 15 ); Okno.setView( cam );
}
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::A )
{
    cam.move( - 15, 0 ); Okno.setView( cam );
}
if( Akcja.type == Event::KeyPressed && Akcja.key.code == Keyboard::D )
{
    cam.move( 15, 0 ); Okno.setView( cam );
}
P-176374
pekfos
» 2020-03-16 18:10:39
A kod od myszki?
P-176378
Żerbo
Temat założony przez niniejszego użytkownika
» 2020-03-16 18:41:10
To jest kod odpowiedzialny za ruch postaci i za podświetlenie pola przy najechaniu myszą.
C/C++
int PosX = Mouse::getPosition( Okno ).x; int y = PosX / 64;
int PosY = Mouse::getPosition( Okno ).y; int x = PosY / 64;

for( int a = 0; a < 30; a++ )
{
    for( int b = 0; b < 30; b++ )
    {
        if( Mapa[ a ][ b ].myszka == true )
             Mapa[ a ][ b ].myszka = false;
       
    }
}

if( Mapa[ x ][ y ].obraz.getGlobalBounds().contains( PosX, PosY ) )
{
    Mapa[ x ][ y ].myszka = true;
    //Ruch postaci po mapie ogolnej
   
    if( Ruch == true && Akcja.type == Event::MouseButtonPressed && Akcja.mouseButton.button == Mouse::Left )
    {
        Postac.x = x; Postac.y = y;
    }
}
P-176379
pekfos
» 2020-03-16 19:44:19
Pobierasz pozycję myszki we współrzędnych okna, a nie sceny.
https://www.sfml-dev.org​/tutorials/2.5/graphics-view.php
C/C++
// get the current mouse position in the window
sf::Vector2i pixelPos = sf::Mouse::getPosition( window );

// convert it to world coordinates
sf::Vector2f worldPos = window.mapPixelToCoords( pixelPos );
P-176380
Żerbo
Temat założony przez niniejszego użytkownika
» 2020-03-16 21:22:26
Dziękuje!!
P-176381
« 1 »
  Strona 1 z 1