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

[SFML, C++] Menu kontekstowe

Ostatnio zmodyfikowano 2011-07-20 00:06
Autor Wiadomość
DejaVu
» 2011-07-19 22:03:12
Wydaje mi się, że nie ale nie potwierdzam.
P-36293
SeaMonster131
» 2011-07-19 22:12:22
Sa takie suwaki albo pola tekstowe dostepne w SFML ?
Suwaki można łatwo samemu napisać. Kilka minut i będzie git. A pole tekstowe..nie wiem, nie pisałem nigdy :)
P-36294
akwes
» 2011-07-19 22:36:43
Sorry za offtop,
DejaVu, nie sądzę aby sf::View był po to :P Co prawda da się to nimi osiągnąć ale sf::View to przecież ustawianie kamery przed rysowaniem sf::Sprite

Jak ktoś ma mapę większą od ekranu to broń Boże żeby kopiować mapę (w SFML jest to operacja piksel po pikselu o czym piszą w dokumentacji) ani też nie ma sensu co chwilę układać mapę od nowa.

Raz robimy wielką mapę a potem tylko:
C/C++
// x i y są gdzieś w klasie wyżej, i określają przesunięcie wgłąb mapy
void klasa::Draw( sf::RenderWindow * okno )
{
    const sf::FloatRect & ViewRect = sf::FloatRect( x, y, x + rozdzielczosc_w, y + rozdzielczosc_h );
    sf::View * widok = new sf::View( ViewRect );
    okno->SetView( * widok );
    okno->Draw( map_sprite );
}

I ładnie operujemy na raz stworzonej mapie, które się bajecznie płynnie przesuwa przy ładnej ilości FPS (kosztem tego że na początku trzeba by zrobić Loading, bo mapa duża się tworzy z te kilka sekund).

KONIEC OFFTOP.

Jeżeli są to proste elementy to proponuję Ci samemu napisać sobie kontrolki.
Pamiętam jak w Allegro robiłem grę to Buttony, EditTexty miałem zrobione przez siebie mimo AllegroGUI.

Polecam przygotowanie tego samemu bo zyskujemy coś co jest ważne. Możemy dokładnie ustalać zachowanie swoich przycisków oraz będą skomponowane w pasującej do gry grafice, a nie jakieś windowsowe brzydkie kwadraciaki ;p
P-36298
skax
Temat założony przez niniejszego użytkownika
» 2011-07-19 23:13:24
Dziekuje wszystkim za odp ;)

Co do suwaka mam pomysl .. ale textEdit ?
P-36303
akwes
» 2011-07-19 23:22:08
Załóżmy że bez bajerów, pomysł na TextEdit:
Chociaż to będzie przepis na prostacko stworzony TextEdit.
C/C++
class TextEdit
{
    sf::Sprite tlo; // biale tlo dla editu
    std::string tekst;
    sf::Event zdarzenie;
   
};

Jeżeli kliknie na tło (kolizja kursora z sf::Sprite) to zaczynasz przechwytywać każdy kolejny wciśnięty klawisz. Potem std::string tekst się zwiększa czyli
C/C++
testk += znak;
 
Jeżeli znak to Backspace to zdaje się że std::string ma jakaś metodę usuwającą znaki z końca.

Potem w funkcji tworzysz za każdym razem nowy sf::String i ustawiasz mu przez SetText tekst z std::string tekst, i rysujesz w odpowiednim miejscu (czyli na tym tle).

Oczywiście to tylko podstawowe zadanie, ale tak bym się do tego zabierał na początku.


Co do zaznaczania i pozycji kursora. Jeżeli użyjesz czcionki stałosz... (nie wiem jak się nazywa, ale każda litera ma taki sam rozmiar), to łatwo pliczyć po pozycji myszki gdzie po kliknięciu rysować ten kursor, i jak potem podzielić std::string...

Dużo wolnych myśli, dużo do implementacji, ale się da :P
P-36305
skax
Temat założony przez niniejszego użytkownika
» 2011-07-19 23:39:55
wielkie dzieki ;)

Mam jeszcze pytanie co do fps ..

Robie sobie tak:

float fps = 1 / app.GetFrameTime();

stringstream ss;

ss << f;

txt.SetText ( ss.str() + " FPS" );
app.Draw ( txt );

i mi wyswietla od 4000 - 6000

Cos tu nie gra ..
P-36306
DejaVu
» 2011-07-19 23:53:13
C/C++
oknoAplikacji.SetVerticalSync( true ); //czy coś podobnego
P-36307
akwes
» 2011-07-19 23:57:56
Czemu:
C/C++
ss << f;

A nie?:
C/C++
ss << fps;

Skoro:
C/C++
float fps = 1 / app.GetFrameTime();

P-36308
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona