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

Jak stworzyć kilku przyciskowe menu w SFML 2.0 ?

Ostatnio zmodyfikowano 2013-07-24 14:15
Autor Wiadomość
Rafi
» 2013-07-23 14:58:18
Zmień sf::Vector2i na sf::Vector2f - wtedy przyjmie.
P-88623
domin568
Temat założony przez niniejszego użytkownika
» 2013-07-23 15:13:54
"Przeszło , ale posypał mi się cały program , jak wybierać te wektory ?? od czego jest Vector2i,f i u ?? Nie rysuje mi nic na ekranie (jest biało )

Kod nawet bez sprawdzania przycisku :

C/C++
#include "stdafx.h"
#include <SFML/Window.hpp>
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include <cstdlib>
using namespace std;
int _tmain( int argc, _TCHAR * argv[] )
{
    sf::Event zdarzenie;
    sf::RenderWindow okno( sf::VideoMode( 640, 480, 32 ), "Pierwsze menu" );
    sf::Font czcionka;
   
   
    if( !czcionka.loadFromFile( "arial.ttf" ) )
    {
        cout << " Niestety nie udalo sie zaladowac czcionki " << endl;
    }
   
    sf::Mouse myszka;
   
   
   
    sf::Text tekst;
    tekst.setFont( czcionka );
    tekst.setString( "START" );
    tekst.setCharacterSize( 12 );
    tekst.setColor( sf::Color( 255, 0, 0 ) );
    tekst.setPosition( tekst.getPosition().x + 12, tekst.getPosition().y + 12 );
   
    sf::Text tekst2;
    tekst2.setFont( czcionka );
    tekst2.setString( "WYJSCIE" );
    tekst2.setCharacterSize( 12 );
    tekst2.setColor( sf::Color( 255, 0, 0 ) );
    tekst2.setPosition( tekst2.getPosition().x + 200, tekst2.getPosition().y + 12 );
   
   
    sf::RectangleShape kwadrat;
    kwadrat.setOutlineColor( sf::Color( 0, 255, 0 ) );
    kwadrat.setOutlineThickness( 5 );
    kwadrat.setSize( sf::Vector2f( 200, 200 ) );
    kwadrat.setPosition( 200, 200 );
   
    float myszx = 0;
    float myszy = 0;
   
    while( okno.isOpen() )
   
    {
       
        while( okno.pollEvent( zdarzenie ) )
        {
           
           
           
           
            if( zdarzenie.type == sf::Event::Closed )
            {
                okno.close();
            }
            if( zdarzenie.type == sf::Event::MouseButtonPressed )
            {
                myszx = myszka.getPosition( okno ).x;
                myszy = myszka.getPosition( okno ).y;
                cout << myszx << endl;
                cout << myszy << endl;
            }
           
        }
       
       
       
        okno.draw( kwadrat );
        okno.draw( tekst );
        okno.display();
    }
    return 0;
}
P-88625
pekfos
» 2013-07-23 17:20:58
jak wybierać te wektory ?? od czego jest Vector2i,f i u ??
Litery na końcu oznaczają używane typy. i to int, f to float, a u to unsigned int.
P-88634
domin568
Temat założony przez niniejszego użytkownika
» 2013-07-23 22:13:12
Dzięki pefkos , bardzo mi to rozjaśniłeś . Problem rozwiązany , usunąłem sprawdzanie zamknięcia aplikacji , napisałem ją jeszcze raz i zadziałało , bardzo dziwny problem ^^
P-88648
domin568
Temat założony przez niniejszego użytkownika
» 2013-07-24 13:41:03
Admixior co w tej klasie znaczy "sf::Vector2f centerpos" ?? Domyślam się że to chodzi o środek obiektu , ale za bardzo nie rozumiem po co on tam jest . "RCid_font" też jest dla mnie nie zrozumiałe . Nie moge również rozgryźć twojej filozofii co do tych metod , myślę że void SetEnable( bool enable ); odpowiada za to co się stanie jeżeli myszka kliknie na obiekt ,  bool SetMouseOver( bool _enable ); - sprawdza koordynaty myszki co do przycisku czyli "if( sprite.getGlobalBounds().contains( posMouse ) )" , int GetClicked( sf::Vector2f & pos ) jeżeli myszka kliknie (zapewne wtedy aktywuje się przycisk poprzez SetEnable , jednak nie wiem do czego są funkcje int MouseMove( sf::Vector2f & pos ); , bool in_rect( sf::Vector2f & pos ); . Mógłbyś mi pomóc , byłbym Ci BARDZOOO wdzięczny .
P-88658
Admixior
» 2013-07-24 14:02:32
To jest kod z mojej gry. Obciąłem go trochę więc dlatego tak jest że są różne takie tam wewnętrzne zmienne.

RCid_font -> Resource id font - (numer czcionki w zasobach[bo każdy zasób ma swój numer])

Menu mojej gry graficznie jest tak skonstruowane jak drabina, więc teksty ładnie wyglądają wycentrowane (tekst).

SetEnable służy do tego samego co w WinAPI włączanie i wyłączanie przycisku(jeżeli jest wyłączony to wtedy jest szary i nie da się kliknąć)

SetMouseOver -> podajemy true lub false w zależności czy myszka najechała na przycisk(tekst) wtedy tekst się podjaśnia; zwraca to co się podało jako argument

MouseMove (podajemy tutaj nowe koordynaty myszki po przemieszczeniu) wywoływana jest funkcja SetMouseOver z parametrem true (jeśli kursor najechał przycisk) lub false (gdy nie najechał)

GetClicked otrzymuje koordynaty i sprawdza czy było możliwe kliknięcie na ten przycisk

in_rect to sprawdzenie czy myszka mieści się w wymiarach przycisku

Funkcje sprawdzają czy czasem przycisk nie jest wyłączony (wtedy nie można kliknąć ani "najechać")

C/C++
bool Button::SetMouseOver( bool _mouseover )
{
    if( !enable ) return false;
   
    if( mouseover == _mouseover ) return mouseover; //ten stan juz jest aktywny
   
    mouseover = _mouseover; //zapamiętanie stanu
   
    if( mouseover ) text.SetColor( MENU_COLOR_BTNMOUSEOVER ); //zmiana koloru na "mouseover"
    else text.SetColor( MENU_COLOR_BTNACTIVE ); //lub zwykly
   
    return mouseover;
}

int Button::GetClicked( sf::Vector2f & pos )
{
    if( !enable ) return false;
   
    return in_rect( pos );
}

int Button::MouseMove( sf::Vector2f & pos )
{
    if( !enable ) return false;
   
    return SetMouseOver( in_rect( pos ) );
}

int Button::Draw( sf::RenderWindow & wnd )
{
    wnd.Draw( text );
    return 0;
}

void Button::SetEnable( bool _enable )
{
    if( enable = _enable )
    {
        text.SetColor( MENU_COLOR_BTNACTIVE );;
    }
    else
    {
        text.SetColor( MENU_COLOR_BTNDEACTIVE );
    }
}

Link do gry: http:/​/ortomaniak.deerteam.cba.pl/
P-88662
domin568
Temat założony przez niniejszego użytkownika
» 2013-07-24 14:15:53
Wielkie dzięki Admixior bardzo mi pomogłeś , i myślę że in_rect to jest funkcja zapisująca do wektora wielkości przycisku  ?

in_rect to sprawdzenie czy współrzędne podane mieszczą się w wymiarach przycisku(this)

~Admixior
P-88664
1 2 « 3 »
Poprzednia strona Strona 3 z 3