DejaVu |
» 2011-06-04 18:05:47 W przykładzie nie ma dwóch sprajtów. Wniosek jest prosty - w kodzie swoim masz błąd :)
/edit:
Ba nawet widać gdzie:
naszSprajt.TransformToLocal(...)
a potem:
/edit2:
Zagalopowałem się ;p
Faktem jest, że obiekt naszSprajt pewnie masz 2x u siebie zamiast zmienić go na inny. |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-06-04 18:09:28 Mam 2 inne sprajty z innym obrazkiem. |
|
DejaVu |
» 2011-06-04 18:10:08 To nie jest tematem tego wątku. |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-06-04 18:12:39 Mam 2 inne sprajty z innym obrazkiem i mam ten kod skopiowany i zmieniony pod drugiego sprajta. |
|
DejaVu |
» 2011-06-04 18:14:17 Więc wklej kod, bo tak to będziemy jeszcze długo pisali i nic z tego nie wyniknie. Chciałbym zauważyć jeszcze, że przykład z kursu działa, więc to jest ewidentnie Twój błąd we własnym kodzie. |
|
mar3 Temat założony przez niniejszego użytkownika |
» 2011-06-04 18:20:05 Oto mój kod:
- w mainie gra game;
sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::MouseButtonPressed && zdarzenie.MouseButton.Button == sf::Mouse::Left ) game.czyKliknietoKarte( zdarzenie.MouseButton.X, zdarzenie.MouseButton.Y ); }
- w klasie gra void gra::czyKliknietoKarte( int mouseX, int mouseY ) { for( int i = 0; i < karty.size(); i++ ) { sf::Vector2f punkt = karty[ i ].czyKlikni ę to( mouseX, mouseY ); if( punkt.x >= 0 && punkt.y >= 0 && punkt.x <= SZER_KARTY && punkt.y <= WYS_KARTY && !karty[ i ].czyOdkryta() ) { if( ileOdkrytych < 2 ) { karty[ i ].odkryj(); ileOdkrytych++; odkryte[( ileOdkrytych - 1 ) ] = i; } return; } } } - w klasie karta sf::Vector2f karta::czyKlikni ę to( int mouseX, int mouseY ) { return kartaSprajt.TransformToLocal( sf::Vector2f(( float ) mouseX,( float ) mouseY ) ); } /Edit:
To gra w memory (ztąd odkryta/zakryta karta) |
|
DejaVu |
» 2011-06-04 18:21:12 hmm... lol :P faktycznie jest błąd o którym mówiłeś :)
/edit:
Tak pi razy drzwi wychodzi na to, że trzeba przeskalować pozycję kursora czy coś w ten deseń.
/edit2:
#include <SFML/Graphics.hpp>
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" ); sf::Image obrazek; obrazek.Create( 30, 60, sf::Color::White ); sf::Image obrazek2; obrazek2.Create( 20, 20, sf::Color::White ); sf::Sprite naszSprajt2; naszSprajt2.SetImage( obrazek2 ); naszSprajt2.SetScale( 5, 5 ); naszSprajt2.SetPosition( 100, 100 ); sf::Sprite naszSprajt; naszSprajt.SetImage( obrazek ); naszSprajt.SetPosition( 400, 300 ); naszSprajt.SetScale( 5, 5 ); naszSprajt.SetCenter( obrazek.GetWidth() / 2.0f, obrazek.GetHeight() / 2.0f ); naszSprajt.SetColor( sf::Color( 0x00, 0xff, 0x00, 0x80 ) ); while( oknoAplikacji.IsOpened() ) { sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) oknoAplikacji.Close(); } oknoAplikacji.Clear( sf::Color::Black ); naszSprajt.Rotate( 0.01f ); const sf::Input & sterowanie = oknoAplikacji.GetInput(); sf::Vector2f mysz = oknoAplikacji.ConvertCoords( sterowanie.GetMouseX(), sterowanie.GetMouseY() ); { sf::Vector2f punkt = naszSprajt.TransformToLocal( mysz ); bool bCzyZaznaczony =( punkt.x >= 0 && punkt.y >= 0 && punkt.x <= obrazek.GetWidth() && punkt.y <= obrazek.GetHeight() ); naszSprajt.SetColor( bCzyZaznaczony ? sf::Color::Green: sf::Color::Red ); } { sf::Vector2f punkt = naszSprajt2.TransformToLocal( mysz ); bool bCzyZaznaczony =( punkt.x >= 0 && punkt.y >= 0 && punkt.x <= obrazek2.GetWidth() && punkt.y <= obrazek2.GetHeight() ); naszSprajt2.SetColor( bCzyZaznaczony ? sf::Color::Green: sf::Color::Red ); } oknoAplikacji.Draw( naszSprajt ); oknoAplikacji.Draw( naszSprajt2 ); oknoAplikacji.Display(); } return 0; } |
|
malan |
» 2011-06-04 18:37:47 Ja rozwiązałem to tak: bool Button::lClicked( const sf::Input & input ) { return( input.IsMouseButtonDown( sf::Mouse::Left ) && input.GetMouseX() >= spritePositionXY.x && input.GetMouseX() <= spritePositionXY.x + spriteWidthHeight.x && input.GetMouseY() >= spritePositionXY.y && input.GetMouseY() <= spritePositionXY.y + spriteWidthHeight.y ); } ... i żadnego błędu nie mam ;p |
|
| 1 « 2 » 3 |