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

[SFML 1.6] Problem ze współrzędnymi po wycentrowaniu sprite'a

Ostatnio zmodyfikowano 2012-04-28 10:34
Autor Wiadomość
amator
Temat założony przez niniejszego użytkownika
[SFML 1.6] Problem ze współrzędnymi po wycentrowaniu sprite'a
» 2012-04-26 07:36:01
Witam wszystkich!

Mam sprite'a, którego rozmiar został zmieniony(Resize) i którego muszę wycentrować dokładnie na jego połowę (szerokość / 2, wysokość / 2).
Problem polega na tym, że przed centrowaniem jest wszystko OK, a po centrowaniu nigdzie tego sprite'a nie widać (nawet mimo tego, że View przesuwa się w prawo) :(
Teoretycznie dostosowałem współrzędne do centrowania, bo biorę pod uwagę centrowanie:

tempBox.mSprite.SetImage(mPlatformImage);
tempBox.mSprite.Resize(tempHeight.mEndPoint - tempHeight.mStartPoint, 32);
tempBox.mSprite.SetCenter(tempBox.mSprite.GetSize().x / 2, tempBox.mSprite.GetSize().y / 2);
tempBox.mSprite.SetPosition(tempHeight.mStartPoint - tempBox.mSprite.GetCenter().x, tempHeight.mHeight - tempBox.mSprite.GetCenter().y);

mStartPoint = -16
mEndPoint = 1520
mHeight = 402

szerokość mSprite po resize = 1536
wysokość mSprite po resize = 32

Rozdzielczość okna: 640x480

Dodam jeszcze, że View, który mam ustawiony, też jest wycentrowany na środek ekranu.
View przesuwa się u mnie co cykl o +2 w osi X.

Czy mógłby mi ktoś pomóc z dobraniem poprawnych współrzędnych?
Proszę o pomoc

EDIT:
Odtworzyłem problem na prostym przykładzie:


 #include <SFML/Graphics.hpp>
 
 int main()
 {
     sf::RenderWindow *window = new sf::RenderWindow(sf::VideoMode(640, 480), "Problemik");
 
     sf::Image image;
sf::Sprite sprite;
    
if (!image.LoadFromFile("problem.png"))
         return 1;
    
sprite.SetImage(image);
sprite.Resize(1536, 32);
sprite.SetCenter(sprite.GetSize().x / 2, sprite.GetSize().y / 2); // Tutaj jest problem
sprite.SetPosition(1500 - sprite.GetCenter().x, 300 - sprite.GetCenter().y);
 
     while (window->IsOpened())
     {
         sf::Event Event;
        
while (window->GetEvent(Event))
         {
             if (Event.Type == sf::Event::Closed)
                 window->Close();
         }
 
         window->Clear();
         window->Draw(sprite);
         window->Display();
     }
 
     return 0;
 }
Za problem.png można podstawić cokolwiek.
P-55361
fensz
» 2012-04-26 22:38:53
u mnie wygląda to tak, ale nie wiem co chcesz dokładnie osiągnąć

C/C++
sf::View View( sf::FloatRect( 0, 0, 1024, 768 ) );
View.SetCenter( 640, 590 ); //centrowanie widoku
P-55465
amator
Temat założony przez niniejszego użytkownika
» 2012-04-27 06:47:51
Przeczytałeś temat? Tak? To przeczytaj jeszcze dziesięć razy ze zrozumieniem.
Za takie "porady" powinna być "nagroda". Kompletnie nic nie wnosisz do tematu, ewentualnie chaos.

Piszę o tym, że SFML prawdopodobnie ma problem z centrowaniem dużego sprite'a, a Ty mi piszesz nie wiadomo o czym.
Wracając do tematu: można zamienić SetCenter z Resize kolejnością i wtedy coś widać, ale jeśli sprite przed Resizem ma 256 w szerokości to on wycentruje na 128, a po Resize nie zaktualizuje centrowania. Korygowanie tego to chyba jednak nie jest wyjście?
P-55469
waxx
» 2012-04-28 10:34:18
probowales najpierw centrowac potem resizowac?

edit
jak nie chcesz obracac to wgl nie centruj
P-55511
« 1 »
  Strona 1 z 1