1人でゲームが作れるように修行します。2 (487レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
1
(6): 名前は開発中のものです。 [] 2010/05/04(火) 00:44:29 ID:HN0quC1A(1) AAS
がんばりましょう。

前スレ
1人でゲームが作れるように修行します。
2chスレ:gamedev
7
(4): SGGK ◆6pZCoAtaxk [sage] 2010/05/06(木) 00:35:45 ID:3I0cpMiE(1) AAS
>>6
お互い頑張りましょ〜!
自分は進捗止まりそうですが、細々とでもやっていくつもりです。

前スレで書いてた小目標、「選手の守備範囲にボールが入ったときにだけ選手がボールを追うようにする」は
ちょっと止めておいて、この前実装した、「前半から結果表示までの流れ」を遷移図のような感じで表現できないかを
試してみる予定。大雑把な遷移図は以前書いてアップした事があったけど、その後の実装は全く別な感じになったので
一度見直してみて、今後の作業の参考になればと思ったから。
21
(3): 名前は開発中のものです。 [] 2010/05/09(日) 23:11:16 ID:aiTWM3+o(1) AAS
皆さんは今のプログラミングレベルに到達するまでどれくらいの時間かかりましたか?
35
(3): 名前は開発中のものです。 [sage] 2010/05/14(金) 23:53:56 ID:aIk67VKF(1) AAS
C言語習いたての俺がSRPG制作に挑戦してみる。

・・・って企画たててよかったのか?
50
(3): SGGK ◆6pZCoAtaxk [sage] 2010/07/22(木) 00:32:00 ID:umEPonN6(1) AAS
>>49
こんばんは!。見ている人がいるからには、諦めずにもう少し頑張ってみようと思います。
自分もいつかは3Dをやりたいと思っているので、Blenderの事は記憶に留めておきます。

>48のバグは、最初「error C2146: 構文エラー : ';' が、識別子 の前に必要です。」で検索したところ、
その中で、「変数宣言の位置によってエラーになったりならなかったり ...」という言葉が目に付き、
ソースを見たところ、ヘッダファイルの左端の縦棒が太く表示されていて何かここに問題のあるしるしなのかと思い、
考えてみると、今回、選手の移動関数の引数として読み込ませたいと思っている変数は、

enum MATCHSTATE{
FIRST_HALF=1,HALF_TIME,SECOND_HALF,RESULT_DISPLAY
};

で、これはsoccergame.hで宣言されてて、しかし、選手の移動関数は
fieldplayercontrol.hで宣言されているので、ならば、fieldplayercontrol.hの上の行に
#include "soccergame.h"をいれてやればいいのではと思ってそうした。
しかし、先ほどのMATCHSTATEはクラスなどの外側に記述してあるので、コンパイルしたら、
soccergame.hと#include "soccergame.h"したfieldplayercontrol.hとで重複してしまうのではと思い、
#include "soccergame.h"を消したら、コンパイルできた!…という話。
51
(3): SGGK ◆6pZCoAtaxk [sage] 2010/07/22(木) 22:16:41 ID:lTzR4XWC(1) AAS
>>47(前スレ>967)の目標完了。珍しく予想以上に早く出来た。
ソースはifとswitchの組み合わせなので長文になってしまっているのが相変わらずの難点。

次の目標は、出来れば走ったり、ジャンプをさせたりとかいろいろ思いつくけど、

選手それぞれの近くにライフゲージを表示させて、ライフが少しずつ減り、0になったら
選手が停止する

に挑戦。
65
(4): SGGK ◆6pZCoAtaxk [sage] 2010/08/03(火) 22:32:31 ID:nPEW7e3n(1) AAS
>>51の課題が終了。
ライフ値は、各選手が移動関数を実行した直後に少しずつ減らすようにしておき、
「 現時点のライフ値/最大ライフ値xライフゲージ最大長さ 」を計算して長方形をその長さで描画する。
減り具合は完全ではないけど、今は調整する予定なし。

次の目標

●共通(ゴールキーパー以外)
(実装済)歩く Z+マウス操作
   1 走る X+マウス操作
   2 進行方向固定 Shiftキー
   3 特殊技術(ボールが頭上ならヘディング、足元ならダイビングヘッド) Spaceバー
●ボールキープ時
   4 ジャンプ(タックル避けにもなる) C
   5 ロングパス 左クリック
   6 ショートパス 右クリック
   7 シュート 左右同時クリック
   8 パス/シュートは,押す長さで強さを調整
●非ボールキープ時
   9 タックル 左クリック
  10 カット 右クリック

これらの内6個でも実装できれば上出来と考えて挑戦する予定。
期限を決めてやるのは無理そうな感じ…orz
87
(3): SGGK ◆6pZCoAtaxk [sage] 2010/09/17(金) 00:11:53 ID:iwt7bbkw(1) AAS
ベクトルの構造体を宣言・定義したから、ボールや選手などのオブジェクトの
座標その他のメンバ変数を初期化するときには、例えば初期化関数の内部で
オブジェクト.x=848;
オブジェクト.y=544;
オブジェクト.z=0;
としていたのを
オブジェクト.構造体変数名 = {848、544、0};
にできるのではと期待して書いてみるとエラーになる。
略)\source\ballcontrol.cpp(45) : error C2059: 構文エラー : '{'
略)\source\ballcontrol.cpp(45) : error C2143: 構文エラー : ';' が '{' の前にありません。
略)\source\ballcontrol.cpp(45) : error C2143: 構文エラー : ';' が '}' の前にありません。

