例の「識別子が見つかりませんでした」エラーと格闘しています。
プロトタイプ宣言できてて、そのヘッダファイルをインクルードできてて、名前が合ってる,,,
他になにか原因でもあるのだろうか...と、今ココで「関数の中から他の関数を参照してるのがダメなんじゃね」
と思って書き換え中...出来たでござる。
なんと、日記を書くまでもなかったようです。ただコレ...ヘッダファイル内でのプロトタイプ宣言は
他のファイルから関数を参照するためのものであって、そのヘッダファイルを参照していない
ファイルからは参照できないのね...(今考えると当たり前だ。
なんとゲームプログラミングは難しい物なんだ...(すっとぼけ
メモメモ
► スポイラーを表示
[修正前]
Main.cpp
Player.h
Player.cpp
Main.cpp
#include "DxLib.h"
#include "Player.h"
#include "KeyBoard.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(TRUE);
//DxLib初期化
DxLib_Init();
//ウィンドウサイズの変更
SetDrawScreen(DX_SCREEN_BACK);
Player_Init();
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
KeyBoard_Update();
Player_Update();
Player_Draw();
}
Player_Finalize();
}
#ifndef DEF_PLAYER_H
#define DEF_PLAYER_H
void Player_Init();
void Player_Update();
void Player_Draw();
void Player_Anim_Update(int, float); ←要らない
void Player_Finalize();
#endif
Player.cpp
#include "DxLib.h"
#include "KeyBoard.h"
//現在の状態
enum
{
STANDING,
SITTING,
JUMPING,
SEERIGHT,
SEELEFT,
WALKING,
MUTEKI,
RUNNING,
};
//アニメーションモード
enum
{
MODE_WALKING,
MODE_MUTEKI,
};
//マリオのいろんな情報
typedef struct
{
int x, y, flag;
float f;
float minus;
float mvsp;
float forSin;
int count_anm;
int flag_anm;
int img[16];
int jumpsount;
int now_flag;
bool see;
}m_Player;
//ジャンプの初速度
static const int JUMPPOW = 7;
//重力(のようなもの)
static const float G = 0.75;
//落下を滑らかに見せるための定数(押した長さによる高さの変化の幅の大きさ)
static const float FORSIN = 0.015f;
//最大横移動速度(Pixel/Frame)
static float MOVEMAX = 6;
static const int white = GetColor(255, 255, 255);
←ココにプロトタイプ宣言が必要(関数の位置による)
//ウィンドウの幅
const int W = 640;
//ウィンドウの高さ
const int H = 480;
//描画スケール
const int SCALE = 1;
m_Player mario;
//いろんな情報の初期化
void Player_Init()
{
LoadDivGraph("scr/image/CharChip_MarioL.png", 16, 4, 4, 32, 64, mario.img);
mario.jumpsount = LoadSoundMem("scr/sound/jump.wav");
mario.y = 320;
mario.x = 240;
mario.minus = 0;
mario.flag = 1;
mario.f = 0;
mario.mvsp = 0;
mario.forSin = 1.0f;
mario.flag_anm = 0;
mario.see = true;
mario.count_anm = 0;
}
//プレイヤーの更新
void Player_Update()
{
mario.now_flag = STANDING;
/********ジャンプについて********/
//キーZが押されたらジャンプ
if (KeyBoard_Get(KEY_INPUT_Z) == 1)
{
if (mario.flag == 0) PlaySoundMem(mario.jumpsount, DX_PLAYTYPE_BACK);
//フラグを立て、
mario.flag = 1;
//初速度を給与する
mario.f = JUMPPOW;
}
//キャラが空中にいるかつZが押されっぱなしかつマリオが頂点に辿り着くまでであれば
if (KeyBoard_Get(KEY_INPUT_Z) > 0 && mario.flag == 1 && mario.minus H - 64 * SCALE)
{
mario.forSin = 1.0f;
mario.f = 0;
mario.minus = 0;
mario.flag = 0;
mario.y = H - 64 * SCALE;
}
//実際に座標に対して計算する
mario.y = mario.y - (mario.f - mario.minus);
/********ジャンプについて******** ココまで*/
/*********左右移動について********/
//←キーが押されれば
if (KeyBoard_Get(KEY_INPUT_LEFT) > 0 && mario.now_flag != SITTING)
{
//右を向かせて
if (!mario.flag)mario.see = false;
//最高速度以下であれば加速させる
if (mario.mvsp 0 && mario.now_flag != SITTING)
{
if (!mario.flag)mario.see = true;
if (mario.mvsp > -MOVEMAX)
{
mario.mvsp -= 0.5f;
if (mario.flag)
{
mario.mvsp += 0.3f;
}
}
}
//通常は最高速度5pix/frame
MOVEMAX = 5;
//Xキーが押されていれば最高速度を上げる(ダッシュ状態)
if (KeyBoard_Get(KEY_INPUT_X) > 0) MOVEMAX = 7;
//↓キーが押されればしゃがむ
if (KeyBoard_Get(KEY_INPUT_DOWN) > 0)
{
mario.now_flag = SITTING;
}
//地面に付いている時、マリオは減速する
if (!mario.flag)
{
if (mario.mvsp = speed * 3){ mario.count_anm = 0; }
DrawFormatString(0, 128, white, "%d,\n", mario.count_anm);
//モード別の動作
switch (animMODE)
{
//WALKINGモードで呼び出されたら歩くようにする
case MODE_WALKING:
//デバッグ情報表示(通過したかどうか)
DrawFormatString(32, 128, white, "通過:MODE_WALKING,\n");
//スピード(指定フレーム)数で割って0であれば画像を切り替える
if (mario.count_anm % speed == 0)
{
DrawFormatString(256, 128, white, "通過:CHANGE_IMAGE,\n");
//まぁ色々計算(改善の余地有り。むしろ改善しろ)
if (speed 0 && mario.flag == 1 && mario.minus H - 64 * SCALE)
{
mario.forSin = 1.0f;
mario.f = 0;
mario.minus = 0;
mario.flag = 0;
mario.y = H - 64 * SCALE;
}
//実際に座標に対して計算する
mario.y = mario.y - (mario.f - mario.minus);
/********ジャンプについて******** ココまで*/
/*********左右移動について********/
//←キーが押されれば
if (KeyBoard_Get(KEY_INPUT_LEFT) > 0 && mario.now_flag != SITTING)
{
//右を向かせて
if (!mario.flag)mario.see = false;
//最高速度以下であれば加速させる
if (mario.mvsp 0 && mario.now_flag != SITTING)
{
if (!mario.flag)mario.see = true;
if (mario.mvsp > -MOVEMAX)
{
mario.mvsp -= 0.5f;
if (mario.flag)
{
mario.mvsp += 0.3f;
}
}
}
//通常は最高速度5pix/frame
MOVEMAX = 5;
//Xキーが押されていれば最高速度を上げる(ダッシュ状態)
if (KeyBoard_Get(KEY_INPUT_X) > 0) MOVEMAX = 7;
//↓キーが押されればしゃがむ
if (KeyBoard_Get(KEY_INPUT_DOWN) > 0)
{
mario.now_flag = SITTING;
}
//地面に付いている時、マリオは減速する
if (!mario.flag)
{
if (mario.mvsp = speed * 3){ mario.count_anm = 0; }
DrawFormatString(0, 128, white, "%d,\n", mario.count_anm);
//モード別の動作
switch (animMODE)
{
//WALKINGモードで呼び出されたら歩くようにする
case MODE_WALKING:
//デバッグ情報表示(通過したかどうか)
DrawFormatString(32, 128, white, "通過:MODE_WALKING,\n");
//スピード(指定フレーム)数で割って0であれば画像を切り替える
if (mario.count_anm % speed == 0)
{
DrawFormatString(256, 128, white, "通過:CHANGE_IMAGE,\n");
//まぁ色々計算(改善の余地有り。むしろ改善しろ)
if (speed <= mario.count_anm && mario.count_anm < speed * 2)
{
DrawFormatString(486, 128, white, "通過:CHANGE_04,\n");
mario.flag_anm = 4;
}
if (speed * 2 <= mario.count_anm && mario.count_anm < speed * 3)
{
DrawFormatString(486, 128, white, "通過:CHANGE_05,\n");
mario.flag_anm = 5;
}
if (mario.count_anm == 0)
{
DrawFormatString(486, 128, white, "通過:CHANGE_06,\n");
mario.flag_anm = 6;
}
}
break;
//MUTEKIモードで呼び出されても同様に
case MODE_MUTEKI:
DrawFormatString(0, 128, white, "通過:MODE_MUTEKI,\n");
if (mario.count_anm % speed == 0)
{
DrawFormatString(128, 128, white, "通過:CHANGE_IMAGE");
if (speed <= mario.count_anm && mario.count_anm < speed * 2)
{
DrawFormatString(128, 128, white, "通過:CHANGE_08");
mario.flag_anm = 8;
}
if (speed * 2 <= mario.count_anm && mario.count_anm < speed * 3)
{
DrawFormatString(128, 128, white, "通過:CHANGE_09");
mario.flag_anm = 9;
}
if (mario.count_anm == 0)
{
DrawFormatString(128, 128, white, "通過:CHANGE_10");
mario.flag_anm = 10;
}
}
break;
}
}
//終了処理
void Player_Finalize()
{
DeleteGraph(mario.img[0]);
}