コード例 #1
0
//// 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);
}
コード例 #2
0
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);

}