Parapet Temat założony przez niniejszego użytkownika |
» 2014-08-12 19:41:53 Nie działa w tej funkcji coś takiego. Czemu to "malowanie" tekstu nie działa? |
|
Glazus |
» 2014-08-12 19:54:18 Bo robisz to w złej kolejności. Powinno być tak:
1. Czyścisz scenę. 2. Dodajesz elementy. 3. Wyświetlasz scenę.
A zatem jaka funkcja jest u Ciebie w złym miejscu? |
|
Parapet Temat założony przez niniejszego użytkownika |
» 2014-08-12 20:20:17 #include <SFML/Graphics.hpp> class menu : private sf::Font , public sf::Text { private: int count; Font font; public: Text text[ 4 ]; void changeText( std::string a, std::string b, std::string c, std::string d ) { count = 0; text[ 0 ].setString( a ); text[ 1 ].setString( b ); text[ 2 ].setString( c ); text[ 3 ].setString( d ); } void changePosition( float x, float y ) { text[ 0 ].setPosition( x, y ); text[ 1 ].setPosition( x, y - 20 ); text[ 2 ].setPosition( x, y - 40 ); text[ 3 ].setPosition( x, y - 60 ); } bool changeFont() { if( !font.loadFromFile( "mariofont.ttf" ) ) return EXIT_FAILURE; int c; for( c = 0; c < 4; c++ ) { text[ c ].setFont( font ); } } void changeColor( sf::Color color ) { text[ 0 ].setColor( color ); text[ 1 ].setColor( color ); text[ 2 ].setColor( color ); text[ 3 ].setColor( color ); } bool up() { if( count++ > 4 ) return EXIT_FAILURE; count++; text[ count ].setColor( sf::Color::Red ); } bool down() { if( count-- < 1 ) return EXIT_FAILURE; count--; text[ count ].setColor( sf::Color::Red ); } }; int main() { menu gui; sf::RenderWindow okno( sf::VideoMode( 1000, 1000, 32 ), "Menu - TEST GUI" ); gui.changeText( "New game", "Options", "Info", "Exit" ); sf::Event ev; while( okno.isOpen() ) { while( okno.pollEvent( ev ) ) { if( ev.type == sf::Event::Closed ) okno.close(); } okno.clear( sf::Color::White ); gui.changeFont(); gui.setColor( sf::Color::Green ); gui.changePosition( 200, 200 ); okno.draw( gui.text[ 0 ] ); okno.draw( gui.text[ 1 ] ); okno.draw( gui.text[ 2 ] ); okno.draw( gui.text[ 3 ] ); okno.display(); gui.down(); } }
|
|
Glazus |
» 2014-08-12 20:24:57 Ok, widzę, że uciekasz od problemu: void draw( sf::RenderWindow window ) { window.clear( sf::Color::White ); window.display(); window.draw( text[ 0 ] ); window.draw( text[ 1 ] ); window.draw( text[ 2 ] ); window.draw( text[ 3 ] ); } Powtórzę pytanie - czemu nie korzystasz z konstruktora? Oraz pytanie zadane przez innych - po co dziedziczysz sf::Font i sf::Text ? |
|
Parapet Temat założony przez niniejszego użytkownika |
» 2014-08-13 08:03:23 1> code.cpp 1>c:\users\ja\desktop\programowanie\c++\sfml\include\sfml\window\window.hpp(477): error C2248: 'sf::NonCopyable::NonCopyable' : cannot access private member declared in class 'sf::NonCopyable' 1> c:\users\ja\desktop\programowanie\c++\sfml\include\sfml\system\noncopyable.hpp(67) : see declaration of 'sf::NonCopyable::NonCopyable' 1> c:\users\ja\desktop\programowanie\c++\sfml\include\sfml\system\noncopyable.hpp(42) : see declaration of 'sf::NonCopyable' 1> This diagnostic occurred in the compiler generated function 'sf::Window::Window(const sf::Window &)' 1>c:\users\ja\desktop\programowanie\c++\sfml\include\sfml\graphics\rendertarget.hpp(419): error C2248: 'sf::NonCopyable::NonCopyable' : cannot access private member declared in class 'sf::NonCopyable' 1> c:\users\ja\desktop\programowanie\c++\sfml\include\sfml\system\noncopyable.hpp(67) : see declaration of 'sf::NonCopyable::NonCopyable' 1> c:\users\ja\desktop\programowanie\c++\sfml\include\sfml\system\noncopyable.hpp(42) : see declaration of 'sf::NonCopyable' 1> This diagnostic occurred in the compiler generated function 'sf::RenderTarget::RenderTarget(const sf::RenderTarget &)' ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Takie błedy po kompilacji. void draw( sf::RenderWindow window ) { window.clear( sf::Color::White ); window.draw( text[ 0 ] ); window.draw( text[ 1 ] ); window.draw( text[ 2 ] ); window.draw( text[ 3 ] ); window.display(); }
gui.draw( okno );
Co do pytań: 1. Zrobiłem jeden domyślny - zrobię więcej jak będzie wszystko działać, 2. Bez tych klas które dziedziczę to gdy je usunę to się dopiero wszystko sypie. |
|
Jacob99 |
» 2014-08-13 08:49:01 Czy ludzie zaczną kiedykolwiek czytać logi kompilacji?- pewien programista |
To pytanie jest retoryczne, bo wszystko masz zapisane w tych logach. Chcesz użyć jakiejś zmiennej która jest prywatną częścią sf::NonCopyable. NonCopyable.hpp
#ifndef SFML_NONCOPYABLE_HPP #define SFML_NONCOPYABLE_HPP
#include <SFML/System/Export.hpp>
namespace sf { class SFML_SYSTEM_API NonCopyable { protected: NonCopyable() { } private: NonCopyable( const NonCopyable & ); NonCopyable & operator =( const NonCopyable & ); }; }
#endif
sfml-dev.org/documentation/2.0/classsf_1_1NonCopyable.php |
|
Glazus |
» 2014-08-13 09:12:13 W ten sposób, to prędko gry nie napiszesz. Naprawdę, szybciej napiszesz coś sensownego gdy zamiast prosić nas o prostowanie Twoich błędów to po prostu powtórzysz materiał od samego początku. Bo leżą funkcje, klasy oraz logika. Poczytaj o referencjach, argumentach funkcji oraz o tym jak budować klasę. Także o tym dlaczego warto korzystać z tych głupich konstruktorów na które się uparłem (4 funkcje które zawarłeś w swojej klasie spokojnie na potrzeby tego prostego menu mógłbyś zastąpić jednym konstruktorem). Na dłuższą metę zmęczysz się pisząc funkcje w ciele klasy. Poczytaj także o przestrzeniach nazw. To dziedziczenie naprawdę tam nie jest potrzebne. Wystarczy, że zamiast Font font napiszesz sf::Font font . Ewentualnie na początku dodasz using namespace sf . Ale skoro już zadałeś pytanie. Funkcja nie działa bo próbujesz skopiować okno. Powinieneś przekazywać referencję. |
|
Parapet Temat założony przez niniejszego użytkownika |
» 2014-08-13 10:08:15 Zamykam działa. |
|
1 2 « 3 » |