初歩的な質問なのですが、現在勉強の一環で3Dのマップをキャラが自由に動き回るというプログラムを作成しているのですが、
カメラの適切な座標を知りたいのでデバッグモードの1つとしてカメラの座標、注視点の座標を表示させ、
キーボードで動かせるようにしようとしているのですが、カメラの構造体を別のところに渡したいのですがどのように渡したらいいのかわかりません。
具体的にはカメラのクラス内になるカメラの座標等をもった構造体をmain.cppに渡したいのですが自分で書いたコードだと下記のエラー文が出てしまいます。
warning C4091: 'typedef ' : 変数が何も宣言されていないときは、'CAMERA_DATA' の左辺を無視します。
error C2079: 'CameraInfo' が 未定義の struct 'CAMERA_DATA' で使用しています。
error C3867: 'CCamera::GetCameraParam': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&CCamera::GetCameraParam' を使用してください
error C2440: '=' : 'CCamera::CAMERA_DATA (__thiscall CCamera::* )(void)' から 'int' に変換できません。
また、コードは下記のとおりとなります
Camera.h
#ifndef CAMERAH
#define CAMERAH
#include "DxLib.h"
class CCamera
{
typedef struct
{
VECTOR Position;
float WatchX;
float WatchY;
float WatchZ;
float Anglex;
float Angley;
float Anglez;
float spd1;
float spd2;
float spd3;
} CAMERA_DATA;
CAMERA_DATA tCameraData;
public:
CCamera();
~CCamera();
void CameraSet(float PosX, float PosY, float PosZ, float WatchX, float WatchY, float WatchZ, float AngleX, float AngleY, float AngleZ);
CAMERA_DATA GetCameraParam();
};
#endif
Camera.cpp
#include "Camera.h"
#define PI 3.141592654
CCamera::CCamera()
{
memset(&tCameraData, 0, sizeof(tCameraData));
tCameraData.Position.z = -285.0f;
tCameraData.Angley = 1.0f;
}
//---------------------------------------------------------
CCamera::~CCamera()
{}
//---------------------------------------------------------
void CCamera::CameraSet(float PosX, float PosY, float PosZ, float WatchX, float WatchY, float WatchZ, float AngleX, float AngleY, float AngleZ)
{
tCameraData.Position.x = PosX;
tCameraData.Position.y = PosY;
tCameraData.Position.z = PosZ;
tCameraData.WatchX = WatchX;
tCameraData.WatchY = WatchY;
tCameraData.WatchZ = WatchZ;
tCameraData.Anglex = AngleX;
tCameraData.Angley = AngleY;
tCameraData.Anglez = AngleZ;
SetCameraPositionAndTargetAndUpVec(VGet(tCameraData.Position.x, tCameraData.Position.y, tCameraData.Position.z),
VGet(tCameraData.WatchX, tCameraData.WatchY, tCameraData.WatchZ),
VGet(tCameraData.Anglex, tCameraData.Angley, tCameraData.Anglez));
SetCameraNearFar(1, 1000);
SetupCamera_Perspective(PI/4);
}
CCamera::CAMERA_DATA CCamera::GetCameraParam()
{
return tCameraData;
}
#include "DxLib.h"
#include "Input.h"
#include "Stage.h"
#include "Camera.h"
#include "PlayerModel.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#define ISLAND (0)
#define MIKU (0)
#define BACK (1)
const int MaxStage = 2;
typedef struct CAMERA_DATA;
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
ChangeWindowMode(TRUE);
SetGraphMode( 720 , 540 , 16 ); // 画面モードの設定
DxLib_Init(); // DXライブラリ初期化処理
CInput* input = new CInput();
CStage* stage = new CStage();
CCamera* camera = new CCamera();
CPlayerModel* playermodel = new CPlayerModel();
CAMERA_DATA CameraInfo;
CameraInfo = camera->GetCameraParam;
int Key[256];
for(int ii = 0; ii < 256; ii++)
{
Key[ii] = 0;
}
Key[256] = input->CheckKey();
SetDrawScreen( DX_SCREEN_BACK ); // 描画先を裏画面にする
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && input->gpUpdateKey() == 0)
{
camera->CameraSet(0.0f, 0.0f,-150.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
stage->LoadFiles(ISLAND,"Stage/batokin_island5.x");
playermodel->LoadFile(MIKU, "PlayerModel/Miku/Miku.mv1");
stage->SetStagePos(ISLAND, 0.0f, 0.0f, 0.0f);
playermodel->SetPlayerPos(0.0f, 0.0f, 0.0f);
stage->DrawStage(ISLAND);
playermodel->DrawModel(MIKU);
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
stage->Unload(ISLAND);
playermodel->Unload(MIKU);
delete stage;
delete playermodel;
WaitKey(); // キー入力待ち
DxLib_End(); // DXライブラリ終了処理
return 0;
}