これと同じようなエラーをクラスのオブジェクトでやった経験を思い出し、
オブジェクト.構造体変数名.x=848;
オブジェクト.構造体変数名.y=544;
オブジェクト.構造体変数名.z=0;
と書いたらエラーは出なくなった。
これだけならまだしも関数の引数にも構造体を使おうとしているので、
これもエラーになったらどうしようかと思いつつ、動作している事を優先して作業を進め、 現在のバグは274個。
ネットで調べると自分では構造体を書いたつもりでいても、Cの構造体とC++の構造体には違いがあるらしくて、
自分が見たサイトの説明によれば、

実は、構造体はメンバがデフォルトで公開されているクラスである。
つまり、
"stuct X{" = "class X{ public :"
となる。クラスと構造体の差異はそれだけである。

との事。
Cで書いたベクトルの記事を本で見て、それを今まで書いてたC++のソースに
使おうとしたから、自分の気付かない理由で上手くいってない感じ。
まずは今のままで進めてみて関数にベクトル構造体を引数にしたところでも
問題が出るようなら、また考え直すつもり。
102
(3): SGGK ◆6pZCoAtaxk [sage] 2010/09/25(土) 00:13:42 ID:Q7QeFJjp(1) AAS
パース、その他いろいろなキーワードで検索したが見つからず。
いますぐどこかの3Dライブラリを理解できるレベルではないのでかなり困った状況。
大体イラスト関係のホームページがよくヒットして消失点という言葉が出てきて、
これを考えればフィールドの形を遠近法的な台形形状に書くことは出来るだろうけど、
例えばその台形のフィールドに奥行きと高さ方向にメッシュを入れる時、何を基準にすればよいのかを詳しく説明してるところを見つけられず、
結局参考にならなかった。奥行きのメッシュは遠くになるにつれて間隔が狭くなると思うけど、それを決定する基準がわからないという意味。
そしてしばらくまた探していると、とあるホームページで人間の目は並行ではなく放射状にものを見ているとの記述があり、
これが参考になりそうなので、方法を考えているところ。
116
(8): 名前は開発中のものです。 [sage] 2010/10/10(日) 07:27:55 ID:iMXoTcjW(1) AAS
一般的な方法としては、
・E=視点座標、つまりカメラの位置をあらわす位置ベクトル
・L=投影面における視点からマウスカーソルまでの半直線ベクトル
から、仮想空間内の任意の物体との交差判定、交差位置特定がきる。

Eは、普通、プログラム上で管理されている。

