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

[SFML] Scrollowanie i zoom mapy izometrycznej

Ostatnio zmodyfikowano 2012-06-26 22:33
Autor Wiadomość
Schulze13
Temat założony przez niniejszego użytkownika
[SFML] Scrollowanie i zoom mapy izometrycznej
» 2012-06-25 14:55:13
Witam.
Ostatnio zachciało mi się scrollowania. Aktualnie wygląda to tak: za pomocą strzałek zwiększam, zmniejszam zmienne X i Y, następnie są przekazywane do funkcji rysującej i względem nich rysowana jest mapa. Sprawdzane też jest czy segment znajduje się w obrębie okna, jeśli nie nie jest rysowany (bez tego mam -25 FPS). Problem gdy chce przybliżać i oddalać, mogę to zrobić za pomocą jakiś tam przekształceń bla bla bla... wolne. Zapewne można to zrobić za pomocą sf::View, którego obsługa topornie mi przychodzi... ani trochę mi nie przychodzi. Pytanie: jak poprawnie mogę się obsłużyć (i jak (i czy można)) sf::View aby przesuwać mapę i ją przybliżać.
P-59074
Drraven
» 2012-06-25 15:27:22
Kiedy ja sfml używałem :D
Ale od przybliżania masz zoom, chyba, że nie o to ci chodzi.
P-59075
Schulze13
Temat założony przez niniejszego użytkownika
» 2012-06-25 18:14:46
Zgadza się. Niestety mi ta metoda nie działa. Albo mam ją w złym miejscu, albo źle obiekt inicjalizuje.
P-59092
diego997
» 2012-06-26 11:38:08
Wiesz jak ja nie ogarniałem sf::View to robiłem w taki sposób, że każdy obiekt przesuwałem osobno. Straszne co ;p ? Patrz dam ci linka do swojego projektu który wstrzymałem jakiś miesiąc temu. Tam od 0:50 jest scrollowanie za pomocą strzałek, chodzi ci o mniej więcej coś takiego? Jak tak to napisz wytłumaczę ci jak to zrobiłem.


LINK: http://www.youtube.com/watch?v=3MtU2RSNyBg
P-59140
SeaMonster131
» 2012-06-26 15:23:00
C/C++
// img, pozycja X, pozycja Y, skalowanie X, skalowanie Y:
DrawMap_Scale( img, x * scal - scrollX, y * scal - scrollY, scal, scal );

Nie miałem nigdy styczności tak bliskiej z SFML aby powiedzieć choć troche słów o sf::View, lecz w Allegro5 robiłem tak jak powyżej - po prostu na mapie kafelkowej skalowałem każdy kafelek i rysowałem go na podanej pozycji :)
P-59147
Schulze13
Temat założony przez niniejszego użytkownika
» 2012-06-26 16:19:57
Hmmm... tylko że moja mapa wygląda tak
Aktualnie udaje mi się scrollować. Problem z zoomem.
P-59160
LukiPRO
» 2012-06-26 19:34:01
Spróbuj tak

Tworzenie view i ustawianie jego pozycji
C/C++
sf::Vector2f Center( App.getSize().x / 2, App.getSize().y / 2 );
sf::Vector2f HalfSize( 400, 300 ); //
sf::View View( Center, HalfSize );


Teraz scrolowanie mapy i zoom i pętli gry
C/C++
// Scrolowanie mapy
float Offset = 200.f * timer.restart().asMicroseconds() / 100000;
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) View.move( 0, Offset );

if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) View.move( 0, - Offset );

if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) View.move( Offset, 0 );

if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) View.move( - Offset, 0 );

// Zoom + i -
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Add ) ) View.zoom( 0.999f );

if( sf::Keyboard::isKeyPressed( sf::Keyboard::Subtract ) ) View.zoom( 1.001f );

I przed App.Display(); (czy jak tam nazwałeś okno)
App.setView( App.getDefaultView() );



U mnie działa ale nie gwarantuje że zadziała u Ciebie.
jbc to używam SFML 2.0
P-59171
Schulze13
Temat założony przez niniejszego użytkownika
» 2012-06-26 22:33:18
SFML 1.6. Czyżby Offset służy zapobieganiu nie równomiernemu przesuwaniu?

@edit
Trochę było z tym zachodu ( get na Get ), ale działa. Teraz pytanie: czy kawałek sprite znajduje się w rect. Na razie mam coś takiego O.o
if( Obraz.Contains(( teren.GetPosition().x - 64 ),( teren.GetPosition().y ) ) || Obraz.Contains(( teren.GetPosition().x + 64 ),( teren.GetPosition().y + 128 ) ) || Obraz.Contains(( teren.GetPosition().x + 64 ),( teren.GetPosition().y ) ) || Obraz.Contains(( teren.GetPosition().x ),( teren.GetPosition().y + 128 ) ) || Obraz.Contains(( teren.GetPosition().x ),( teren.GetPosition().y - 128 ) ) )
Wyświetla się cała, ale czy można zrobić to prościej?

@edit
Rozwiązane.
P-59203
« 1 »
  Strona 1 z 1