0
で変数を渡す私、彼らは非常に似ているので、私は1つに統合しようとしています、次の2つのクラスの機能があります。奇妙な行動2クラスの機能をマージして参照
void Camera::UpdateCameraPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Position.SetValue(
Player.x + CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Player.y + CAMERA_ORBIT_OFFSET * sin(-beta),
Player.z + CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Position = Player;
}
}
void Camera::UpdatePlayerPosition(void) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
Player.SetValue(
Position.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
Position.y - CAMERA_ORBIT_OFFSET * sin(-beta),
Position.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
Player = Position;
}
}
あなたが見ることができるように、Player
とPosition
はクラスの2つのプライベート変数です。彼らはデータ型がVector3D
、別のクラスです。
私はこのようにそれらをマージしようとしている:
void Camera::UpdateCameraOrPlayerPosition(Vector3D &target, Vector3D reference) {
if(cameraMode == CAMERA_MODE_THIRD_PERSON) {
float alpha = Math::DegreesToRadians(Rotation.y);
float beta = Math::DegreesToRadians(Rotation.x);
target.SetValue(
reference.x - CAMERA_ORBIT_OFFSET * cos(beta) * sin(alpha),
reference.y - CAMERA_ORBIT_OFFSET * sin(-beta),
reference.z - CAMERA_ORBIT_OFFSET * cos(beta) * cos(alpha)
);
} else {
target = reference;
}
}
これは、コンパイルして、このようなしかし、それは同じように動作しません。他の2つの関数は動作していますが、代わりに関数呼び出しをこの関数呼び出しに置き換えると、関数呼び出しが正しく動作しません。
私は置換これらは:私はまた、代わりに参照のポインタと試み
UpdatePlayerPosition() -> UpdateCameraOrPlayerPosition(Player, Position)
UpdateCameraPosition() -> UpdateCameraOrPlayerPosition(Position, Player)
、結果は同じでした。私はここに何かを逃していますか
'UpdateCameraPosition() - > UpdateCameraOrPlayerPosition(Position、Player)の場合、' CAMERA_ORBIT_OFFSET'の使用を+から - に変更しました。 –
私はそんなに馬鹿です...そしてブラインド:S –