頻繁にお世話になっています。
今回、弾をバウンドさせようとと思うのですが、
うまくいきません。
ソースか、アルゴだけでもと思い、探したりしましたが、なかなか見当たりません。
もしよければ、教えていただけませんか?
お願いします。
バウンド処理がわかりません
Re:バウンド処理がわかりません
> フェノンさん
こんにちは。
何で作っていますか?DXライブラリでしょうか?
バウンドといってもどのようにバウンドするのかが解らないので、明確には答えられませんが、
館にサンプルがあるのでよければ参考にして下さい。
http://dixq.net/g/32.html
こんにちは。
何で作っていますか?DXライブラリでしょうか?
バウンドといってもどのようにバウンドするのかが解らないので、明確には答えられませんが、
館にサンプルがあるのでよければ参考にして下さい。
http://dixq.net/g/32.html
Re:バウンド処理がわかりません
ありがとうございます。
C言語で制作しているのですが、うまくいかなくて・・
あと、DXライブラリとはなんですか?
冒頭で出てきていましたが、学校ではまだ出てきていませんので、
よく、わからないのですが・・・
よければ、詳しく知りたいのですが・・・
とりあえずは、バウンス処理をお願いします。
えっと、ブロック崩しのように思ったのですが、
うまくいきません。念のため、ソースを置いておきます。
また、学校のオリジナルの関数などがありますので、わからないところがあれば、
お答えします。
以下ソース
#include <conio.h>
#include "dglib.h"
char_far gvram;
main()
{
int x=160,y=150;
int vx=1,vy=1;
do{
dg_gcls(gvram,0);
if(getch3('E')==1){break;} /*終了*/
if(x<0){
vx=1;
}else if(y<0){
vy=1;
}else if(x>=320){
vx=-1;
}else if(y>=200){
vy=-1;
}
x=x+vx;
y=y+vy;
/*四角を描画*/
dg_box(gvram,x,y,4,4,1,2);
/*座標表示*/
dg_printf(160,0,15,"x:%3d,y:%3d",x,y);
Sleep(30);
ML(); /*ウェイト*/
}while(1);
}
よろしくお願いします。
C言語で制作しているのですが、うまくいかなくて・・
あと、DXライブラリとはなんですか?
冒頭で出てきていましたが、学校ではまだ出てきていませんので、
よく、わからないのですが・・・
よければ、詳しく知りたいのですが・・・
とりあえずは、バウンス処理をお願いします。
えっと、ブロック崩しのように思ったのですが、
うまくいきません。念のため、ソースを置いておきます。
また、学校のオリジナルの関数などがありますので、わからないところがあれば、
お答えします。
以下ソース
#include <conio.h>
#include "dglib.h"
char_far gvram;
main()
{
int x=160,y=150;
int vx=1,vy=1;
do{
dg_gcls(gvram,0);
if(getch3('E')==1){break;} /*終了*/
if(x<0){
vx=1;
}else if(y<0){
vy=1;
}else if(x>=320){
vx=-1;
}else if(y>=200){
vy=-1;
}
x=x+vx;
y=y+vy;
/*四角を描画*/
dg_box(gvram,x,y,4,4,1,2);
/*座標表示*/
dg_printf(160,0,15,"x:%3d,y:%3d",x,y);
Sleep(30);
ML(); /*ウェイト*/
}while(1);
}
よろしくお願いします。
Re:バウンド処理がわかりません
DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(使用する際はC言語の知識だけで大丈夫です)
↑まんま公式サイトに書いてあったことです。
たぶん、学校で習うことはないと思いますし、関数の使い方なども親切にサイトの方に書かれていますので機会があれば使ってみてもいいと思います。
http://homepage2.nifty.com/natupaji/DxLib/index.html
すみません、僕も勉強中の身なのでバランス処理などはわかりません。ごめんなさい。
↑まんま公式サイトに書いてあったことです。
たぶん、学校で習うことはないと思いますし、関数の使い方なども親切にサイトの方に書かれていますので機会があれば使ってみてもいいと思います。
http://homepage2.nifty.com/natupaji/DxLib/index.html
すみません、僕も勉強中の身なのでバランス処理などはわかりません。ごめんなさい。
Re:バウンド処理がわかりません
ありがとうございます。
とりあえず、DXライブラリの説明は呼んだのですが、
C言語じゃあ、使えないし、どうすればいいのかな?と、
悩んでいたところです。
う~ん、cで何とかなればと思いましたが・・・
またの機会に、ありがとうございます。
とりあえず、DXライブラリの説明は呼んだのですが、
C言語じゃあ、使えないし、どうすればいいのかな?と、
悩んでいたところです。
う~ん、cで何とかなればと思いましたが・・・
またの機会に、ありがとうございます。
Re:バウンド処理がわかりません
簡単なバウンス処理なら、意外と簡単にできます。
ただ、ブロック崩しのような、ちょっと複雑な場合は工夫が要ります。
アルゴリズムでいえば、
結果的に 弾の座標X-(-5) = 弾の座標X+5 になる。
絵で言えば、
| ↗
|/
|\
| ↖
こんな感じかな?
説明するのは得意じゃないんです・・・
ともかく、数字ではなく変数を使用し、バウンドさせる時に、変数に-1をかけることがミソとなります。
ただ、ブロック崩しのような、ちょっと複雑な場合は工夫が要ります。
アルゴリズムでいえば、
int speed=5;まず何でもいいから変数を用意し、数字を入れる。
弾の座標X-=speed; 弾の座標Y-=speed;↑で弾を斜めに動かす。speed=5なので、各々5ピクセルずつ動く。
if( 弾の座標X<=0 ) speed*=-1;↑で、弾の座標Xが0以下に(つまり画面端)になったら、speedに-1をかけることで、speedが-5となり、
結果的に 弾の座標X-(-5) = 弾の座標X+5 になる。
絵で言えば、
| ↗
|/
|\
| ↖
こんな感じかな?
説明するのは得意じゃないんです・・・
ともかく、数字ではなく変数を使用し、バウンドさせる時に、変数に-1をかけることがミソとなります。
Re:バウンド処理がわかりません
「うまくいかない」ではなくてどういう動作を期待していて実際にはどういう動作になっているかを具体的に書きましょう。
ボールの大きさが4x4ピクセルあるようですが画面の左と下ではボールがはみ出しますね。
画面の四隅ではXY座標同時にはみ出す可能性があるので、if文をX座標の分とY座標の分は分ける(elseで繋げない)ほうが良いと思います。
とは言えプログラムソースを見た限りでは「うまくいってる」と思います。
ボールの大きさが4x4ピクセルあるようですが画面の左と下ではボールがはみ出しますね。
画面の四隅ではXY座標同時にはみ出す可能性があるので、if文をX座標の分とY座標の分は分ける(elseで繋げない)ほうが良いと思います。
とは言えプログラムソースを見た限りでは「うまくいってる」と思います。
Re:バウンド処理がわかりません
色々お答えありがとうございます。
とりあえず、アドバイスを含めてまとめます。
希望する実行結果
4×4の四角が画面内でバウンスさせるプログラム
イメージ図
--------------------
| ┏ |
| ┏|
| ┓|
| ■ ┓ |
| ┛ ┓ |
| ┛ ┓ |
--------------------
実際の結果(現在)
--------------------
| |
|┏ |
| ┏ ウロウロ |
| ■ |
| ┛ |
| ┛ |
--------------------
EXさんや、ISLeさんからアドバイスを頂いた通りにするとかなり形になってきました。
もう少し頑張ってみます。
また、アドバイスや至らぬ点、等ございましたら、よろしくお願いします。
とりあえず、アドバイスを含めてまとめます。
希望する実行結果
4×4の四角が画面内でバウンスさせるプログラム
イメージ図
--------------------
| ┏ |
| ┏|
| ┓|
| ■ ┓ |
| ┛ ┓ |
| ┛ ┓ |
--------------------
実際の結果(現在)
--------------------
| |
|┏ |
| ┏ ウロウロ |
| ■ |
| ┛ |
| ┛ |
--------------------
EXさんや、ISLeさんからアドバイスを頂いた通りにするとかなり形になってきました。
もう少し頑張ってみます。
また、アドバイスや至らぬ点、等ございましたら、よろしくお願いします。