//// OnShow() //// void CArkanoidController::OnShow() try { #if DEBUG==1 time_t startT = time(NULL); exceptPrintFile << asctime(localtime(&startT))<< " < << <<< <<<< <<<<< <<<<<< GAME START {i.e. `OnShow()` started working} >>>>>> >>>>> >>>> >>> >> >" << std::endl; #endif m_fSceneHeight = CRender::GetInst().GetHeight()/*768*/; m_fSceneWidth = CRender::GetInst().GetWidth()/*1024*/; CScene *sc = m_scene; //@@ ?: д/ более простой изменяемости?? (а надо ли? - может просто `m_scene` использовать) m_pPad = sc->FindPictureObject(PIC_SC01_PADDLE); //#OUTDATED (Видимо не нужен): g_pBall = sc->FindPictureObject(PIC_SC01_BALL); ///@@@ Видимо не нужен //Готовлю array-входн.пар-р для C-tor'а CBallsManager. //Вынес этот код сюда, чтобы уйти от зависимости класса CBallsManager .. { //.. от кол-ва видов шариков и конкретных их объектов. std::vector<CPictureObject*> vpBallPicObjs; vpBallPicObjs.push_back(sc->FindPictureObject(PIC_SC01_BALL)); vpBallPicObjs.push_back(sc->FindPictureObject(PIC_SC01_BALL2)); vpBallPicObjs.push_back(sc->FindPictureObject(PIC_SC01_BALL3)); vpBallPicObjs.push_back(sc->FindPictureObject(PIC_SC01_BALL4)); //Создаю менеджер шариков: m_pBallsMngr = new CBallsManager(vpBallPicObjs); //conditional delete is in D-tor. } //Создаю менеджер кирпичей: m_pBricksMngr = new /*_BRICK_MNGR*/CBricksManager(/*12*/NUMBER_OF_BRICKS); ///@@ Передаю маг.числом, НО не держу лишнюю глоб.переменную. Верно? //Это что? Типа БРИКС_ОН_ЛВЛ ? (вроде да, therefore заменил `12` на NUMBER_OF_BRICKS) //#OUTDATED (метод уже перекочевал в CBall и вызывается в C-tor'e): //InitBallHitChckPntsArr(); //#OUTDATED: InitOfBallsPictObjects(sc); //инициализирую массив CPict.Object'ов шариков //#OUTDATED: CPictureObject* pOriBall = sc->FindPictureObject(PIC_SC01_BALL); ///@@@ может вынести в глоб. vars (тем более, если его, как и oriBrick не задейтсвовать в самой игре m_fPaddleY1 = m_fSceneHeight - m_fBOTTOM_GAP - (u32)m_pPad->GetSize().y; //#COMPILER(Warning) `(u32)` m_fCurrPaddleY = m_fPaddleY1; //#OUTDATED: g_fMaxDltYWithPad = m_pPad->GetCenter().y - pOriBall->GetCenter().y; //if(ball[i]..->GetPos().y > g_fPaddleY+g_fMaxDltYWithPad) .. // //.. то больше не просчитывать IsHit() с Pad'ом. std::srand((int)time(NULL)); //для того, чтобы rand() выдавал не одно и то же //#OUTDATED: _BALL::InitFewPixelsShift(); //OLD: Инициализирую таблицу 1-(2-3..)-пиксельных смещений шарика при контакте. //@@ перенёс вызов в C-tor шарика (в условный блок, исполняемый только при cre. 1го шарика) InitNewGame(sc); }
EXCPTN_CATCH //// OnRender() //// void CArkanoidController::OnRender(vector2 _scroll) ///@@@ Быть может нужно как-то исп-ть этот пар-р: Warning C4100: '_scroll' : unreferenced formal parameter 330 try { LOG_INFO("CArkanoidController::OnRender"); vector2 pos = CCursorController::GetInst().GetCursorPos(); CScene *sc = m_scene; ///@@@ /*+см.в кажд.методе эту же строку*/ зачем каждый рендер создавать этот ptr заново? Может его передавать пар-ром, или сделать static'ом? Хотя ск.вс., т.к. m_scene - это, должно быть, верхняя (активная) (хотя написано в доках, что это материнская сцена). Ну короче м/у рендерами может она видимо измениься. Поэтому обновляем. ?? ////Вызываю метод, отыгрывающий анимацию уничтожения в 1й проход и удаляющий объект во второй //for (char i=m_vpBricks.size()-1; i>=0; --i) //Костыли: переносил это в OnUpdate() - не помогло //{ // if (m_vpBricks[i]->m_state == CBrick::DSTR_ST || m_vpBricks[i]->m_state == CBrick::DSTR_EN) // DelBrick(i, sc); //} ProcessWinLostState(sc); ///@@@ #TODO: кажд.рендер прогоняем эти проверки. Быть может заменить проверкой единств-го флага "Что-то изменилось с game_state'ом". И только if `true`, то гонять этот метод? Print("SCORE: ", m_uGameScore, 15,m_fSceneWidth-100, 240,10,240,100); #if DEBUG==1 CPictureObject* ball1 = sc->FindPictureObject(PIC_SC01_BALL); //dbgPrint("rndmAng1 = ", dbgTmp0, 10,10, 255,10,255); if (!m_pBallsMngr->IsBallsEmpty()) DbgPrint("currBallFi = ", m_pBallsMngr->GetBallFi(0)/*m_vBalls[0]->GetFi()*/, 10,200, 255,10,255); ///@@: Тут подчёркивание - /*возможно*/НЕ ошибка КОМП-ра, /*т.к.*/то, что я объявил френдом метод, ДАЁТ ДОСТУП К ЗАКРЫТЫМ ДАННЫМ _ВНУТРИ_ ф-ции, НО НЕ В СПИСКЕ ЕЁ ПАР-РОВ! DbgPrint("currMouse X : Y = ", pos.x, pos.y, " : ", 25,10, 10,10,10); DbgPrint("ball1->GetPos().x : .y ", ball1->GetPos().x, ball1->GetPos().y, " : ", 300); //dbgPrint("rand()%... : ", dbgTmp6, 355,10, 50,50,1); #endif //Костыли: перенёс сюда из OnUpdate() //Провека коллизий и пересчёт траекторий ///@@ Stoped_here 2014/09/16 m_pBallsMngr->ProcessIsHit(m_pPad, m_pBricksMngr->GetLavBricksPtr(), m_fSceneWidth, m_GameState); }