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

[SFML]Proste menu do gry - dziwne błędy

Ostatnio zmodyfikowano 2014-08-13 10:08
Autor Wiadomość
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?
P-115391
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?
P-115392
Parapet
Temat założony przez niniejszego użytkownika
» 2014-08-12 20:20:17
C/C++
#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() ) //main loop
    {
        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();
       
    }
}
P-115394
Glazus
» 2014-08-12 20:24:57
Ok, widzę, że uciekasz od problemu:
C/C++
void draw( sf::RenderWindow window )
{
    window.clear( sf::Color::White );
    window.display(); // <-- TU jest błąd. display() wywołujemy na samym końcu.
    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
?    
P-115395
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.
C/C++
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.
P-115402
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
C/C++
//
// SFML - Simple and Fast Multimedia Library
// Copyright (C) 2007-2013 Laurent Gomila (laurent.gom@gmail.com)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//

#ifndef SFML_NONCOPYABLE_HPP
#define SFML_NONCOPYABLE_HPP

// Headers
#include <SFML/System/Export.hpp>


namespace sf
{
    class SFML_SYSTEM_API NonCopyable
    {
    protected:
       
        NonCopyable() { }
       
    private:
       
        NonCopyable( const NonCopyable & );
       
        NonCopyable & operator =( const NonCopyable & );
    };
   
} // namespace sf


#endif // SFML_NONCOPYABLE_HPP
sfml-dev.org/documentation/2.0​/classsf_1_1NonCopyable.php
P-115403
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ę.
P-115404
Parapet
Temat założony przez niniejszego użytkownika
» 2014-08-13 10:08:15
Zamykam działa.
P-115406
1 2 « 3 »
Poprzednia strona Strona 3 z 3