Ниже приведена функция, которая помогает управлять автомобилем, создает матрицу, затем создает вектор, используя эту матрицу, и теперь я хочу получить 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);
}