Closed luismrsilva closed 9 years ago
Em C++, devem usar referência e não ponteiros (referência vs ponteiros). Para além disso, quando passam um objeto a uma função devem usar referência. Por exemplo,
Vector3 Vector3::operator=(const Vector3 & vec) {
_x = vec.getX();
_y = vec.getY();
_z = vec.getZ();
return *this;
}
Tal como quando usam ponteiros, isto evita que vec
seja copiado para o stack quando a função é chamada. Para além disso, não se esqueçam de usar const
quando o objeto que estão a passar não será modificado.
A keyword const
também pode ser usada para dizer que um método de uma classe não altera a instância da classe. Por exemplo
Vector3 Vector3::operator*(GLdouble num) const {
return Vector3(getX() * num, getY() * num, getZ() * num);
}
diz ao compilador que, sendo a
um Vector3
, a * 5
não modifica o objeto a
.
Mais um exemplo:
void DynamicObject::setOrientation(const Vector3 & orientation) {
_orientation = orientation.normalized();
_angleZ = _orientation.angleBetweenZ( _initOrientation );
}
Meti os argumentos de setPosition()
e setCenter()
, por exemplo, como referências. Também coloquei const
quando relevante.
getSpeed()
e getPosition()
continuam inconsistentes, mas o problema está resolvido.
Por exemplo: em Entity, get e set position recebem um ponteiro para Vector3 mas em DynamicObject get e setSpeed recebem um Vector3 .
Isto dificulta imenso as contas que têm de ser realizadas com Vector3. Atualmente, isto verifica-se quando o GameManager atualiza a _movingCamera.