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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 意図したキャラの移動とUPとDOWNについて。

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

#4

by Ouxiy » 4年前

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

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

#3

by Ouxiy » 4年前

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

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

#2

by みけCAT » 4年前

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

ちなみに、このコードではScreenFlip();やClearDrawScreen();があちこちで呼ばれていてよくないですね。
さらに、SetDrawScreen(DX_SCREEN_BACK); (など) で描画先を裏画面にしていないのにScreenFlip();を使っているという問題もあります。

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

#1

by Ouxiy » 4年前

コード:

#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座標を加算
です。
関数を調べたのですが、わからないままです。

ページトップ