最近、プログラムから離れていましたが、今日久しぶりにゲーム開発を開始しました。
エラーは出ませんでしたが、fpsを確認してみましたところ、fpsが45.0程度しか出ていませんでした。
どこかで無駄な処理をしているのかと考え、描写部と更新部を同時にコメントアウトして実行してみましたところ、
描写も更新も行っていないにも関わらずfpsが45.0程度しか出ていません。
また、プログラムも、自機とボード程度しか実装しておりません。(目に見えるものはその程度ですが、fps処理やキー入力処理
も実装しております。)
自分が怪しいと思うところのコードです。また、他に
ゲームの総括
・Application.cpp
fpsの制御
・fps.cpp
キー入力
・Key.cpp
メイン(そのまんま
・main.cpp
があります。
汚いですがソースコードです。
Player.cpp
#include "Player.h"
#include "DxLib.h"
#include "Macro.h"
#include "Define.h"
#include "Key.h"
#include <math.h>
static const int g_nImgSizeWid = 30, g_nImgSizeHei = 46; // 画像サイズ
static const int g_nImgPlyrPosX[] = { 0, 32, 64, 96, 128, 160, 192, 224, };
static const int g_nImgPlyrPosY[] = { 0, 48, 96, };
typedef enum // ドット絵の向き
{
eMOVE_NOEMAL, // 普通
eMOVE_LEFT, // 左向き
eMOVE_RIGHT, // 右向き
}
eMOVE; // 名前が変なのですが、仮のものなのでご容赦ください
typedef struct Player_t
{
int nAnmMove; // アニメーションの制御
int nCnt; // カウンタ
int nImg; // アニメーション
int nBombNum; // ボム数
int nPlyrNum; // 残機数
int nAliveFlag; // 生存フラグ
int nImgHdl; // 画像ハンドル
double x, y;
}
Player_t;
static Player_t g_tagPlayer;
void Player_Init()
{
memset( &g_tagPlayer, 0, sizeof( struct Player_t ) );
g_tagPlayer.nAnmMove = eMOVE_NOEMAL;
g_tagPlayer.nBombNum = 3;
g_tagPlayer.nPlyrNum = 2;
g_tagPlayer.x = 300.0;
g_tagPlayer.y = 400.0;
}
int Player_Load()
{
char pPath[256] = "dat/img/pl10.png";
Player_Init(); // 初期化
g_tagPlayer.nImgHdl = LoadGraph( pPath );
if( g_tagPlayer.nImgHdl == -1 ) {
return -1;
}
return 0;
}
void Player_Move()
{
float x=0, y=0;
if( KeyInput_Get( KEY_INPUT_UP ) > 0 ) { y = -PLAYER_MOVE_SPD; } // 移動
if( KeyInput_Get( KEY_INPUT_DOWN ) > 0 ) { y = +PLAYER_MOVE_SPD; }
if( KeyInput_Get( KEY_INPUT_LEFT ) > 0 ) { x = -PLAYER_MOVE_SPD; }
if( KeyInput_Get( KEY_INPUT_RIGHT ) > 0 ) { x = +PLAYER_MOVE_SPD; }
if( x && y ) {
x /= sqrt( 2.0 );
y /= sqrt( 2.0 );
}
g_tagPlayer.x += x, g_tagPlayer.y += y;
}
int Player_Update()
{
Player_Move(); // 自機の移動
g_tagPlayer.nCnt ++;
g_tagPlayer.nImg = ( g_tagPlayer.nCnt % 24 ) / 3; // アニメーション
return 0;
}
void Player_Draw()
{
DrawRectGraphF( (float)g_tagPlayer.x, (float)g_tagPlayer.y,
g_nImgPlyrPosX[ g_tagPlayer.nImg ], g_nImgPlyrPosY[ g_tagPlayer.nAnmMove ],
g_nImgSizeWid, g_nImgSizeHei,
g_tagPlayer.nImgHdl, TRUE, FALSE );
}
void Player_End()
{
DeleteGraph( g_tagPlayer.nImgHdl ); // メモリからデータを削除
g_tagPlayer.nImgHdl = NULL;
}
#include "GameMgr.h"
#include "DxLib.h"
#include "Board.h"
#include "Player.h"
#include "Macro.h"
int GameMgr_Load()
{
if( Player_Load() ) return -1;
if( Board_Load() ) return -1;
return 0;
}
int GameMgr_Update()
{
if( Player_Update() ) return -1;
return 0;
}
void GameMgr_Draw()
{
Player_Draw();
Board_Draw();
}
void GameMgr_End()
{
Player_End();
Board_End();
}
#include "Board.h"
#include "DxLib.h"
#include "Macro.h"
#define BOARD_NUM 4
typedef struct
{
int DestX, DestY;
int ScrX, ScrY;
int Width, Height;
}
Board_t;
static const Board_t csBoard[ BOARD_NUM ] =
{
/*
{描写X,描写Y,抜き出すX,抜き出すY,横,高さ}*/
{ 0, 0, 0, 0, 128, 480 },
{ 512, 0,128, 0, 128, 480 },
{ 128, 0, 0, 480, 384, 16 },
{ 128, 464, 0, 496, 384, 16 },
};
static int g_ImgHdl;
int Board_Load()
{
char pPath[128] = "dat/img/frontdisp.png";
g_ImgHdl = NULL;
g_ImgHdl = LoadGraph( pPath );
if( g_ImgHdl == -1 ) {
eprintfDx( "%s読み込み失敗", pPath );
return -1;
}
return 0;
}
void Board_Draw()
{
for( int i=0 ; i<BOARD_NUM ; i++ ) {
DrawRectGraph( csBoard[i].DestX, csBoard[i].DestY,
csBoard[i].ScrX, csBoard[i].ScrY,
csBoard[i].Width, csBoard[i].Height,
g_ImgHdl, TRUE, FALSE);
}
}
void Board_End()
{
DeleteGraph( g_ImgHdl );
g_ImgHdl = NULL;
}
Visual Studio Express 2012 for Windows Desktop
Dxライブラリ( Ver 3.11b )
Window 7