2011-04-13 18 views
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; 
    } 
} 

あなたが見ることができるように、PlayerPositionはクラスの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) 

、結果は同じでした。私はここに何かを逃していますか

+3

'UpdateCameraPosition() - > UpdateCameraOrPlayerPosition(Position、Player)の場合、' CAMERA_ORBIT_OFFSET'の使用を+から - に変更しました。 –

+1

私はそんなに馬鹿です...そしてブラインド:S –

答えて

0

target.SetValueは、カメラの場合は+が使用され、X座標とY座標を調整する場合はPlayerの場合があります。