Lは、FOV(視野錘台)を自分で管理されているなら容易に計算できるが、
投影変換行列の逆行列を使っても計算できると思う(そういう便利な関数があるかもしれない)。
L = Mproj.inv x (mouseX,mouseY,1)T
  Mprij.inv = 投影変換行列の逆行列
 (mouseX,mouseY,1) = マウスの座標(正規化装置座標系、同次座標表現)

特に、フィールドのような単一平面との交点計算は、
・O=原点(フィールド面上にあること)
・N=フィールドの法線ベクトル(正規化ベクトル)
に対して、Eがフィールドの表面にあると限定した場合、
LとNの内積が0以上の場合、交差しない(マウスカーソルは天空を指している)

さもなければ、
・h= フィールド面からEまでの高さ((E-O)とNの内積)
から、
・t= -h/(LとNの内積)
を求めれば、目的とするフィールド上の点Fは、
・F= E+L*t
のような手順で計算できるはず。

あとは、(F-O)をフィールドの座標軸(X-O)(Y-O)で分解すれば、2次元座標に戻せる。

うろ覚えで書いているので細かい間違いがあるかも知れないが(違ってたら乞指摘)、
ゆっくりでいいんで、参考にしてもらえれば嬉しい。
頑張れ! 
119
(5): 名前は開発中のものです。 [sage] 2010/10/31(日) 14:36:58 ID:Ha18eay7(1) AAS
ConvScreenPosToWorldPosのサンプル内でMV1CollCheck_Lineを使って
ポリゴン上のマウス座標を出してるっぽいのがあるよ
155
(3): SGGK ◆6pZCoAtaxk [sage] 2011/02/27(日) 22:11:45.89 ID:wy4sbNmV(3/3) AAS
ソースを修正していて思ったが、C++で書いたプログラムは保守性が良くて再利用性にも優れてるような事を
どこかで聞いた記憶があるけど、そうなっている感じがしない。
たぶん自分の書き方に問題があるので、この機会に少しでも変えてみようと思った。

1.クラスのメンバ変数をpublicにして直接読み書きしていた。(変数毎に関数を書くのが大変だし、いちいち関数を使っていたら、その分処理速度が遅くなるのではと思った。)
  これを次のようにする。
  privateのメンバ変数にして変数毎にget関数、set関数を作ってこの関数を経由してアクセスする方法にする。
  そうすれば、例えば、座標系をx,y,zで管理していたのをVECTOR構造体に変更した場合でも
  get関数、set関数の修正で済む場合もあるので、修正に有利だし、
  get関数、set関数が書かれている場所を見れば、クラスのつながりも見えやすくなりそう。

2.get関数、set関数のような変数の取得、設定しかしない関数は行数が短いので、
  定義をヘッダファイルに書いていたが、定義はすべてcppファイルにまとめて見やすくする。
  それが出来ない例外もあった記憶があるけど、その場合は仕方ないのでヘッダファイルに書く。

3.変数の命名規則を考え、それに従った変数名を付ける。
  但し、最低限の規則にしておき、不完全でもあまり気にしないようにする。
  プログラムの修正が今より少しでもやりやすくなればいいのだから。
  今考えてるのは、メンバ変数は単語の区切りだけ大文字にして書く。
  メンバ関数も同じだけど、最初の文字だけは小文字にする。
  そして、メンバ変数の先頭には、m_ を付ける。
  メンバ変数で静的変数なら、ms_ を付ける。
  メンバ変数でポインタなら、mp_ を付ける。

これでやってみる。
179
(15): 名前は開発中のものです。 [sage] 2011/03/29(火) 00:57:27.76 ID:W5EaQ6/R(1/2) AAS
久々にまたがんばろうかな っと思ったけど
この板すんげぇ過疎ってんのね・・・
このスレにちょいとお邪魔してもいいかな

とりあえず2DでSLGぽいのを目指して。
233
(3): SGGK ◆6pZCoAtaxk [sage] 2011/05/08(日) 22:55:14.85 ID:MKRAe4w3(1) AAS
今日もあまり進まず。
当たり判定クラスの中に作った矩形当たり判定用メンバ関数は最初は、
bool CollisionCheck::isHit(FieldPlayer *, BallData *);//選手とボールの当たり判定
のようなものを考えていたけど、
bool CollisionCheck::isHit(VECTOR,int,int,VECTOR,int,int);//引数:オブジェクト座標、当たり矩形縦、横、オブジェクト座標、当たり矩形縦、横
に変更してみた。1番目の方は選手とボールにしか使えないけど、2番目のようにすれば汎用性が高いのではと考えたのが理由。

ボールをけるボタンを押したときに選手とボールのあたりが真なら、ボールが一定の速度で移動するようにするつもり。
そのときに何回ループしたらボール停止というのではなく、ボールの速度が少しずつ0に近づき、0になったら停止するようにしたいけど、
物理を忘れてしまってるし、当時の記憶がよみがえったとしても問題は解けなかったと思うので、
紙に点と矢印を書いて、どうするか考えてるところ。
252
(7): 名前は開発中のものです。 [sage] 2011/06/07(火) 00:00:23.92 ID:OJpa3qNa(1) AAS
一気にゲームを完成させるのが難しいなら、要素ごとにマイルストーンを設定するのがいいですよ。

3D見下ろし型サッカーゲームだったら、
1.グラウンドとゴールを描画する。カメラを動かしたいのならその動かし方も決めて調整しておく。
2.ボールを配置し、試験的にマウスでクリックすると蹴ったように動くようにする(物理運動シミュレーション)。
3.ラインを割った状態(スローイン、コーナーキック、ゴールキック、得点)を判定し、復帰処理をつくる。
4.選手をまず1人表示し、動かせるようにする。
5.選手とボールの接触判定をし、マウスクリックの代わりに選手が蹴るようにする。
6.CPU選手をまずは1人登場させ、動くようにする。
7.ポジション別にCPU選手のAIを調整する。
8.タイム、スコア、勝敗、タイトル画面などの装飾要素を実装する。
の順番がおすすめです。
260
(4): 名前は開発中のものです。 [sage] 2011/06/17(金) 23:39:19.78 ID:qmzwBamB(1) AAS
イラストだけフリー素材を使うのはスレチかな?
297
(3): 179 ◆SLG//siTD6 [sage] 2011/07/08(金) 00:03:46.32 ID:eIT69sd4(1) AAS
1、原点(0,0,0)でカメラの向き(角度X,角度Y,0)の回転行列を作る
2、1のマトリックスから カメラから原点までの距離(0,0, - 距離)をトランスフォーム
3、マウスでのミドルボタン平行移動は(移動量X ,移動量 Y , 移動量Z(0))で1のマトリックスからトランスフォーム
4、2と3を足す
5、カメラに各要素をセット(4のposition、角度X,角度Y,0)

3、の 移動量Zの部分はメタセコアではズーム代わりになってると思う。
多分メタセコアのはこんな感じだと思(・x・`)
色々違ってたらゴメンナサイ、と・・・。
310
(3): 名前は開発中のものです。 [sage] 2011/09/12(月) 22:39:19.48 ID:Im+6OdM9(1/2) AAS
失礼ながら、無駄に複雑にしすぎてるような気がするね。
基本的にボールの状態変数は、(x,y,z)、(vx,vy,vz)だけあればいい。
それと便宜的に(接地 or浮いている)フラグをつけてもいい。

初期値はそれぞれ、ボールの初期位置、速度は0、フラグは'接地'状態。

ボールのループごとの処理はこんな感じ。

  if(浮いている){
   垂直方向の重力加速度を速度に加算
   速度を位置に加算
   if(速度が下向きで垂直座標が地面より下){
     位置を地表に補正
     垂直方向の速度に -0.9とか反発係数を配慮した値を掛ける
     垂直速度が小さくなったら、'接地'状態とする
   }
  }else{
   水平方向の速度に0.99など転がり摩擦係数を意識した値を掛ける
  }
  水平方向の速度を水平位置に加算

蹴った瞬間、(vx,vy,vz)に初速度を与え、'浮いている'状態にするだけ。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.030s