ページ 1 / 1
【質問です】 座標の計算について?
Posted: 2016年8月22日(月) 15:40
by HighW
Dxライブラリ、C++について質問です
640x480のウィンドウ内でゲームを作りたいと思っていてコードを書いているのですが
STGのように
主人公の画像を移動させていて画面外に出たら画面内に戻す、というコードを書きました
一部だけですが、
if (x > 640) x = 640;
if (x < 0) x = 0;
こうやって書きました
一応これでしっかり動作はするのですが
例えば画像を右に動かして、画像はxが640で止まっていますが計算上の座標?は、
しっかり640以降も計算されています
文章じゃ伝わりにくいのですが
ようは、押し続けたら押し続けた分だけ戻って来るのに時間がかかります
座標計算をxは0から640にyは0から480に制限することはできますか?
Re: 【質問です】 座標の計算について?
Posted: 2016年8月22日(月) 16:49
by みけCAT
HighW さんが書きました:座標計算をxは0から640にyは0から480に制限することはできますか?
もちろんできるでしょう。
似た処理は例えば
龍神録プログラミングの館 (9章)でもやっているはずです。
HighW さんが書きました:640x480のウィンドウ内でゲームを作りたいと思っていてコードを書いているのですが
STGのように
主人公の画像を移動させていて画面外に出たら画面内に戻す、というコードを書きました
一部だけですが、
if (x > 640) x = 640;
if (x < 0) x = 0;
こうやって書きました
画像を描画する座標だけクリップしているということですか?
「x」とだけ書かれても、私には何のことかよくわかりません。
Re: 【質問です】 座標の計算について?
Posted: 2016年8月22日(月) 18:19
by HighW
すみませんでした
以下がすべてのコードです
コード:
#include "Game.h"
#include "SceneMgr.h"
#include "DxLib.h"
static int mImageHandle; //画像ハンドル格納用変数
static int flan;
int x, y;
int r;
int a1, b1;
int bsx, bsy;
int mx, my;
int L, R, U, D;
int L2, R2, U2, D2;
int LM, RM, UM, DM;
int SetCreateGraphColorBitDepth(32);
//初期化
void Game_Initialize() {
mImageHandle = LoadGraph("images/rice.jpg"); //画像のロード
flan = LoadGraph("images/Player.png");
}
//終了処理
void Game_Finalize() {
DeleteGraph(mImageHandle); //画像の解放
}
//更新
void Game_Update() {
if (CheckHitKey(KEY_INPUT_ESCAPE) != 0) { //Escキーが押されていたら
SceneMgr_ChangeScene(eScene_Menu);//シーンをメニューに変更
}
}
//描画
void Game_Draw() {
bsx = 600;
bsy = 400;
if (CheckHitKey(KEY_INPUT_A) == 1)
{
x -= 4;
if (CheckHitKey(KEY_INPUT_LSHIFT) == 1) x += 2;
}
if (CheckHitKey(KEY_INPUT_D) == 1)
{
x += 4;
if (CheckHitKey(KEY_INPUT_LSHIFT) == 1) x -= 2;
};
if (CheckHitKey(KEY_INPUT_W) == 1)
{
y -= 4;
if (CheckHitKey(KEY_INPUT_LSHIFT) == 1) y += 2;
};
if (CheckHitKey(KEY_INPUT_S) == 1)
{
y += 4;
if (CheckHitKey(KEY_INPUT_LSHIFT) == 1) y -= 2;
};
mx = bsx + x;
my = bsy + y;
if (mx > 640) mx = 620;
if (mx < 0) mx = 20;
WaitTimer(20);
DrawRotaGraph(mx, y, 0.5, 0.0, flan, TRUE); //画像の描画
}
69、71行目のことなのですが
最初の投稿ではxになっていますがいまはmxにしています
どのように改変すれば良いでしょうか?
Re: 【質問です】 座標の計算について?
Posted: 2016年8月22日(月) 18:51
by みけCAT
HighW さんが書きました:以下がすべてのコードです
main関数もWinMain関数もループっぽい処理も見当たらないので、これがすべてのコードだとは思えません。
HighW さんが書きました:どのように改変すれば良いでしょうか?
例えば
コード:
mx = bsx + x;
my = bsy + y;
if (mx > 640) mx = 620;
if (mx < 0) mx = 20;
を消して、代わりに
コード:
if (bsx + x > 640) x = 620 - bsx;
if (bsx + x < 0) x = 20 - bsx;
if (bsy + y > 480) y = 460 - bsy;
if (bsy + y < 0) y = 20 - bsy;
mx = bsx + x;
my = bsy + y;
を入れる、みたいな感じでしょうか?
DrawRotaGraphの引数のyもmyにするといいでしょう。
閾値と修正後の値が異なっていますが、新しいコードに合わせました。
Re: 【質問です】 座標の計算について?
Posted: 2016年8月22日(月) 19:52
by HighW
すみません
いろいろなファイルに分けていて、問題が起きたのはGame.cppという
ファイルだったので、そこだけしか載せていませんでした
少ない情報の中感謝です!
ありがとうございます!
Re: 【質問です】 座標の計算について?
Posted: 2016年8月22日(月) 21:37
by Dixq (管理人)
ゲームプログラミングの館でも言っているように
WaitTimer(20);
を書くのはやめましょう・・。
http://dixq.net/g/h_11.html