ご返信ありがとうございました。
アニメーションについて…
すみません言葉足らずでした。やろうとしていることについてコードを載せて改めてご説明させていただきますと
コード:
#include <math.h>
#include "DxLib.h"
#define ANIMERATE 8
static int mStartTime; //測定開始時刻
static int mCount; //カウンタ
static float mFps; //fps
static const int N = 60; //平均を取るサンプル数
static const int FPS = 60; //設定したFPS
int x;
int hero[48];
int animcounter = 0;
bool state=0;
bool Update() {
if (mCount == 0) { //1フレーム目なら時刻を記憶
mStartTime = GetNowCount();
}
if (mCount == N) { //60フレーム目なら平均を計算する
int t = GetNowCount();
mFps = 1000.f / ((t - mStartTime) / (float)N);
mCount = 0;
mStartTime = t;
}
mCount++;
state = 0;
return true;
}
void Anim(bool flag) {
animcounter++;
animcounter &= MAXINT;
int ac = 0;
ac=animcounter / ANIMRATE;
if (flag == 0) {
DrawGraph(x, 50, hero[ac % 4], true);
}
//DrawGraph(x, 50, hero[ac % 8], true);
DrawFormatString(0, 32, GetColor(255, 255, 255), "animecounter=%d", animcounter);
DrawFormatString(0, 64, GetColor(255, 255, 255), "ac=%d", ac);
DrawFormatString(0, 96, GetColor(255, 255, 255), "ac %%16=%d", ac % 4+2);
DrawFormatString(0, 128, GetColor(255, 255, 255), "satate=%d", state);
}
void Draw() {
DrawFormatString(0, 0, GetColor(255, 255, 255), "%.1f", mFps);
Anim(state);
if (CheckHitKey(KEY_INPUT_RIGHT) != 0) {
state = 1;
x = x + 10;
}
if (CheckHitKey(KEY_INPUT_LEFT) != 0) {
state = 1;
x = x - 10;
}
}
void Wait() {
int tookTime = GetNowCount() - mStartTime; //かかった時間
int waitTime = mCount * 1000 / FPS - tookTime; //待つべき時間
if (waitTime > 0) {
Sleep(waitTime); //待機
}
}
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定
int x = 0;
LoadDivGraph("media\\spritesheet_64col.png", 48, 6, 8, 64, 64, hero);
// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while (ProcessMessage() == 0 && ClearDrawScreen() == 0) {
Update(); //更新
Draw(); //描画
ScreenFlip();
Wait(); //待機
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
上記のhero[64]にLoaddivGraphを使ってスプライトシートを読み込んで
DrawGraphで歩く、ジャンプ、攻撃とアニメーションを使い分ける方法についてです。
1、一次配列を使うと、0~8=攻撃、9~24=ジャンプ、25~32=歩くと煩雑になりますが
2、二次配列を使うと、
hero[攻撃][ac%8]
hero[ジャンプ][ac%16]
hero[歩く][ac%8]と表現できてわかりやくなると思いますが
LoaddivGraph関数で上記を実現することはできるのでしょうか?
3について
if文を使ってなんぼやってもうまくいかないと悩みまくっていたのに現実はこんな簡単なことで実現できるとは…
解決した喜びもあるのですが、こんな事で悩んでいたことにへこんでしまいそうです。