前回は初歩的な質問にも関わらず回答してくださりありがとうございました。
今回も初歩的な質問・・・・もしかしたら私が簡単なミスを見落としているだけなのかもしれないのですが
カメラの移動のプログラムを組んでいるのですが該当するキーボードを押してもカメラが移動してくれず何が原因なのかわからず困っております。
下記がそのコードとなります。
input.h
#ifndef INPUTH
#define INPUTH
class CInput
{
//int Key1[256];
public:
CInput();
~CInput();
int Key1[256];
int gpUpdateKey();
};
#endif
#include "DxLib.h"
#include "Input.h"
CInput::CInput()
{
for(int i = 0; i < 256; i++)
{
Key1[i] = 0;
}
}
CInput::~CInput()
{}
//--------------------------------------------------------------------
int CInput::gpUpdateKey()
{
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int ii = 0; ii < 256; ii++ )
{
if( tmpKey[ii] != 0 )
{ // i番のキーコードに対応するキーが押されていたら
Key1[ii]++; // 加算
}
else
{ // 押されていなければ
Key1[ii] = 0; // 0にする
}
}
return 0;
}
#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();
CCamera::CAMERA_DATA CameraInfo;
CameraInfo = camera->GetCameraParam();
SetDrawScreen( DX_SCREEN_BACK ); // 描画先を裏画面にする
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && input->gpUpdateKey() == 0)
{
camera->CameraSet(0.0f, 0.0f,-250.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() ;
//カメラの移動
if(input->Key1[KEY_INPUT_RIGHT] == 1)
{
CameraInfo.Position.x += 50;
}
}
stage->Unload(ISLAND);
playermodel->Unload(MIKU);
delete stage;
delete playermodel;
WaitKey(); // キー入力待ち
DxLib_End(); // DXライブラリ終了処理
return 0;
}
また、キーボードの入力については下記のサイトを参考にさせていただきました。
http://dixq.net/g/02_09.html
そしてもう1つ質問があるのですが、現在はあくまでもテストということでキーの状態を格納する変数をpublicに置いているのですが、
将来的にはprivateに置いて下手にアクセスされないようにしたいと思っております。
そのような場合はどのように修正したらよろしいでしょうか?
最初はprivateにおいてやっていたのですがmainからInputクラスにキーの状態をうまく受け渡す方法が思いつかずとりあえず現在のような形にしております。
上記2点をご教授して頂けたらと思います。
どうかよろしくお願い致します。