01.04.2016

Dodawanie nowych okien do określonego ekranu

Od strony interfejsu programistycznego, dodawanie nowych okien wygląda w ten sposób (na przykładzie menu początkowego z theGame::buildMenu() w "game.cpp"):

  screens[ SCREEN_MENU ].addWindow( TITLE_POSX, TITLE_POSY, TITLE_WIDTH, TITLE_HEIGHT );
  screens[ SCREEN_MENU ].addWindow( MENU_POSX, MENU_POSY, MENU_WIDTH, MENU_HEIGHT );

  theWindow* menuW = screens[ SCREEN_MENU ].windows[ 0 ];
  theWindow* menuW1 = screens[ SCREEN_MENU ].windows[ 1 ];
  theWindow* menuW2 = screens[ SCREEN_MENU ].windows[ 2 ];


  
  menuW->addPlaneMatrix( res->bGround[ BGR_MENU ]->w, res->bGround[ BGR_MENU ]->h );
  menuW->makeBackgroundMatrix( 0, res->bGround[ BGR_MENU ] );
  menuW1->addPlaneMatrix();

  menuW2->addPlaneMatrix( res->bGround[ BGR_MENU_LIST ]->w, res->bGround[ BGR_MENU_LIST ]->h );
  menuW2->makeBackgroundMatrix( 0, res->bGround[ BGR_MENU_LIST ] );

  _SURFACE* mTitle = _CREATE_RGBA_SURFACE( TITLE_WIDTH, TITLE_HEIGHT, MENU_BG_COLOR );
  _SURFACE* txtChoose = _CREATE_RGBA_SURFACE( res->font.tiles[ 0 ]->w * strlen( MENU_CHOOSE_LEVEL_TXT ), res->font.tiles[ 0 ]->h, 0 );
  _SURFACE* txtExit = _CREATE_RGBA_SURFACE( res->font.tiles[ 0 ]->w * strlen( MENU_EXIT_TXT ), res->font.tiles[ 0 ]->h, 0 );
 
  menuW1->anchoredText = true;
  menuW1->print( &res->font, mTitle, TITLE_TEXT_POSX, TITLE_TEXT_POSY, TITLE_TEXT );
  menuW2->anchoredText = false;
  menuW2->print( &res->font, txtChoose, 0, 0, MENU_CHOOSE_LEVEL_TXT );
  menuW2->print( &res->font, txtExit, 0, 0, MENU_EXIT_TXT );

  menuW1->putOnMatrix( 0, mTitle, 0, 0 );
  menuW2->addPlaneMatrix();
  menuW2->putOnMatrix( 1, txtChoose, MENU_TXT_POSX, MENU_TXT_POSY );
  menuW2->putOnMatrix( 1, txtExit, MENU_EXIT_POSX, MENU_EXIT_POSY );

  menuW1->makeBorder( BORDER_MENU_WIDTH, BORDER_MENU_COLOR );
  menuW2->makeBorder( BORDER_MENU_WIDTH, BORDER_MENU_COLOR );

Jest też drugi sposób, z użyciem obiektów wizualnych (bez tekstu dodanego do macierzy sektorów):
//zamiast:
  menuW1->putOnMatrix( 0, mTitle, 0, 0 );
  menuW2->addPlaneMatrix();
  menuW2->putOnMatrix( 1, txtChoose, MENU_TXT_POSX, MENU_TXT_POSY );
  menuW2->putOnMatrix( 1, txtExit, MENU_EXIT_POSX, MENU_EXIT_POSY );

//można też:
  menuW1->newVObj( 0, 0, mTitle, 0, 0 );
  menuW2->newVObj( 0, 0, txtChoose, MENU_TXT_POSX, MENU_TXT_POSY );
  menuW2->newVObj( 0, 1, txtExit, MENU_EXIT_POSX, MENU_EXIT_POSY );

Ekran z identyfikatorem SCREEN_MENU zawiera 3 okna. Pierwsze okno to tło całego ekranu. Drugie okno zawiera napis tytułu gry "METOD". Trzecie okno zawiera menu właściwe (obecnie napisy "Choose level:" i "Exit"). Napis tytułu jest lekko przeźroczysty (identycznie jak tło tego okna), ponieważ jest osadzony w powierzchnię tła tego okna, które ma częściowo przeźroczysty kolor.

Funkcja składowa theWindow::makeBorder( _SIZE bw, _COLOR bc ) dodaje nowy plan z obramowaniem okna, bez żadnego wypełnienia. Pierwszy argument dla funkcji theWindow::putOnMatrix i theWindow::newVObj to indeks macierzy do której ma być dodana określona powierzchnia. Drugi argument dla funkcji theWindow::newVObj to indeks kolejności renderowania powierzchni obiektu wizualnego.

Brak komentarzy:

Prześlij komentarz