バウンド処理がわかりません

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

バウンド処理がわかりません

#1

投稿記事 by フェノン » 15年前

頻繁にお世話になっています。
今回、弾をバウンドさせようとと思うのですが、
うまくいきません。
ソースか、アルゴだけでもと思い、探したりしましたが、なかなか見当たりません。
もしよければ、教えていただけませんか?
お願いします。

Dixq (管理人)

Re:バウンド処理がわかりません

#2

投稿記事 by Dixq (管理人) » 15年前

> フェノンさん

こんにちは。
何で作っていますか?DXライブラリでしょうか?
バウンドといってもどのようにバウンドするのかが解らないので、明確には答えられませんが、
館にサンプルがあるのでよければ参考にして下さい。

http://dixq.net/g/32.html

フェノン

Re:バウンド処理がわかりません

#3

投稿記事 by フェノン » 15年前

ありがとうございます。
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:バウンド処理がわかりません

#4

投稿記事 by 釣り師 » 15年前

 DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。(使用する際はC言語の知識だけで大丈夫です)
↑まんま公式サイトに書いてあったことです。
たぶん、学校で習うことはないと思いますし、関数の使い方なども親切にサイトの方に書かれていますので機会があれば使ってみてもいいと思います。
http://homepage2.nifty.com/natupaji/DxLib/index.html

すみません、僕も勉強中の身なのでバランス処理などはわかりません。ごめんなさい。

フェノン

Re:バウンド処理がわかりません

#5

投稿記事 by フェノン » 15年前

ありがとうございます。
とりあえず、DXライブラリの説明は呼んだのですが、
C言語じゃあ、使えないし、どうすればいいのかな?と、
悩んでいたところです。
う~ん、cで何とかなればと思いましたが・・・
またの機会に、ありがとうございます。

EX

Re:バウンド処理がわかりません

#6

投稿記事 by EX » 15年前

簡単なバウンス処理なら、意外と簡単にできます。
ただ、ブロック崩しのような、ちょっと複雑な場合は工夫が要ります。
アルゴリズムでいえば、
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 になる。
絵で言えば、 

|  &#8599;   
|/
|\
|  &#8598;

こんな感じかな?


説明するのは得意じゃないんです・・・
ともかく、数字ではなく変数を使用し、バウンドさせる時に、変数に-1をかけることがミソとなります。

ISLe

Re:バウンド処理がわかりません

#7

投稿記事 by ISLe » 15年前

「うまくいかない」ではなくてどういう動作を期待していて実際にはどういう動作になっているかを具体的に書きましょう。

ボールの大きさが4x4ピクセルあるようですが画面の左と下ではボールがはみ出しますね。

画面の四隅ではXY座標同時にはみ出す可能性があるので、if文をX座標の分とY座標の分は分ける(elseで繋げない)ほうが良いと思います。

とは言えプログラムソースを見た限りでは「うまくいってる」と思います。

フェノ

Re:バウンド処理がわかりません

#8

投稿記事 by フェノ » 15年前

色々お答えありがとうございます。
とりあえず、アドバイスを含めてまとめます。

希望する実行結果

4×4の四角が画面内でバウンスさせるプログラム

イメージ図

 --------------------
| ┏ |
| ┏|
| ┓|
| ■ ┓ |
| ┛ ┓ |
| ┛ ┓ |
--------------------

実際の結果(現在)

 --------------------
|   |
|┏  |
| ┏  ウロウロ  |
| ■   |
| ┛   |
| ┛   |
--------------------

EXさんや、ISLeさんからアドバイスを頂いた通りにするとかなり形になってきました。
もう少し頑張ってみます。
また、アドバイスや至らぬ点、等ございましたら、よろしくお願いします。

フェノン

Re:バウンド処理がわかりません

#9

投稿記事 by フェノン » 15年前

ありがとうございます。
なんとかできました。
お世話になりました。また、機会があればお世話になると思いますが、
お願いします。

閉鎖

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