最近C言語を学びはじめていて、DXライブラリを使って勉強をしています。
今、このサイトでの→http://dxlib.o.oo7.jp/
サンプルプログラムを参考にさせていただいているのですが
マップチップ?でのプレイヤーの画像表示ができずにいます。
今はプレイヤーの表示をDrawBoxで描画しているのですが、DrawGraphで
どのように書けばいいのか分からないので、ヒントをお願いします。
// アクションサンプルプログラムメイン
int ActMain(void)
{
// 描画先を裏画面にセット
SetDrawScreen(DX_SCREEN_BACK);
// 垂直同期信号を待たない
SetWaitVSyncFlag(FALSE);
// プレイヤーの座標を初期化
PlX = 320.0F;
PlY = 240.0F;
// プレイヤーの落下速度を初期化
PlDownSp = 0.0F;
// ジャンプ中フラグを倒す
PlJumpFlag = FALSE;
// アイテムが表示されてる間はフラグをTRUEにする
GetItemFlag = FALSE;
// バレットのグラフィックをロード
ShotGraph = LoadGraph("media\\バレット.png");
// ShotFlagに0を代入して画面上に表示させないようにする
ShotFlag = 0;
// 入力状態の初期化
Input = 0;
EdgeInput = 0;
// 60FPS固定用、時間保存用変数を現在のタイムカウントにセット
FrameStartTime = GetNowCount();
// メインループ開始、ESCキーで外に出る
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
// 画面のクリア
ClsDrawScreen();
// 1/60秒立つまで待つ
while (GetNowCount() - FrameStartTime < 1000 / 60)
{
Sleep(1);
}
// 現在のタイムカウントを保存
FrameStartTime = GetNowCount();
// 入力状態を更新
{
int i;
// パッド1とキーボードから入力を得る
i = GetJoypadInputState(DX_INPUT_KEY_PAD1);
// エッジを取った入力をセット
EdgeInput = i & ~Input; 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
// 入力状態の保存
Input = i;
}
// プレイヤーの移動処理
{
float MoveX, MoveY;
// 移動量の初期化
MoveX = 0.0F;
MoveY = 0.0F;
// 左右の移動を見る
if ((Input & PAD_INPUT_LEFT) != 0) MoveX -= SPEED;
if ((Input & PAD_INPUT_RIGHT) != 0) MoveX += SPEED;
// 地に足が着いている場合のみジャンプボタン(ボタン1 or Zキー)を見る
if (PlJumpFlag == FALSE && (EdgeInput & PAD_INPUT_A) != 0)
{
PlDownSp = -JUMP_POWER;
PlJumpFlag = TRUE;
}
// 空中ジャンプを可能にする
if (PlJumpFlag == TRUE && (EdgeInput & PAD_INPUT_A) != 0)
{
PlDownSp = -JUMP_POWER;
PlJumpFlag = FALSE;
}
// 落下処理
PlDownSp += G;
// 落下速度を移動量に加える
MoveY = PlDownSp;
// 移動量に基づいてキャラクタの座標を移動
CharMove(&PlX, &PlY, &PlDownSp, MoveX, MoveY, CHAR_SIZE, &PlJumpFlag);
}
// マップの描画
{
int i, j;
for (i = 0; i < MAP_HEIGHT; i++)
{
for (j = 0; j < MAP_WIDTH; j++)
{
// 1~7はブロックチップを表しているので1~7のところだけ描画
switch (MapData[i][j])
{
case 1:
case 6:
case 7:
DrawBox(
j * CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
GetColor(255, 255, 255), TRUE);
break;
case 2:
DrawTriangle(
j * CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
GetColor(255, 255, 255), TRUE);
break;
case 3:
DrawTriangle(
j * CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
j * CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
GetColor(255, 255, 255), TRUE);
break;
case 4:
DrawTriangle(
j * CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
GetColor(255, 255, 255), TRUE);
break;
case 5:
DrawTriangle(
j * CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
j * CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE,
GetColor(255, 255, 255), TRUE);
break;
case 8:
DrawBox(
j * CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
GetColor(0, 255, 255), TRUE);
break;
}
}
}
}
// プレイヤーの描画(DrawBoxで表示ではなく画像で表示する)
DrawBox((int)(PlX - CHAR_SIZE * 0.5F), (int)(PlY - CHAR_SIZE * 0.5F),
(int)(PlX + CHAR_SIZE * 0.5F) + 1, (int)(PlY + CHAR_SIZE * 0.5F) + 1,
GetColor(255, 0, 0), TRUE);
// 画面の更新
ScreenFlip();
}
// 終了
return 0;
}