Dxライブラリ、C++について質問です
640x480のウィンドウ内でゲームを作りたいと思っていてコードを書いているのですが
STGのように
主人公の画像を移動させていて画面外に出たら画面内に戻す、というコードを書きました
一部だけですが、
if (x > 640) x = 640;
if (x < 0) x = 0;
こうやって書きました
一応これでしっかり動作はするのですが
例えば画像を右に動かして、画像はxが640で止まっていますが計算上の座標?は、
しっかり640以降も計算されています
文章じゃ伝わりにくいのですが
ようは、押し続けたら押し続けた分だけ戻って来るのに時間がかかります
座標計算をxは0から640にyは0から480に制限することはできますか?
【質問です】 座標の計算について?
Re: 【質問です】 座標の計算について?
もちろんできるでしょう。HighW さんが書きました:座標計算をxは0から640にyは0から480に制限することはできますか?
似た処理は例えば龍神録プログラミングの館 (9章)でもやっているはずです。
画像を描画する座標だけクリップしているということですか?HighW さんが書きました:640x480のウィンドウ内でゲームを作りたいと思っていてコードを書いているのですが
STGのように
主人公の画像を移動させていて画面外に出たら画面内に戻す、というコードを書きました
一部だけですが、
if (x > 640) x = 640;
if (x < 0) x = 0;
こうやって書きました
「x」とだけ書かれても、私には何のことかよくわかりません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 【質問です】 座標の計算について?
すみませんでした
以下がすべてのコードです
69、71行目のことなのですが
最初の投稿ではxになっていますがいまはmxにしています
どのように改変すれば良いでしょうか?
以下がすべてのコードです
#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); //画像の描画
}
最初の投稿ではxになっていますがいまはmxにしています
どのように改変すれば良いでしょうか?
Re: 【質問です】 座標の計算について?
main関数もWinMain関数もループっぽい処理も見当たらないので、これがすべてのコードだとは思えません。HighW さんが書きました:以下がすべてのコードです
例えば を消して、代わりにHighW さんが書きました:どのように改変すれば良いでしょうか?
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にするといいでしょう。
閾値と修正後の値が異なっていますが、新しいコードに合わせました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 【質問です】 座標の計算について?
すみません
いろいろなファイルに分けていて、問題が起きたのはGame.cppという
ファイルだったので、そこだけしか載せていませんでした
少ない情報の中感謝です!
ありがとうございます!
いろいろなファイルに分けていて、問題が起きたのはGame.cppという
ファイルだったので、そこだけしか載せていませんでした
少ない情報の中感謝です!
ありがとうございます!
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る: