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ć. |
|
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. |
|
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. |
|
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 |
|
SeaMonster131 |
» 2012-06-26 15:23:00 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 :) |
|
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. |
|
LukiPRO |
» 2012-06-26 19:34:01 Spróbuj tak Tworzenie view i ustawianie jego pozycji 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 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 );
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 |
|
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. |
|
« 1 » |