crash Temat założony przez niniejszego użytkownika |
[SFML 1.6] Czyszczenie ekranu » 2013-01-11 03:39:13 Postanowiłem poznać SFML i przyznaję, zaczyna mi się podobać. Kiedyś testowałem SDL, jakoś jednak nie przypadł mi do gustu. Do rzeczy. Chcę przetestować swój algorytm kolizji dwóch prostokątów, do tego wymyśliłem taki oto schemat: klawiszami w,a,s,d będę jeden z prostokątów przemieszczać po ekranie. Pojawił się taki problem, że nie mogę za żadne skarby zamalować starej pozycji przemieszczanego prostokąta. Kod: #include <SFML/Window.hpp> #include <SFML/Graphics.hpp>
#include <iostream>
using namespace std; using namespace sf;
int main() { RenderWindow RW( VideoMode( 800, 600, 32 ), "SFML test" ); RW.Clear( Color( 255, 0, 0 ) ); RW.Display(); int x1 = 120, x2 = 120, y1 = 80, y2 = 80; Shape S1 = Shape::Rectangle( 120, 120, 80, 80, Color( 150, 50, 250 ) ), S2 = Shape::Rectangle( 300, 300, 380, 380, Color( 150, 50, 200 ) ); S1.SetOutlineWidth( 5 ); S2.SetOutlineWidth( 5 ); RW.Draw( S1 ); RW.Draw( S2 ); while( RW.IsOpened() ) { Event E; while( RW.GetEvent( E ) ) { if( E.Type == Event::KeyPressed && E.Key.Code == 256 ) return 0; if( E.Type == Event::KeyPressed && E.Key.Code == sf::Key::W ) { Shape Red = Shape::Rectangle( x1, y1, x2, y2, Color( 255, 0, 0 ) ); RW.Draw( Red ); RW.Display(); S1.Move( 0, - 10 ); RW.Draw( S1 ); } } RW.Display(); } }
Z góry dzięx za pomoc |
|
DejaVu |
» 2013-01-11 05:48:37 na początku pętli napisz: RW.Clear( Color( 255, 0, 0 ) );
|
|
crash Temat założony przez niniejszego użytkownika |
» 2013-01-11 07:08:58 Którą pętlę masz na myśli? Testowałem w różnych miejscach i kiszka. Teraz próbuę innego podejścia. Podejrzewam, że lepiej będzie jak zacznę wyświetlać sprity, póki co pomęczę jeszcze kształty. |
|
DejaVu |
» 2013-01-11 07:17:02 |
|
krzyk |
» 2013-01-11 07:25:40 RW.Draw przenieś do głównej pętli. |
|
crash Temat założony przez niniejszego użytkownika |
» 2013-01-11 07:35:01 Coś czuję, że będę musiał użyć sprite'ów, zawsze lubiłem ten gazowany napój ;) Pocudowałem i kifoza jak u Donalda Tuska. Kod: #include <SFML/Window.hpp> #include <SFML/Graphics.hpp>
#include <iostream>
using namespace std; using namespace sf;
int main() { RenderWindow RW( VideoMode( 800, 600, 32 ), "SFML test" ); RW.Clear( Color( 255, 0, 0 ) ); RW.Display(); int x1 = 120, x2 = 120, y1 = 80, y2 = 80; Shape S1 = Shape::Rectangle( 120, 120, 80, 80, Color( 150, 50, 250 ) ), S2 = Shape::Rectangle( 300, 300, 380, 380, Color( 150, 50, 200 ) ); S1.SetOutlineWidth( 5 ); S2.SetOutlineWidth( 5 ); RW.Draw( S1 ); RW.Draw( S2 ); RW.Display(); while( RW.IsOpened() ) { Event E; while( RW.GetEvent( E ) ) { if( E.Type == Event::KeyPressed && E.Key.Code == 256 ) return 0; unsigned char c = E.Key.Code; if( E.Type == Event::KeyPressed ) { cout << c; switch( c ) { w: y1 -= 10; y2 -= 10; break; a: x1 -= 10; x2 -= 10; break; s: y1 += 10; y2 += 10; break; d: x1 += 10; x2 += 10; break; } RW.Clear( Color::Red ); RW.Display(); S1.Rectangle( x1, y1, x2, y2, Color( 150, 50, 200 ), 5, Color( 150, 50, 200 ) ); RW.Draw( S1 ); RW.Draw( S2 ); RW.Display(); } } } }
|
|
DejaVu |
» 2013-01-11 07:39:38 W zasadzie to źle piszesz kod. Nie umieszcza się kodu renderującego w pętli z obsługą zdarzeń. |
|
crash Temat założony przez niniejszego użytkownika |
» 2013-01-11 07:42:59 Naprowadź, proszę, będę dźwięczny jak ta Nokia :)
edit: zerknę za 2-3h |
|
« 1 » 2 |