Houston Temat założony przez niniejszego użytkownika |
[SFML 2.0] przekazywanie sf::Image za pomocą wskaźnika / referencji » 2012-10-22 22:14:40 Witam, chciałem przekazać obrazek do funkcji sprawdzającej kolizje perPixel za pomocą wskaźnika ale wywala mi przy tym aplikację, nie ma żadnych błędów ani ostrzeżeń.
... bool obiekt::kolizja( sf::Image * image ) { color =( * image ).getPixel( x, y ); if( color == sf::Color::Black ) return false; else return true; }
...
image = tex2.getTexture().copyToImage(); if( obiekt.kolizja( & image ) == true )...
Ratujcie ;) |
|
Mrovqa |
» 2012-10-22 22:39:53 Spróbuj poprzez referencję: bool obiekt::kolizja( const sf::Image & image )
Resztę kodu dasz radę poprawić :) |
|
Houston Temat założony przez niniejszego użytkownika |
» 2012-10-22 22:51:20 Referencja była pierwszą rzeczą, której próbowałem :)
Nadal wywala. |
|
DejaVu |
» 2012-10-22 22:53:25 Powyższa linijka jest jakaś DZIWNA. Co oznaczają zmienne x oraz y? Gdzie je ustawiasz? |
|
Houston Temat założony przez niniejszego użytkownika |
» 2012-10-22 23:21:53 Nie będę wrzucał całego kodu, bo to chyba nie ma sensu.W main() mam na pewno wszystko zadeklarowane.
Klasa i odpalanie pocisku w głównej pętli:
class Pocisk { public: int x0, y0, x1, y1; float v0, angle, jakisWspolczynnik; sf::Color color; void ready( sf::CircleShape & pocisk, int x, int y ) { pocisk.setPosition( x, y ); x0 = x; y0 = y; } void move( sf::CircleShape & pocisk, int t ) { x1 = x0 + v0 * cos( angle ); y1 = y0 + v0 * sin( angle ) - g * t * jakisWspolczynnik; x0 = x1; y0 = y1; } bool explode( sf::Image & image ) { color = image.getPixel( x0, y0 ); if( color == sf::Color::Black ) return false; else return true; } };
if( sf::Mouse::isButtonPressed( sf::Mouse::Left ) && shooting == false ) { shooting = true; pocisk.angle = pocisk.ready( kula, x, y ); }
if( shooting = true ) { pocisk.move( kula, time ); time++; ... }
if( shooting == true && pocisk.explode( image ) == true ) { shooting = false; time = 0; ... ... image = rendertexture.getTexture().copyToImage(); sprite.setTexture( rendertexture.getTexture() ); window.draw( sprite ); }
|
|
DejaVu |
» 2012-10-23 01:01:52 Lepiej sprawdź czy faktycznie ta tekstura po skopiowaniu istnieje oraz czy współrzędne x,y nie wychodzą poza rozmiar obrazka. |
|
Houston Temat założony przez niniejszego użytkownika |
» 2012-10-23 12:30:32 O, na to bym nie wpadł. Rzeczywiście nie sprawdzałem, czy x,y nie wychodzi poza obrazek :)
Jeszcze taki mały problem: przy wyświetlaniu dwóch składowych wektora składowa X cały czas pokazuje 0, a Y działa poprawnie.
fragment kodu:
float x = 10., y = 150.; char buffer[ 50 ]; sf::Vector2f mysz = sf::Vector2f( sf::Mouse::getPosition( okno ) );
sf::Vector2f kierunek(( mysz.x - x ),( mysz.y - y ) );
sprintf( buffer, "%3.0f , %3.0f", kierunek.x, kierunek.y ); sf::Text tekst( bufer );
|
|
« 1 » |