10/07/26 12:47:19 D0ityX+N
回答ありがとうございます。
>>787
出力ウィンドウ見たら、文字が表示されていました!
こちらへの出力だったんですね。
>>788
てっきり画面のほうに出るのかと思っていました。
これで承継やメソッドが機能しているか確かめるのにつかえます。
>それどこで覚えてきたの?
「ゲーム作りで学ぶVisualC#」「独習C#」という本です。
変数・式・配列・承継・オーバーロードなどなど理解できたかなと
感じてXNAのほうに入ったところです。
791:名前は開発中のものです。
10/07/26 12:52:39 4eYzDjpe
XNAはC#が使えるだけで、作法はゲーム製作のそれに通じるものが多いので
言語解説本は捨てるべし
792:名前は開発中のものです。
10/07/26 13:02:30 jQ9XJeQI
言語理解してないとサンプル読めないでしょ
XNAのサンプルやオープンソースはOOでないと認めないみたいなノリのやつばっか
793:名前は開発中のものです。
10/07/26 14:16:26 D0ityX+N
>>791
C#に関して完全にゼロからなので、そういう本でクラスとかメソッドとか
から覚えないと何もわからないレベルだったので必要でした。
C#から実際のゲーム製作に移るに際して参考になる本などはあるでしょうか?
上で書いた解説書などにもXNAでのゲーム製作の例はあるのですが、一つのクラスに
収まるシンプルゲーム(ブロック崩しなど)で、ステージ構成を持ったゲームや
複数の敵キャラの処理方法などがわかりません。
きっとコンポーネントが実用できればと思うのですが、そういったもののゲームでの
運用を学ぶ良い方法はありますでしょうか。
794:名前は開発中のものです。
10/07/26 17:52:39 z3Xa1U1/
お前には無理。
795:名前は開発中のものです。
10/07/26 19:28:29 JdQH6uHW
>>793
>C#から実際のゲーム製作に移るに際して参考になる本などはあるでしょうか?
>>373
796:名前は開発中のものです。
10/07/26 21:43:10 X3Ed1AoL
がんばれ
797:名前は開発中のものです。
10/07/26 22:23:18 z3Xa1U1/
がんばってたらこんな糞みたいな質問しない。
798:名前は開発中のものです。
10/07/27 00:44:32 QZn/fdfk
>>793
まずネット上からコントローラーで一枚絵を動かすサンプルを見つけて、中身を理解する。
変数、式、配列まで理解しているなら、あとは条件式とループ命令を覚えれば簡単なゲームは作れるから頑張れ。
799:名前は開発中のものです。
10/07/27 20:23:02 3wk/T3Q2
何度も回答(と激励)していただきありがとうございます。
>>795の本ですが、前者は読み終え理解しました。クラスとメソッドの意味から
解説してくれていて、他の初心者本と比べても第一歩に最適でした。
>>798
シンプル(自機を動かして攻撃判定ある弾を撃つ)なゲームを動かせる
ぐらいになりました。ただ、カタチになるゲームにするとなると
Updateメソッドが巨大で雑然としすぎてしまいそうです。
解決のカギはコンポーネントと思うので、コンポーネントを使って
種類の違う敵やステージや弾丸やアイテムを整然と管理できるように
勉強中です。しかし参考書のサンプルは1つのクラス・Updateメソッドで
処理しつくしているものが多いんですね・・・。課題です。
もっと煮詰めて理解をふかめようと思います。
800:名前は開発中のものです。
10/07/28 16:17:56 dPdwSEyO
>>799
お、すげーじゃん。
そこまで行ったんなら、あとはひたすら頑張って書くだけ。
ただし、コードがゴチャゴチャにならないよう努力しよう。
Updateが巨大になりすぎるなら、こんもりとある処理を整理して内容ごとに
いくつかのメソッドに分け、Updateはそれらを呼び出すだけにすれば良いよ。
801:名前は開発中のものです。
10/07/28 21:43:02 I8ba/k2g
まともな話なら公式フォーラムでやったほうが答えてもらえるのに
802:名前は開発中のものです。
10/07/28 22:22:58 GFVAsthH
英語で回答があってもなんだか分からんけどねー
803:名前は開発中のものです。
10/07/28 22:39:53 1gCvsPLM
じゃあ日本語がよめるんじゃねーかよ
804:名前は開発中のものです。
10/07/28 22:58:01 eyV9KEFF
>>800
ありがとうございます。
コンポーネントばかり考えていましたが、おかげで
GameTimeを使っていない命令をメソッドでUpdateメソッドから分ける
ことができました。(基本を忘れていました)
805:名前は開発中のものです。
10/07/30 01:19:40 mR8LyZ8J
ひげねこさん夏休みなのにフォーラムで回答とか仕事しすぎ?
他の社員の方もがんばって下さい
806:名前は開発中のものです。
10/07/30 07:28:32 ztJpsLFf
VS2010への対応はまだですか?
807:名前は開発中のものです。
10/07/31 19:21:50 NzSzlOCe
やっぱりXNAですら初心者には敷居が高いみたいだな。
フォーラムを見てて思った
808:名前は開発中のものです。
10/07/31 19:51:30 bQIQPEc7
公式のフォーラムじゃないところでくだらない質問をバリバリ受け付けるところが無いんだよね
809:名前は開発中のものです。
10/07/31 20:15:46 AA/vufAk
えっ、ここがその受け皿じゃないのか
810:名前は開発中のものです。
10/07/31 21:43:25 NzSzlOCe
ここで質問するとフルボッコにされそうだわw
811:名前は開発中のものです。
10/08/01 13:07:34 Mw5+o/TE
前回、質問に答えていただきありがとうございました。
今あたり判定で行き詰っています。
//ショットの衝突判定
for (int i = 0; i < enemy1s.Count; i++)
{
BoundingBox shotClsn1 = new BoundingBox(
new Vector3(shot1pos[i].X, shot1pos[i].Y, 0),
new Vector3(shot1pos[i].X + 30, shot1pos[i].Y + 30, 0));
}
//敵さんの衝突判定
for (int i = 0; i < enemy1s.Count; i++)
{
BoundingBox enemyClsn1 = new BoundingBox(
new Vector3(enemy1s[i].X, enemy1s[i].Y, 0),
new Vector3(enemy1s[i].X + 30, enemy1s[i].Y + 30, 0));
}
と、このように設定したBoundingBoxですが、for文のブロック外に
BoundingBoxの効力が及びません。
本来なら、上記のようにつけた互いの判定を使って、たとえば
if (shotClsn1.Intersects(enemyClsn1) == true){}
のような条件文で判定を照らし合わせて各種処理をしたいのですが
よい方法はありませんでしょうか?
812:名前は開発中のものです。
10/08/01 13:23:38 Lz7ORa8o
== trueなんて書いちゃうレベルで効率的な方法を探り出したらゲーム完成しないだろうな。
まず泥臭いやり方でもゲームを完成させることに集中した方がいいね。
813:名前は開発中のものです。
10/08/01 14:00:47 PhpNw+LL
BoundingBox shotClsn1 = new BoundingBox(new Vector3(shot1pos[0].X, shot1pos[0].Y, 0),
new Vector3(shot1pos[0].X + 30, shot1pos[0].Y + 30, 0));
BoundingBox shotClsn1 = new BoundingBox(new Vector3(shot1pos[1].X, shot1pos[1].Y, 0),
new Vector3(shot1pos[1].X + 30, shot1pos[1].Y + 30, 0));
・
・
BoundingBox shotClsn1 = new BoundingBox(new Vector3(shot1pos[enemy1s.Count-1].X, shot1pos[enemy1s.Count-1].Y, 0),
new Vector3(shot1pos[enemy1s.Count-1].X + 30, shot1pos[enemy1s.Count-1].Y + 30, 0));
shotClsn1には一番最後のデータしか入ってないとか?
でもshotもenemyも1つずつだったらいけるのだろうか…
BoundingBoxの効力が及ばないという意味を詳しく
814:811
10/08/01 14:03:32 53uAWxuq
>>812コンパイラが最適してくれるからいーんです!!
815:名前は開発中のものです。
10/08/01 14:09:54 Xyr32qD3
コンパイラが万能だと思っていた時期が私にもありました
816:名前は開発中のものです。
10/08/01 14:11:42 NqTphvUa
>>811
ローカル変数は宣言されたブロック内でしか使えないので、この場合はforブロックの外で変数宣言しないといけない。
あとshotClsn1もenemyClsn1も配列やリストにしないといけないんじゃないかな。
今のままじゃBoundingBoxを1つずつしか保存しておけないし・・・
817:名前は開発中のものです。
10/08/01 14:21:44 53uAWxuq
プログラム覚えるなら普通のベーシックが一番だよね
書くところがブロック状に分かれてたり宣言するところとか複雑すぎる
818:名前は開発中のものです。
10/08/01 14:24:16 XkPXUg4k
自分が気持ちよくなりたいがためにアホがバカを甘やかすから
バカがこうして付け上がる。
819:名前は開発中のものです。
10/08/01 14:50:24 LmMIA1oP
バカはバカなりのことしか為し得ないんだから
そんなのほっといて違うとこいけばいいだけのはなし。
820:名前は開発中のものです。
10/08/01 15:16:51 nNreTycZ
2chっていうといちいち無駄に戦闘モードになるヤツいるよな
821:名前は開発中のものです。
10/08/01 15:54:40 7OTuBTt2
>>818
反省しました。ごめんなさい。
822:名前は開発中のものです。
10/08/01 16:22:52 Mw5+o/TE
回答ありがとうございました。
>>812
効率を目指しているわけではないのですが、他が思いつきませんでした。
泥臭いやり方とは敵ごとにBoundingBoxなしで接近を条件に処理するような
方法でしょうか。
>>813
BoundingBox shotClsn1 = new BoundingBox(
new Vector3(shot1pos[0].X, shot1pos[0].Y, 0),
new Vector3(shot1pos[0].X + 30, shot1pos[0].Y + 30, 0));
BoundingBox shotClsn1 = new BoundingBox(
new Vector3(shot1pos[1].X, shot1pos[1].Y, 0),
new Vector3(shot1pos[1].X + 30, shot1pos[1].Y + 30, 0));
と、過去このようにもやってみたのですが
「shotClsn1はスコープで宣言されています」というように警告が出てしまいました。
>>816の方のおっしゃるように1つしか保存できないという事かもしれません。
(つづく)
823:名前は開発中のものです。
10/08/01 16:29:26 PhpNw+LL
あー、すまん
>>813は>>811のfor文だとこんな結果になるっていうのを書いただけなんだ
824:名前は開発中のものです。
10/08/01 16:32:42 Mw5+o/TE
(続き)
ただ、上で書いたように敵の配列にBoundingBoxを設定したのについて
きちんと働いているようです。
BoundingBox shotClsn1 = new BoundingBox(
new Vector3(shot1pos[0].X, shot1pos[0].Y, 0),
new Vector3(shot1pos[0].X + 30, shot1pos[0].Y + 30, 0));
for (int i = 0; i < enemy1s.Count; i++)
{
BoundingBox enemyClsn1 = new BoundingBox(
new Vector3(enemy1s[i].X, enemy1s[i].Y, 0),
new Vector3(enemy1s[i].X + 30, enemy1s[i].Y + 30, 0));
if (shotClsn1.Intersects(enemyClsn1) == true)
{
enemy1s.Remove(enemy1s[i]);
}
}
とやった場合、ショット[0]があたった敵から消えてくれます。
この場合はenemyClsn1は配列にはなっていないのですがそれぞれの
値が保持されているように見えます。
このenemyClsn1もまた、ひとつひとつ設定しようとすると
「既にスコープで宣言されています」とエラーがでてしまうのですが・・・
まだ理解しきれていないので中途半端な返事になってしまい申し訳ありません。
825:名前は開発中のものです。
10/08/01 16:44:12 Mw5+o/TE
>>823
そういう意味でしたか。たしかにそのように設定しているのと同じですね。
効力が及ばないというのは、>>816の人のとおり、ブロック内でしか
つかえないという意味でいいました。答え忘れていて申し訳ありません。
826:名前は開発中のものです。
10/08/01 17:17:26 PhpNw+LL
BoundingBox[] shotClsn1;
BoundingBox[] enemyClsn1;
for (int i = 0; i < enemy1s.Count; i++)
{
shotClsn1[i] = new BoundingBox(
new Vector3(shot1pos[i].X, shot1pos[i].Y, 0),
new Vector3(shot1pos[i].X + 30, shot1pos[i].Y + 30, 0));
enemyClsn1[i] = new BoundingBox(
new Vector3(enemy1s[i].X, enemy1s[i].Y, 0),
new Vector3(enemy1s[i].X + 30, enemy1s[i].Y + 30, 0));
}
for (int i = 0; i < enemy1s.Count; i++)
{
for(int j = 0; j < enemy1s.Count; j++)
{
if (shotClsn1[j].Intersects(enemyClsn1[i]))
{
enemy1s.Remove(enemy1s[i]);
}
}
}
こんな感じだろうか
2Dの当たり判定にBoundingBox使った事ないから間違ってるかもしれない
827:名前は開発中のものです。
10/08/01 17:22:18 5h5RdW7Z
if (shotClsn1.Intersects(enemyClsn1) == true)
じゃ心配だから
if (((shotClsn1.Intersects(enemyClsn1) == true) == true) == true)
くらいやろうぜ
828:名前は開発中のものです。
10/08/01 17:24:56 XUWKzdSJ
>for (int i = 0; i < enemy1s.Count; i++)
> shotClsn1[i] = new BoundingBox(
>enemyClsn1[i] = new BoundingBox(
なに? この素敵な 変数i w
enemy1s.Countからshot1pos.Countが解るの?
配列初期化時からサイズ指定も無いし
829:名前は開発中のものです。
10/08/01 17:49:44 PhpNw+LL
>>828
間違い指摘してくれるなんてお前優しいのな
配列のサイズ指定してないとか自分自身ドン引きだわw
フォーラムでもこんな風におかしいとこバンバン指摘してくれる奴がいれば使いやすいのに
830:811
10/08/01 18:08:01 Mw5+o/TE
僕が最初の質問のときショットの数は
for (int i = 0; i < 20; i++) にすべきところ間違って
for (int i = 0; i < enemy1s.Count; i++)
としていたのにつられて>>826のかたも書き間違えたかな、と。
831:811
10/08/01 19:57:04 XkPXUg4k
最近、暑いのでオナニーするときにお尻の割れ目や股ぐらに汗をかいて気持ちが悪いのですが
これをXNAで表現したいです。どうしたらよいでしょうか。
832:名前は開発中のものです。
10/08/01 21:19:00 bmJvBBFp
ID:XkPXUg4k キモすぎる
833:811
10/08/02 07:17:28 PQY34HQy
アナルの匂いをXNAで作りたいのですが、どうしたらいいですか?
とくにfor文の使い方が分かりません。
834:名前は開発中のものです。
10/08/02 07:36:24 67fbxq+E
>>824
>この場合はenemyClsn1は配列にはなっていないのですがそれぞれの
>値が保持されているように見えます。
i=1のとき(1ループ目)はenemyClsn1にenemy1s[0]のBoundingBoxが保存されているけど、i=1のとき(2ループ目)はこれは破棄されるよ。
これで問題ないのは同じブロック内でshotClsn1.Intersects(enemyClsn1)を呼び出してるから。
835:811
10/08/02 07:58:35 PQY34HQy
>>834
ありがとうございました。
836:811
10/08/04 06:24:11 CKJePkqj
>>834
回答いただいたのに、お礼遅れました。
なるほど、forループの中で
enemy1s[0](敵位置)とshot1posを比較→enemy1s[0]を破棄→
enemy1s[1](二体目の敵位置)とshot1posを比較→enemy1s[1]を破棄→・・・
とやっていっているということですね。
理解できましたし、言われて見直した事でforループの理解が深まりました。
どうもありがとうございました。
837:811
10/08/04 13:02:01 G3jjVyJA
お礼は次の質問への布石です。
本当は用が済んだ時点で面倒なので御礼なんかしないつもりでした。
でも次の質問ができたのでとりあえず御礼しました。
838:名前は開発中のものです。
10/08/04 13:25:37 NnWhPTgG
クソが!
もう答えねえよ!
839:名前は開発中のものです。
10/08/04 14:11:20 /ftZ7ia5
次の質問を予測するスレになりました