※回答する人も、質問する人も必ず読んでください
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する香具師 】
・ どんな事で躓いているのか明確にしる。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書け。
探検
Windowsゲームプログラミング 質問スレ
■ このスレッドは過去ログ倉庫に格納されています
1うゆ ◆vvvK3Fcqdg
2008/11/06(木) 21:28:45ID:lNn2skuQ2008/11/06(木) 21:30:16ID:lNn2skuQ
/ // \`ー ヾ \ へー-、 `二ー-、
/ / ハ 「 ヽ、 、 \ \へ `ヽゝ
/ ノ / /´ \ \ ヽ ヽ 、 ヽ \\ } }
/イ / / / ,| ヽ ヘ、 ヽ } ヘ l ヽ ト、 \イ ノ
,/ / / / l | l ヽ 、\ }_ェl,,ュ_l_ l ハ l \ `゙ ヽ
/ / / l l l | l ト、\_ヽ´lノ イ `/l _lヘ_l_ ヽヘ \
,/ l / l l l l | ,.k | `ー-ゝソ r _,.= ._ ソyハヽ`Y }ヽ 、 }、
| l l l l l l ヘイ ゝノ ≠" ̄`゙ |l l人 } l l }/丿
| i | トヘゝ ト、 rメ r _二_ 〃〃 |l l lイ / / /
| l l l \j、ゝィ'、 ≠ ̄` 丶 . - =y、 ノj} l l | ∧{ /
ヘ ハ 、l l / /|ハ ′〃 , ´ l ハノ lリ lヘ(
トイl l {八l| ヘゝ く / // / ィ l丿 Y >>1 乙♪
| l l l\| l "、 丶._ / /ィ イ´ノノ
| ヘ ヽ ハルァl ヽヘ、  ̄ / |从/
l ヘY 、ヽ_ル‐-、廴_≧==ェ-、-イ |
∨ヘ ト'/ ‐、: : l`ヽ二トミーニ._二 | __
\ベ/ : : :\: l \ `゙´ ̄~ ̄. :/
`゙/ : : : : : : : l \ \ .,,_.: : : : : /
/´ : : : : : : : : : | ヽ、ヽ ー=: : /`ー--‐、
/ /: : : : : : : : : :l \ / イ `)\: : : }
/゙/: : : : : : : /l: : : : :| ∨ メ、ヘ : :|
/ : : : : : : :): }: : : / /´/ヘハ: :l
‐'´ : : : : : : : : : : l: / l lο: \ : {
: : : : : : : : : : : : l | |:. :. ゙l: `l
\ : : : : : : : : : : : : :{ l l:. :. | : : \
/\ : : : : : : : : : : : : : : :| \ \:. . / : : : : |
/ / ハ 「 ヽ、 、 \ \へ `ヽゝ
/ ノ / /´ \ \ ヽ ヽ 、 ヽ \\ } }
/イ / / / ,| ヽ ヘ、 ヽ } ヘ l ヽ ト、 \イ ノ
,/ / / / l | l ヽ 、\ }_ェl,,ュ_l_ l ハ l \ `゙ ヽ
/ / / l l l | l ト、\_ヽ´lノ イ `/l _lヘ_l_ ヽヘ \
,/ l / l l l l | ,.k | `ー-ゝソ r _,.= ._ ソyハヽ`Y }ヽ 、 }、
| l l l l l l ヘイ ゝノ ≠" ̄`゙ |l l人 } l l }/丿
| i | トヘゝ ト、 rメ r _二_ 〃〃 |l l lイ / / /
| l l l \j、ゝィ'、 ≠ ̄` 丶 . - =y、 ノj} l l | ∧{ /
ヘ ハ 、l l / /|ハ ′〃 , ´ l ハノ lリ lヘ(
トイl l {八l| ヘゝ く / // / ィ l丿 Y >>1 乙♪
| l l l\| l "、 丶._ / /ィ イ´ノノ
| ヘ ヽ ハルァl ヽヘ、  ̄ / |从/
l ヘY 、ヽ_ル‐-、廴_≧==ェ-、-イ |
∨ヘ ト'/ ‐、: : l`ヽ二トミーニ._二 | __
\ベ/ : : :\: l \ `゙´ ̄~ ̄. :/
`゙/ : : : : : : : l \ \ .,,_.: : : : : /
/´ : : : : : : : : : | ヽ、ヽ ー=: : /`ー--‐、
/ /: : : : : : : : : :l \ / イ `)\: : : }
/゙/: : : : : : : /l: : : : :| ∨ メ、ヘ : :|
/ : : : : : : :): }: : : / /´/ヘハ: :l
‐'´ : : : : : : : : : : l: / l lο: \ : {
: : : : : : : : : : : : l | |:. :. ゙l: `l
\ : : : : : : : : : : : : :{ l l:. :. | : : \
/\ : : : : : : : : : : : : : : :| \ \:. . / : : : : |
3名前は開発中のものです。
2008/11/06(木) 21:45:18ID:MY0vkdOy4名前は開発中のものです。
2008/11/07(金) 11:26:17ID:zpZ6H2po 自演禁止
5名前は開発中のものです。
2008/11/08(土) 02:44:21ID:HuLbUvGn 簡単なアクションゲームだったら、経験から言って制御文、構造体(自己参照構造体含む。これ重要。)、
グラフィックの表示まで分かれば十分作れると思う。
まあ、本気で勉強すれば半年で、物分りの悪い人でも1年やればできると思うよ。
多分、以下のソースがなにやろうとしてるか分かれば制御文については大丈夫だと思う。
(もちろん実行しないで。2分ぐらいで作ったんでscanf使っててスマソ)
#include<stdio.h>
void main(void)
{
int a,b,i,j
a=1;
b=0;
i=0;
scanf("%d",&j);
while(i<j)
{
switch(i%2)
{
case 0:
a+=b;
printf("%d\n",a);
i++;
break;
case 1:
b+=a;
printf("%d\n",b);
i++;
break;
}
}
}
グラフィックの表示まで分かれば十分作れると思う。
まあ、本気で勉強すれば半年で、物分りの悪い人でも1年やればできると思うよ。
多分、以下のソースがなにやろうとしてるか分かれば制御文については大丈夫だと思う。
(もちろん実行しないで。2分ぐらいで作ったんでscanf使っててスマソ)
#include<stdio.h>
void main(void)
{
int a,b,i,j
a=1;
b=0;
i=0;
scanf("%d",&j);
while(i<j)
{
switch(i%2)
{
case 0:
a+=b;
printf("%d\n",a);
i++;
break;
case 1:
b+=a;
printf("%d\n",b);
i++;
break;
}
}
}
6名前は開発中のものです。
2008/11/08(土) 02:46:36ID:HuLbUvGn 二次元のマップって普通1次元配列でするよね?
X方向120、Y方向100のマップがあったら
$define MAPX 120
$define MAPY 100
$define MAP_SIZE MAPX*MAPY
int main(void) {
int map[MAP_SIZE];
int x=0,Y=0;
for(i=0;i<MAP_SIZE;i++) map[i]=0;
// もし X:54 Y:33 の位置に1を代入したければ
x=54; y=33;
map[x+(y*MAPX)]=1;
}
でいいんだよね??
2次元使ったほうがいいかいな?
76 名前:名前は開発中のものです。 投稿日:02/08/11 23:35 ID:YyqnVN0I
>>73
サイズが大きかったり可変長だったりすると配列ではなくalloc系で取得する
ことになるだろうし、1次元のほうがいいとおもう。
77 名前:名前は開発中のものです。 投稿日:02/08/12 14:35 ID:???
>>76
callocだと0クリアしてくれるから便利だよな
X方向120、Y方向100のマップがあったら
$define MAPX 120
$define MAPY 100
$define MAP_SIZE MAPX*MAPY
int main(void) {
int map[MAP_SIZE];
int x=0,Y=0;
for(i=0;i<MAP_SIZE;i++) map[i]=0;
// もし X:54 Y:33 の位置に1を代入したければ
x=54; y=33;
map[x+(y*MAPX)]=1;
}
でいいんだよね??
2次元使ったほうがいいかいな?
76 名前:名前は開発中のものです。 投稿日:02/08/11 23:35 ID:YyqnVN0I
>>73
サイズが大きかったり可変長だったりすると配列ではなくalloc系で取得する
ことになるだろうし、1次元のほうがいいとおもう。
77 名前:名前は開発中のものです。 投稿日:02/08/12 14:35 ID:???
>>76
callocだと0クリアしてくれるから便利だよな
7名前は開発中のものです。
2008/11/08(土) 02:51:52ID:HuLbUvGn C言語でアクションゲームが作りたい
http://pc11.2ch.net/test/read.cgi/gamedev/1020417733/
110 名前:名前は開発中のものです。 投稿日:03/05/29 11:44 ID:xadUaM2+
まともだよね
Cがテーマだったりすると厨房は書きこまないのかな
http://pc11.2ch.net/test/read.cgi/gamedev/1020417733/
110 名前:名前は開発中のものです。 投稿日:03/05/29 11:44 ID:xadUaM2+
まともだよね
Cがテーマだったりすると厨房は書きこまないのかな
2008/11/08(土) 02:58:07ID:dxRdOPSU
>>6
2次元のデータを1次元配列で管理しようとするのは、
俺みたいな昔の貧乏性のプログラマだけでいい。
斜め移動でも座標計算1回で済むとか、そんな貧乏臭い発想。
コンパイル時にサイズ不定でも、簡単なラッパ作ればいい。
2次元のものは2次元のまま扱った方が、デバッグもしやすい。
2次元のデータを1次元配列で管理しようとするのは、
俺みたいな昔の貧乏性のプログラマだけでいい。
斜め移動でも座標計算1回で済むとか、そんな貧乏臭い発想。
コンパイル時にサイズ不定でも、簡単なラッパ作ればいい。
2次元のものは2次元のまま扱った方が、デバッグもしやすい。
2008/11/08(土) 09:53:33ID:UXTY631e
左右がつながってるマップだと境界のこと考えなくて済むしな。
『延々と西に向かってたら、いつのまにか北極に立っていた』
な…、何をいっているのかわからねーと思うが(ry
『延々と西に向かってたら、いつのまにか北極に立っていた』
な…、何をいっているのかわからねーと思うが(ry
10名前は開発中のものです。
2008/11/10(月) 07:44:57ID:qLM/iweq2008/11/10(月) 18:09:32ID:sl4Agbo8
記述的に分かりやすいのは多次元にする方だと思う。
多次元のメモリの確保、開放は少しややこしいけど、
ライブラリとして4次元ぐらいまで作っておけば便利。
多次元のメモリの確保、開放は少しややこしいけど、
ライブラリとして4次元ぐらいまで作っておけば便利。
2008/11/11(火) 07:30:30ID:Cky45WKB
>>8
日本語わかる?
日本語わかる?
2008/11/11(火) 09:46:35ID:sZyTNaq5
ワカリマセーン、ニホンゴムツカシーネ!
2008/11/11(火) 22:02:10ID:v37PimrE
ブロック崩しを作ろうとしているのですが、
ブロックとの当たり判定でボールがブロックとぶつかった際、本来跳ね返らなければいけないのに
時々跳ね返らず貫通して進んでしまうことが起きてしまいます、貫通弾はまだ書いてないのに……
どうしたらいいのでしょうか
言語は基本C、クラスとか途中で変数宣言とかちょっとだけC++入ってるかも、DxLibを使用しています
肝心の当たり判定の部分のソース
for(int i=0;i<BlockX;i++){
for(int s=0;s<BlockY;s++){
if(BlockFlag[i][s]){
if(ShellX>=LeftEdge+35*i-ShellR && ShellX<=LeftEdge+35*(i+1)+ShellR){ //X範囲の判定
if(ShellY>=UpEdge+20*s-ShellR && ShellY<=UpEdge+20*(s+1)+ShellR){ //Y範囲の判定
BlockFlag[i][s]=0;
ShellVX*=(-1);
ShellVY*=(-1);
}
}
}
}
}
ブロックとの当たり判定でボールがブロックとぶつかった際、本来跳ね返らなければいけないのに
時々跳ね返らず貫通して進んでしまうことが起きてしまいます、貫通弾はまだ書いてないのに……
どうしたらいいのでしょうか
言語は基本C、クラスとか途中で変数宣言とかちょっとだけC++入ってるかも、DxLibを使用しています
肝心の当たり判定の部分のソース
for(int i=0;i<BlockX;i++){
for(int s=0;s<BlockY;s++){
if(BlockFlag[i][s]){
if(ShellX>=LeftEdge+35*i-ShellR && ShellX<=LeftEdge+35*(i+1)+ShellR){ //X範囲の判定
if(ShellY>=UpEdge+20*s-ShellR && ShellY<=UpEdge+20*(s+1)+ShellR){ //Y範囲の判定
BlockFlag[i][s]=0;
ShellVX*=(-1);
ShellVY*=(-1);
}
}
}
}
}
2008/11/11(火) 22:04:00ID:v37PimrE
主な変数説明
・BlockX、BlockY :ブロックがx・y軸に最大いくつ並んでいるか
・BlockFlag[][] :ブロックが存在しているかいないか、0以外で存在
・ShellX、ShellY :弾のx・y座標
・ShellR :弾の半径
・LeftEdge、UpEdge :ブロック崩しの画面の左端、上端の位置
・ShellVX、ShellVY :弾のx・y速度
当たっているのが縦からなのか、横からなのかの判定がどうにもわからなかったので
当たったらx・y速度両方反転するようにしてしまっています
よければその判定方法も教えてください
宜しくお願いします
・BlockX、BlockY :ブロックがx・y軸に最大いくつ並んでいるか
・BlockFlag[][] :ブロックが存在しているかいないか、0以外で存在
・ShellX、ShellY :弾のx・y座標
・ShellR :弾の半径
・LeftEdge、UpEdge :ブロック崩しの画面の左端、上端の位置
・ShellVX、ShellVY :弾のx・y速度
当たっているのが縦からなのか、横からなのかの判定がどうにもわからなかったので
当たったらx・y速度両方反転するようにしてしまっています
よければその判定方法も教えてください
宜しくお願いします
2008/11/11(火) 22:07:21ID:z2MnAfhy
移動前と移動後の間も含めて接触判定をするだけ
2008/11/11(火) 23:33:50ID:v37PimrE
2008/11/12(水) 01:01:19ID:M3s12QpR
>>17
ボールとブロックの距離が、
ボールの(1 フレームの)移動距離よりも短いとき、
ボールはブロックに衝突することなくすり抜けしまう。
対処方法として、
ボールの移動前後を結ぶ線分との交差判定を行う
ことが挙げられる。
ボールとブロックの距離が、
ボールの(1 フレームの)移動距離よりも短いとき、
ボールはブロックに衝突することなくすり抜けしまう。
対処方法として、
ボールの移動前後を結ぶ線分との交差判定を行う
ことが挙げられる。
2008/11/12(水) 06:00:58ID:xaKS9jsU
20名前は開発中のものです。
2008/11/12(水) 10:40:33ID:kFb9KO8q >>14
>>19でも指摘されてるけど、2つのブロックに同時に触れた場合は
移動方向が元に戻るから貫通するよ。
だから「ShellVY*=(-1);」の後に「break;」を入れれば
とりあえず貫通するバグは無くなる。
でもそもそも判定ロジックが間違ってるので、全部書き直さなきゃダメ。
当たった部分が縦の面か横の面かの判定をしなきゃまともに跳ね返らない。
前フレームの玉の位置と現在の位置を線で結んで、各ブロックの
4つの側面のどこと交差しているかを判定する必要がある。
横面と交差してるならYだけ反転、縦面と交差してるならXだけ
反転させる。
玉のスピードが速いと、複数のブロックと同時交差する場合もある。
その時は一番玉に近いブロックとの判定だけに絞り、玉の位置も
そのブロックに接触する直前のポジションまで移動させる。
>>19でも指摘されてるけど、2つのブロックに同時に触れた場合は
移動方向が元に戻るから貫通するよ。
だから「ShellVY*=(-1);」の後に「break;」を入れれば
とりあえず貫通するバグは無くなる。
でもそもそも判定ロジックが間違ってるので、全部書き直さなきゃダメ。
当たった部分が縦の面か横の面かの判定をしなきゃまともに跳ね返らない。
前フレームの玉の位置と現在の位置を線で結んで、各ブロックの
4つの側面のどこと交差しているかを判定する必要がある。
横面と交差してるならYだけ反転、縦面と交差してるならXだけ
反転させる。
玉のスピードが速いと、複数のブロックと同時交差する場合もある。
その時は一番玉に近いブロックとの判定だけに絞り、玉の位置も
そのブロックに接触する直前のポジションまで移動させる。
2114
2008/11/12(水) 15:58:41ID:58FrgqUc なるほど、理屈は理解できました
しかしどういうソースを書けばいいのかがまるで思いつかない……
いったいどういしたらいいのでしょうか?
しかしどういうソースを書けばいいのかがまるで思いつかない……
いったいどういしたらいいのでしょうか?
22名前は開発中のものです。
2008/11/13(木) 09:45:19ID:KTGSzFRw >>21
ベクトルが理解できてないみたいだね。
まずは数学の勉強から始めないと。
線分交差の判定はここを参考にしてみたら?
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/Intersection.htm
ベクトルが理解できてないみたいだね。
まずは数学の勉強から始めないと。
線分交差の判定はここを参考にしてみたら?
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/Intersection.htm
2314
2008/11/14(金) 05:07:34ID:wWFUvlwz >>22
ありがとうございます
しかし読んでみたはいいのですがそれをどう組み込んでいいかがやっぱり思いつきませんでした
なのでがんばって自己流で判定組んでみたら
「○○.exe の 0x0056e0b6 でハンドルされていない例外が発生しました: 0xC0000094: Integer division by zero」
とか出されてしまいました、一体これはどういうことなんでしょうか?
ありがとうございます
しかし読んでみたはいいのですがそれをどう組み込んでいいかがやっぱり思いつきませんでした
なのでがんばって自己流で判定組んでみたら
「○○.exe の 0x0056e0b6 でハンドルされていない例外が発生しました: 0xC0000094: Integer division by zero」
とか出されてしまいました、一体これはどういうことなんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】トランプ大統領、中国の習近平国家主席を「国賓」として招待することに ★3 [ニョキニョキ★]
- 日本と中国を結ぶ12航空路線で全便欠航 中国人に最も人気の海外旅行先は日本から韓国に ★2 [ぐれ★]
- 【東京・足立の車暴走】赤信号無視か 危険運転致死傷疑いも視野に捜査 逮捕された職業不詳の男性(37)は精神疾患で通院歴も ★3 [ぐれ★]
- 【音楽】「なんでこんなバカが国のトップなの?」 若者に人気のバンド「GEZAN」のマヒトゥ・ザ・ピーポーが高市総理に苦言 [シャチ★]
- 【芸能】84歳・岩下志麻の最新姿「マジか」「嘘でしょ」「こんな…」「本当に」「恐るべし」「雰囲気が違う」 [湛然★]
- 石破前総理「どうすれば台湾有事にならないかを考えるべき」★2 [1ゲットロボ★]
- 【実況】博衣こよりのえちえち朝こよ🧪★2
- 【実況】博衣こよりのえちえち朝こよ🧪
- 【悲報】小野田紀美さん、宇宙人みたいな服を着てしまう…また、そのことを突っ込まれブチ切れ中www [856698234]
- 高市早苗の車のナンバー、中国人に気付かれて炎上wwwwwwwwwwwwwwwwwwwwwww [329329848]
- ホロライブ、上場企業なのに故人を悪質ネタにして炎上 [329329848]
- 習「中国とアメリカは軍国主義(日本)を倒した仲間。勝利の成果を守るために協力すべきだ」とトランプに呼び掛け。高市早苗、終了。 [153490809]
