From fd90a3c66cab134ba5a25500c387a19aede47084 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 28 Sep 2022 22:23:26 +0200 Subject: [PATCH] Corregido el bug de la asignacion de items del menu de la intro --- source/animatedsprite.cpp | 60 +++++------ source/balloon.cpp | 4 +- source/intro.cpp | 218 +++++++++++++++++++------------------- source/menu.cpp | 20 ++-- source/screen.cpp | 2 +- source/title.cpp | 2 +- 6 files changed, 153 insertions(+), 153 deletions(-) diff --git a/source/animatedsprite.cpp b/source/animatedsprite.cpp index db551d4..68ce500 100644 --- a/source/animatedsprite.cpp +++ b/source/animatedsprite.cpp @@ -50,37 +50,37 @@ int AnimatedSprite::getIndex(std::string name) // Calcula el frame correspondiente a la animación void AnimatedSprite::animate() { - if (!enabled || animation[currentAnimation].speed == 0) + if (!enabled || animation.at(currentAnimation).speed == 0) { return; } // Calcula el frame actual a partir del contador - animation[currentAnimation].currentFrame = animation[currentAnimation].counter / animation[currentAnimation].speed; + animation.at(currentAnimation).currentFrame = animation.at(currentAnimation).counter / animation.at(currentAnimation).speed; // Si alcanza el final de la animación, reinicia el contador de la animación // en función de la variable loop y coloca el nuevo frame - if (animation[currentAnimation].currentFrame >= (int)animation[currentAnimation].frames.size()) + if (animation.at(currentAnimation).currentFrame >= (int)animation.at(currentAnimation).frames.size()) { - if (animation[currentAnimation].loop == -1) + if (animation.at(currentAnimation).loop == -1) { // Si no hay loop, deja el último frame - animation[currentAnimation].currentFrame = animation[currentAnimation].frames.size(); - animation[currentAnimation].completed = true; + animation.at(currentAnimation).currentFrame = animation.at(currentAnimation).frames.size(); + animation.at(currentAnimation).completed = true; } else { // Si hay loop, vuelve al frame indicado - animation[currentAnimation].counter = 0; - animation[currentAnimation].currentFrame = animation[currentAnimation].loop; + animation.at(currentAnimation).counter = 0; + animation.at(currentAnimation).currentFrame = animation.at(currentAnimation).loop; } } // En caso contrario else { // Escoge el frame correspondiente de la animación - setSpriteClip(animation[currentAnimation].frames[animation[currentAnimation].currentFrame]); + setSpriteClip(animation.at(currentAnimation).frames.at(animation.at(currentAnimation).currentFrame)); // Incrementa el contador de la animacion - animation[currentAnimation].counter++; + animation.at(currentAnimation).counter++; } } @@ -88,76 +88,76 @@ void AnimatedSprite::animate() void AnimatedSprite::setCurrentFrame(int num) { // Descarta valores fuera de rango - if (num >= (int)animation[currentAnimation].frames.size()) + if (num >= (int)animation.at(currentAnimation).frames.size()) { num = 0; } // Cambia el valor de la variable - animation[currentAnimation].counter = animation[currentAnimation].speed * num; + animation.at(currentAnimation).counter = animation.at(currentAnimation).speed * num; // Escoge el frame correspondiente de la animación - setSpriteClip(animation[currentAnimation].frames[animation[currentAnimation].currentFrame]); + setSpriteClip(animation.at(currentAnimation).frames.at(animation.at(currentAnimation).currentFrame)); } // Establece el valor del contador void AnimatedSprite::setAnimationCounter(std::string name, int num) { - animation[getIndex(name)].counter = num; + animation.at(getIndex(name)).counter = num; } // Establece la velocidad de una animación void AnimatedSprite::setAnimationSpeed(std::string name, int speed) { - animation[getIndex(name)].counter = speed; + animation.at(getIndex(name)).counter = speed; } // Establece la velocidad de una animación void AnimatedSprite::setAnimationSpeed(int index, int speed) { - animation[index].counter = speed; + animation.at(index).counter = speed; } // Establece si la animación se reproduce en bucle void AnimatedSprite::setAnimationLoop(std::string name, int loop) { - animation[getIndex(name)].loop = loop; + animation.at(getIndex(name)).loop = loop; } // Establece si la animación se reproduce en bucle void AnimatedSprite::setAnimationLoop(int index, int loop) { - animation[index].loop = loop; + animation.at(index).loop = loop; } // Establece el valor de la variable void AnimatedSprite::setAnimationCompleted(std::string name, bool value) { - animation[getIndex(name)].completed = value; + animation.at(getIndex(name)).completed = value; } // OLD - Establece el valor de la variable void AnimatedSprite::setAnimationCompleted(int index, bool value) { - animation[index].completed = value; + animation.at(index).completed = value; } // Comprueba si ha terminado la animación bool AnimatedSprite::animationIsCompleted() { - return animation[currentAnimation].completed; + return animation.at(currentAnimation).completed; } // Devuelve el rectangulo de una animación y frame concreto SDL_Rect AnimatedSprite::getAnimationClip(std::string name, Uint8 index) { - return animation[getIndex(name)].frames[index]; + return animation.at(getIndex(name)).frames.at(index); } // Devuelve el rectangulo de una animación y frame concreto SDL_Rect AnimatedSprite::getAnimationClip(int indexA, Uint8 indexF) { - return animation[indexA].frames[indexF]; + return animation.at(indexA).frames.at(indexF); } // Carga la animación desde un fichero @@ -309,9 +309,9 @@ void AnimatedSprite::setCurrentAnimation(std::string name) if (currentAnimation != newAnimation) { currentAnimation = newAnimation; - animation[currentAnimation].currentFrame = 0; - animation[currentAnimation].counter = 0; - animation[currentAnimation].completed = false; + animation.at(currentAnimation).currentFrame = 0; + animation.at(currentAnimation).counter = 0; + animation.at(currentAnimation).completed = false; } } @@ -322,9 +322,9 @@ void AnimatedSprite::setCurrentAnimation(int index) if (currentAnimation != newAnimation) { currentAnimation = newAnimation; - animation[currentAnimation].currentFrame = 0; - animation[currentAnimation].counter = 0; - animation[currentAnimation].completed = false; + animation.at(currentAnimation).currentFrame = 0; + animation.at(currentAnimation).counter = 0; + animation.at(currentAnimation).completed = false; } } @@ -338,7 +338,7 @@ void AnimatedSprite::update() // Establece el rectangulo para un frame de una animación void AnimatedSprite::setAnimationFrames(Uint8 index_animation, Uint8 index_frame, int x, int y, int w, int h) { - animation[index_animation].frames.push_back({x, y, w, h}); + animation.at(index_animation).frames.push_back({x, y, w, h}); } // OLD - Establece el contador para todas las animaciones diff --git a/source/balloon.cpp b/source/balloon.cpp index f8c76a5..697926c 100644 --- a/source/balloon.cpp +++ b/source/balloon.cpp @@ -960,8 +960,8 @@ void Balloon::updateBounce() { if (mBouncing.enabled) { - mBouncing.zoomW = mBouncing.w[mBouncing.counter / mBouncing.speed]; - mBouncing.zoomH = mBouncing.h[mBouncing.counter / mBouncing.speed]; + mBouncing.zoomW = mBouncing.w.at(mBouncing.counter / mBouncing.speed); + mBouncing.zoomH = mBouncing.h.at(mBouncing.counter / mBouncing.speed); mSprite->setZoomW(mBouncing.zoomW); mSprite->setZoomH(mBouncing.zoomH); mBouncing.despX = (mSprite->getSpriteClip().w - (mSprite->getSpriteClip().w * mBouncing.zoomW)); diff --git a/source/intro.cpp b/source/intro.cpp index c8c3815..696600f 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -37,54 +37,54 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang) bitmaps.push_back(ss); } - bitmaps[0]->setPosX(-128); - bitmaps[0]->setPosY(SCREEN_FIRST_QUARTER_Y - 24); - bitmaps[0]->setVelX(0.0f); - bitmaps[0]->setVelY(0.0f); - bitmaps[0]->setAccelX(0.6f); - bitmaps[0]->setAccelY(0.0f); - bitmaps[0]->setSpriteClip(0, 0, 128, 96); + bitmaps.at(0)->setPosX(-128); + bitmaps.at(0)->setPosY(SCREEN_FIRST_QUARTER_Y - 24); + bitmaps.at(0)->setVelX(0.0f); + bitmaps.at(0)->setVelY(0.0f); + bitmaps.at(0)->setAccelX(0.6f); + bitmaps.at(0)->setAccelY(0.0f); + bitmaps.at(0)->setSpriteClip(0, 0, 128, 96); - bitmaps[1]->setPosX(GAME_WIDTH); - bitmaps[1]->setPosY(SCREEN_FIRST_QUARTER_Y - 24); - bitmaps[1]->setVelX(-1.0f); - bitmaps[1]->setVelY(0.0f); - bitmaps[1]->setAccelX(-0.3f); - bitmaps[1]->setAccelY(0.0f); - bitmaps[1]->setSpriteClip(128, 0, 128, 96); + bitmaps.at(1)->setPosX(GAME_WIDTH); + bitmaps.at(1)->setPosY(SCREEN_FIRST_QUARTER_Y - 24); + bitmaps.at(1)->setVelX(-1.0f); + bitmaps.at(1)->setVelY(0.0f); + bitmaps.at(1)->setAccelX(-0.3f); + bitmaps.at(1)->setAccelY(0.0f); + bitmaps.at(1)->setSpriteClip(128, 0, 128, 96); - bitmaps[2]->setPosX(SCREEN_CENTER_X - 64); - bitmaps[2]->setPosY(-96); - bitmaps[2]->setVelX(0.0f); - bitmaps[2]->setVelY(3.0f); - bitmaps[2]->setAccelX(0.1f); - bitmaps[2]->setAccelY(0.3f); - bitmaps[2]->setSpriteClip(0, 96, 128, 96); - bitmaps[2]->setEnabledCounter(250); + bitmaps.at(2)->setPosX(SCREEN_CENTER_X - 64); + bitmaps.at(2)->setPosY(-96); + bitmaps.at(2)->setVelX(0.0f); + bitmaps.at(2)->setVelY(3.0f); + bitmaps.at(2)->setAccelX(0.1f); + bitmaps.at(2)->setAccelY(0.3f); + bitmaps.at(2)->setSpriteClip(0, 96, 128, 96); + bitmaps.at(2)->setEnabledCounter(250); - bitmaps[3]->setPosX(SCREEN_CENTER_X - 64); - bitmaps[3]->setPosY(GAME_HEIGHT); - bitmaps[3]->setVelX(0.0f); - bitmaps[3]->setVelY(-0.7f); - bitmaps[3]->setAccelX(0.0f); - bitmaps[3]->setAccelY(0.0f); - bitmaps[3]->setSpriteClip(128, 96, 128, 96); + bitmaps.at(3)->setPosX(SCREEN_CENTER_X - 64); + bitmaps.at(3)->setPosY(GAME_HEIGHT); + bitmaps.at(3)->setVelX(0.0f); + bitmaps.at(3)->setVelY(-0.7f); + bitmaps.at(3)->setAccelX(0.0f); + bitmaps.at(3)->setAccelY(0.0f); + bitmaps.at(3)->setSpriteClip(128, 96, 128, 96); - bitmaps[4]->setPosX(SCREEN_CENTER_X - 64); - bitmaps[4]->setPosY(-96); - bitmaps[4]->setVelX(0.0f); - bitmaps[4]->setVelY(3.0f); - bitmaps[4]->setAccelX(0.1f); - bitmaps[4]->setAccelY(0.3f); - bitmaps[4]->setSpriteClip(0, 192, 128, 96); + bitmaps.at(4)->setPosX(SCREEN_CENTER_X - 64); + bitmaps.at(4)->setPosY(-96); + bitmaps.at(4)->setVelX(0.0f); + bitmaps.at(4)->setVelY(3.0f); + bitmaps.at(4)->setAccelX(0.1f); + bitmaps.at(4)->setAccelY(0.3f); + bitmaps.at(4)->setSpriteClip(0, 192, 128, 96); - bitmaps[5]->setPosX(GAME_WIDTH); - bitmaps[5]->setPosY(SCREEN_FIRST_QUARTER_Y - 24); - bitmaps[5]->setVelX(-0.7f); - bitmaps[5]->setVelY(0.0f); - bitmaps[5]->setAccelX(0.0f); - bitmaps[5]->setAccelY(0.0f); - bitmaps[5]->setSpriteClip(128, 192, 128, 96); + bitmaps.at(5)->setPosX(GAME_WIDTH); + bitmaps.at(5)->setPosY(SCREEN_FIRST_QUARTER_Y - 24); + bitmaps.at(5)->setVelX(-0.7f); + bitmaps.at(5)->setVelY(0.0f); + bitmaps.at(5)->setAccelX(0.0f); + bitmaps.at(5)->setAccelY(0.0f); + bitmaps.at(5)->setSpriteClip(128, 192, 128, 96); // Inicializa los textos de la intro const int totalTexts = 9; @@ -100,40 +100,40 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang) } // Un dia qualsevol de l'any 2000 - texts[0]->setCaption(lang->getText(27)); - texts[0]->setSpeed(10); + texts.at(0)->setCaption(lang->getText(27)); + texts.at(0)->setSpeed(10); // Tot esta tranquil a la UPV - texts[1]->setCaption(lang->getText(28)); - texts[1]->setSpeed(10); + texts.at(1)->setCaption(lang->getText(28)); + texts.at(1)->setSpeed(10); // Fins que un desaprensiu... - texts[2]->setCaption(lang->getText(29)); - texts[2]->setSpeed(15); + texts.at(2)->setCaption(lang->getText(29)); + texts.at(2)->setSpeed(15); // HEY! ME ANE A FERME UN CORTAET... - texts[3]->setCaption(lang->getText(30)); - texts[3]->setSpeed(10); + texts.at(3)->setCaption(lang->getText(30)); + texts.at(3)->setSpeed(10); // UAAAAAAAAAAAAA!!! - texts[4]->setCaption(lang->getText(31)); - texts[4]->setSpeed(1); + texts.at(4)->setCaption(lang->getText(31)); + texts.at(4)->setSpeed(1); // Espera un moment... - texts[5]->setCaption(lang->getText(32)); - texts[5]->setSpeed(20); + texts.at(5)->setCaption(lang->getText(32)); + texts.at(5)->setSpeed(20); // Si resulta que no tinc solt! - texts[6]->setCaption(lang->getText(33)); - texts[6]->setSpeed(2); + texts.at(6)->setCaption(lang->getText(33)); + texts.at(6)->setSpeed(2); // MERDA DE MAQUINA! - texts[7]->setCaption(lang->getText(34)); - texts[7]->setSpeed(3); + texts.at(7)->setCaption(lang->getText(34)); + texts.at(7)->setSpeed(3); // Blop... blop... blop... - texts[8]->setCaption(lang->getText(35)); - texts[8]->setSpeed(20); + texts.at(8)->setCaption(lang->getText(35)); + texts.at(8)->setSpeed(20); for (auto text : texts) { @@ -201,36 +201,36 @@ void Intro::updateScenes() { case 1: // Primera imagen - UPV - if (!bitmaps[0]->hasFinished()) + if (!bitmaps.at(0)->hasFinished()) { - bitmaps[0]->setEnabled(true); + bitmaps.at(0)->setEnabled(true); } // Primer texto de la primera imagen - if (bitmaps[0]->hasFinished() && !texts[0]->hasFinished()) + if (bitmaps.at(0)->hasFinished() && !texts.at(0)->hasFinished()) { - texts[0]->setEnabled(true); + texts.at(0)->setEnabled(true); } // Segundo texto de la primera imagen - if (texts[0]->hasFinished() && !texts[1]->hasFinished()) + if (texts.at(0)->hasFinished() && !texts.at(1)->hasFinished()) { - texts[0]->setEnabled(false); - texts[1]->setEnabled(true); + texts.at(0)->setEnabled(false); + texts.at(1)->setEnabled(true); } // Tercer texto de la primera imagen - if (texts[1]->hasFinished() && !texts[2]->hasFinished()) + if (texts.at(1)->hasFinished() && !texts.at(2)->hasFinished()) { - texts[1]->setEnabled(false); - texts[2]->setEnabled(true); + texts.at(1)->setEnabled(false); + texts.at(2)->setEnabled(true); } // Fin de la primera escena - if (texts[2]->hasFinished()) + if (texts.at(2)->hasFinished()) { - bitmaps[0]->setEnabled(false); - texts[2]->setEnabled(false); + bitmaps.at(0)->setEnabled(false); + texts.at(2)->setEnabled(false); scene++; } @@ -238,22 +238,22 @@ void Intro::updateScenes() case 2: // Segunda imagen - Máquina - if (!bitmaps[1]->hasFinished()) + if (!bitmaps.at(1)->hasFinished()) { - bitmaps[1]->setEnabled(true); + bitmaps.at(1)->setEnabled(true); } // Primer texto de la segunda imagen - if (bitmaps[1]->hasFinished() && !texts[3]->hasFinished()) + if (bitmaps.at(1)->hasFinished() && !texts.at(3)->hasFinished()) { - texts[3]->setEnabled(true); + texts.at(3)->setEnabled(true); } // Fin de la segunda escena - if (texts[3]->hasFinished()) + if (texts.at(3)->hasFinished()) { - bitmaps[1]->setEnabled(false); - texts[3]->setEnabled(false); + bitmaps.at(1)->setEnabled(false); + texts.at(3)->setEnabled(false); scene++; } @@ -261,17 +261,17 @@ void Intro::updateScenes() case 3: // Tercera imagen junto con primer texto - GRITO - if (!bitmaps[2]->hasFinished() && !texts[4]->hasFinished()) + if (!bitmaps.at(2)->hasFinished() && !texts.at(4)->hasFinished()) { - bitmaps[2]->setEnabled(true); - texts[4]->setEnabled(true); + bitmaps.at(2)->setEnabled(true); + texts.at(4)->setEnabled(true); } // Fin de la tercera escena - if (bitmaps[2]->hasFinished() && texts[4]->hasFinished()) + if (bitmaps.at(2)->hasFinished() && texts.at(4)->hasFinished()) { - bitmaps[2]->setEnabled(false); - texts[4]->setEnabled(false); + bitmaps.at(2)->setEnabled(false); + texts.at(4)->setEnabled(false); scene++; } @@ -279,24 +279,24 @@ void Intro::updateScenes() case 4: // Cuarta imagen junto con primer texto - Reflexión - if (!bitmaps[3]->hasFinished() && !texts[5]->hasFinished()) + if (!bitmaps.at(3)->hasFinished() && !texts.at(5)->hasFinished()) { - bitmaps[3]->setEnabled(true); - texts[5]->setEnabled(true); + bitmaps.at(3)->setEnabled(true); + texts.at(5)->setEnabled(true); } // Segundo texto de la cuarta imagen - if (texts[5]->hasFinished() && !texts[6]->hasFinished()) + if (texts.at(5)->hasFinished() && !texts.at(6)->hasFinished()) { - texts[5]->setEnabled(false); - texts[6]->setEnabled(true); + texts.at(5)->setEnabled(false); + texts.at(6)->setEnabled(true); } // Fin de la cuarta escena - if (bitmaps[3]->hasFinished() && texts[6]->hasFinished()) + if (bitmaps.at(3)->hasFinished() && texts.at(6)->hasFinished()) { - bitmaps[3]->setEnabled(false); - texts[6]->setEnabled(false); + bitmaps.at(3)->setEnabled(false); + texts.at(6)->setEnabled(false); scene++; } @@ -304,22 +304,22 @@ void Intro::updateScenes() case 5: // Quinta imagen - Patada - if (!bitmaps[4]->hasFinished()) + if (!bitmaps.at(4)->hasFinished()) { - bitmaps[4]->setEnabled(true); + bitmaps.at(4)->setEnabled(true); } // Primer texto de la quinta imagen - if (bitmaps[4]->hasFinished() && !texts[7]->hasFinished()) + if (bitmaps.at(4)->hasFinished() && !texts.at(7)->hasFinished()) { - texts[7]->setEnabled(true); + texts.at(7)->setEnabled(true); } // Fin de la quinta escena - if (bitmaps[4]->hasFinished() && texts[7]->hasFinished()) + if (bitmaps.at(4)->hasFinished() && texts.at(7)->hasFinished()) { - bitmaps[4]->setEnabled(false); - texts[7]->setEnabled(false); + bitmaps.at(4)->setEnabled(false); + texts.at(7)->setEnabled(false); scene++; } @@ -327,17 +327,17 @@ void Intro::updateScenes() case 6: // Sexta imagen junto con texto - Globos de café - if (!bitmaps[5]->hasFinished() && !texts[8]->hasFinished()) + if (!bitmaps.at(5)->hasFinished() && !texts.at(8)->hasFinished()) { - bitmaps[5]->setEnabled(true); - texts[8]->setEnabled(true); + bitmaps.at(5)->setEnabled(true); + texts.at(8)->setEnabled(true); } // Acaba el último texto - if (bitmaps[5]->hasFinished() && texts[8]->hasFinished()) + if (bitmaps.at(5)->hasFinished() && texts.at(8)->hasFinished()) { - bitmaps[5]->setEnabled(false); - texts[8]->setEnabled(false); + bitmaps.at(5)->setEnabled(false); + texts.at(8)->setEnabled(false); JA_StopMusic(); section.name = PROG_SECTION_TITLE; section.subsection = TITLE_SECTION_1; diff --git a/source/menu.cpp b/source/menu.cpp index 37c0e35..bb20488 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -739,12 +739,12 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre { item_t temp; - if (item.size() == 0) + if (item.empty()) {// Si es el primer item coge la posición en el eje Y del propio menu temp.rect.y = y; } else - {// En caso contrario, coge la posición en el eje Y a partir del elemento anterior + {// En caso contrario, coge la posición en el eje Y a partir del último elemento temp.rect.y = item.back().rect.y + item.back().rect.h + item.back().hPaddingDown; } @@ -758,11 +758,11 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre setItemCaption(item.size() - 1, text); - if (item.size() > 0) + if (item.size() > 1) { - if (item[item.size() - 1].linkedDown) + if (item.at(item.size() - 2).linkedDown) { - item[item.size()].linkedUp = true; + item.back().linkedUp = true; } } @@ -773,13 +773,13 @@ void Menu::addItem(std::string text, int hPaddingDown, bool selectable, bool gre // Cambia el texto de un item void Menu::setItemCaption(int index, std::string text) { - item[index].label = text; - item[index].rect.w = this->text->lenght(item[index].label); - item[index].rect.h = this->text->getCharacterSize(); + item.at(index).label = text; + item.at(index).rect.w = this->text->lenght(item.at(index).label); + item.at(index).rect.h = this->text->getCharacterSize(); reorganize(); - const std::string texto = item[index].label + ":" + std::to_string(item[index].rect.w); - printf("Adding menu item -> %s\n", texto.c_str()); + const std::string t = item.at(index).label + ":" + std::to_string(item.at(index).rect.w); + printf("Adding menu item -> %s\n", t.c_str()); } // Establece el indice del itemm que se usará por defecto al cancelar el menu diff --git a/source/screen.cpp b/source/screen.cpp index e5f4ac2..84479c9 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -344,7 +344,7 @@ void Screen::renderSpectrumFade() const float step = (float)spectrumFadeCounter / (float)spectrumFadeLenght; const int max = spectrumColor.size() - 1; const int index = max + (0 - max) * step; - const color_t c = spectrumColor[index]; + const color_t c = spectrumColor.at(index); SDL_SetTextureColorMod(gameCanvas, c.r, c.g, c.b); } diff --git a/source/title.cpp b/source/title.cpp index fa244b6..1153d32 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -29,7 +29,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Input *input, Asset *asset, mText = new Text(mAsset->get("smb2.png"), mAsset->get("smb2.txt"), mRenderer); mText2 = new Text(mAsset->get("8bithud.png"), mAsset->get("8bithud.txt"), mRenderer); - //mMenu.title = new Menu(mRenderer, mAsset, mInput, mAsset->get("title.men")); + mMenu.title = new Menu(mRenderer, mAsset, mInput, mAsset->get("title.men")); mMenu.options = new Menu(mRenderer, mAsset, mInput, mAsset->get("options.men")); // Sonidos