意図したキャラの移動とUPとDOWNについて。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ouxiy
記事: 165
登録日時: 3ヶ月前

意図したキャラの移動とUPとDOWNについて。

#1

投稿記事 by Ouxiy » 3ヶ月前

コード:

#include "DxLib.h"


// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	SetGraphMode(1000, 480, 32); // ウィンドウの大きさを指定
	ChangeWindowMode(TRUE);

	if (DxLib_Init() == -1)        // DXライブラリ初期化処理
	{
		return -1;            // エラーが起きたら直ちに終了
	}


	//キー取得用配列
	char key[256];
	//x座標
	int playerX = 20; // X座標
    int playerY = 300; // Y座表


	//グラフィックハンドル格納用配列
    int gh[12];
	LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);
	DrawGraph(playerX, playerY, gh[8], FALSE);// プレイヤーの画像を描画

	while (ScreenFlip() == 0 && ProcessMessage() == 0 ) {
		
			int 加算=70;
			int b = 10;

			// カーソルキーの右が押されている
			if (CheckHitKey(KEY_INPUT_RIGHT)) {
				playerX = playerX + 加算; // プレイヤーのX座標を加算

				// 画面に出力
				ScreenFlip();
				// 画面をクリア
				ClearDrawScreen();
				// プレイヤーの画像を描画
				

					DrawGraph(playerX, playerY, gh[2], true);//DrawGraphはLoadDivGraphにより12分割された配列の一つである、gh[8]を描画できる関数である。

				
			}
			
			if (CheckHitKey(KEY_INPUT_UP)) {
				playerY = playerY - b; // プレイヤーのY座標を加算

				// 画面に出力
				ScreenFlip();
				// 画面をクリア
				ClearDrawScreen();
				// プレイヤーの画像を描画
				DrawGraph(playerX, playerY, gh[5], true);
			}


				if (CheckHitKey(KEY_INPUT_LEFT)) {
					playerX = playerX - 加算; // プレイヤーのX座標を加算


					// 画面をクリア
					ClearDrawScreen();
					// プレイヤーの画像を描画
					DrawGraph(playerX, playerY, gh[8], true);

				}

				
				if (CheckHitKey(KEY_INPUT_DOWN)) {
					playerY = playerY + b; // プレイヤーのY座標を加算

					// 画面に出力
					ScreenFlip();
					// 画面をクリア
					ClearDrawScreen();
					// プレイヤーの画像を描画
					DrawGraph(playerX, playerY, gh[11], true);
				}
			
	}

	DxLib_End();                // DXライブラリ使用の終了処理

	return 0;                // ソフトの終了 

}

ロックマンエグゼのような動きにするため、座標や配列を用いてキャラを動かそうと考えました。
そこで質問が二つあります。
一つは、+加算では、動画ロックマンエグゼのようにきっちり一マス分動けないのですが、どんな関数をどのように使えば瞬間移動するように左右上下に動けるでしょうか?

二つ目は、keyを使いupで+bとするとy座標は下に下り、downで-bとするとyは上がるのですが、これは何故でしょうか?

コード:

if (CheckHitKey(KEY_INPUT_UP)) {
				playerY = playerY - b; // プレイヤーのY座標を加算

コード:

if (CheckHitKey(KEY_INPUT_DOWN)) {
					playerY = playerY + b; // プレイヤーのY座標を加算
です。
関数を調べたのですが、わからないままです。

アバター
みけCAT
記事: 6235
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 意図したキャラの移動とUPとDOWNについて。

#2

投稿記事 by みけCAT » 3ヶ月前

Ouxiy さんが書きました:
3ヶ月前
一つは、+加算では、動画ロックマンエグゼのように
きっちり一マス分動けないのですが、どんな関数をどのように使えば瞬間移動するように左右上下に動けるでしょうか?
「キーが押され始めたフレームでだけ」「一マス分座標を動かす」ようにするといいでしょう。
例えば2.9章 全てのキーの入力状態を取得するのgpUpdateKey関数を使うことで、キーが何フレーム押されているかを取得できます。
Ouxiy さんが書きました:
3ヶ月前
二つ目は、keyを使いupで+bとするとy座標は下に下り、downで-bとするとyは上がるのですが、これは何故でしょうか?
仕様です。
なぜそのような仕様になっているかは、よくわかりません。

ちなみに、このコードではScreenFlip();やClearDrawScreen();があちこちで呼ばれていてよくないですね。
さらに、SetDrawScreen(DX_SCREEN_BACK); (など) で描画先を裏画面にしていないのにScreenFlip();を使っているという問題もあります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Ouxiy
記事: 165
登録日時: 3ヶ月前

Re: 意図したキャラの移動とUPとDOWNについて。

#3

投稿記事 by Ouxiy » 3ヶ月前

ありがとうございます。
早速直していきます。

Ouxiy
記事: 165
登録日時: 3ヶ月前

Re: 意図したキャラの移動とUPとDOWNについて。

#4

投稿記事 by Ouxiy » 3ヶ月前

お陰様で瞬間移動のようなプログラムが書けました。

返信

“C言語何でも質問掲示板” へ戻る