2014-09-11 3 views
0

Ниже приведена функция, которая помогает управлять автомобилем, создает матрицу, затем создает вектор, используя эту матрицу, и теперь я хочу получить x, y и z от этого вектора. Я попытался i32 CarX = vecVel.GetX;, но им получить эти три ошибкиполучить xyz из вектора

error C3867: 'Vec2::GetX': function call missing argument list; use '&Vec2::GetX' to create a pointer to member 
error C2440: '=' : cannot convert from 'const float (__thiscall Vec2::*)(void) const' to 'i32' 
IntelliSense: a pointer to a bound function may only be used to call the function 

i32 carX = vecVel[0]; Я думал, может работать, но нет. i32 carX = vecVel.FX; не работает, потому что он говорит FX защищен

void APIENTRY Car_Update(Object *pObject) 
{ 

    Car *pCar=(Car *)pObject; 
    Matrix mat; 
    Matrix *pmat; 
    Object_GetMatrix(pObject,&mat); 
    Object_GetMatrixPtr(pObject,&pmat); 

    Vec3 vecVel(pCar->vecBounce + mat.GetColumn(2) * pCar->fSpeed); 

    pCar->vecBounce = pCar->vecBounce *0.5f; 
    mat.RotY(pCar->fRot); 
    mat.SetColumn(3, vecVel + mat.GetColumn(3)); 
    //mat.GetColumn; 

    pCar->fSpeed *= 0.8f;// friction 

    pCar->fRotWheelLast = pCar->fRotWheel; 
    pCar->fRotWheel += (pCar->fSpeed*30.f); 

    Level_GenerateDraw(&mat.GetColumn(3)); 
    Level_GenerateAlphas(&mat.GetColumn(3)); 

    Car_Light(pCar); 

    Collision_UpdateMat(pCar->pBox, &mat); 

    float fCol=1.f; 

    while(Level_TestBoxCollide(pCar->pBox)) 
    { 

     ColData Data; 
     float fDot; 

     Collision_GetColData(&Data);  

     fDot = -1.8f * Data.normal.Dot(vecVel); 

     pCar->vecBounce = (vecVel + Data.normal * fDot)*fCol; 

     pCar->fSpeed = 0.f; 

     mat.SetColumn(3, pmat->GetColumn(3) + pCar->vecBounce); 

     Collision_UpdateMat(pCar->pBox, &mat); 

     vecVel = pCar->vecBounce; 

     fCol-=0.1f; 

     if(fCol<0.f) 
     { 
      pCar->vecBounce.Set(0.f,0.f,0.f); 
      mat.SetColumn(3, pmat->GetColumn(3)); 

      Collision_UpdateMat(pCar->pBox, &mat); 

      ASSERT(!Level_TestBoxCollide(pCar->pBox), "still colliding"); 
     } 
    } 

    Object_SetMatrix(pObject, &mat); 

    Vec3 vecWidth(mat.GetColumn(0)*0.2f); 
    Vec3 vecWheel1(mat.GetColumn(3) - mat.GetColumn(0)*0.6f); 
    Vec3 vecWheel2(mat.GetColumn(3) + mat.GetColumn(0)*0.6f); 

    vecWheel1.SetY(vecWheel1.GetY() - 0.7f); 
    vecWheel2.SetY(vecWheel2.GetY() - 0.7f); 
    Trail_AddPoint((Object*)pCar->pTrail[0], vecWheel1, vecWidth); 
    Trail_AddPoint((Object*)pCar->pTrail[1], vecWheel2, vecWidth); 

} 

ответ

0

Компилятор говорит вам, что для того, чтобы вызвать функцию класса вы должны следовать зову с круглыми скобками: i32 carX = vecVel.FX(). Это предполагает, что FX является функцией, которая возвращает значение i32 на Vec2.

Смежные вопросы