トップページgamedev
986コメント314KB

ゲームプログラミング相談室

■ このスレッドは過去ログ倉庫に格納されています
0001プチ9627m01/11/06 18:47ID:G6Fk/ND/
ゲームプログラミング全般についての質問スレッド。
駄スレ立てる前にココで聞きましょう。

■旧スレ(プログラミング技術板より)
○パート1
http://piza.2ch.net/tech/kako/969/969984472.html
○パート2
http://pc.2ch.net/test/read.cgi/tech/985540361
○パート3
http://pc.2ch.net/test/read.cgi/tech/1002894129/
0593名前は開発中のものです。02/09/25 22:14ID:???
>>592
同じようにしる!!

その手の作業に関しては、
DelphiでできてCでできないのはわかる(VCL使っているとか)が、
CでできてDelphiでできないというのはよくわからない。
0594名前は開発中のものです。02/09/25 22:16ID:???
とりあえず、Cではどういやってたか言ってくれれば、
こたえられるかもしれんよ。
0595名前は開発中のものです。02/09/25 23:00ID:???
そういえば漏れはDelphiでパケット越しに
テキストバイナリ混成データ送ろうとして
四苦八苦した思い出があるなぁ

けど、もうどうやったのか忘れた(藁
0596名前は開発中のものです。02/09/25 23:38ID:???
Delphiを捨てればいいと思うんだけど、、、ダメ?
0597名前は開発中のものです。02/09/25 23:41ID:???
Delphiパカニスルナ!!
Personalでやったから苦労したんだよ!

ちなみにパケット越しじゃなくて
パケットに詰めて、だな
0598名前は開発中のものです。02/09/25 23:57ID:???
パケットって言っても
シリアライズとデシリアライズのコードを対になるように書けばそれで
終わりっしょ?DelphiもCも関係ないと思うんだが・・・
0599名前は開発中のものです。02/09/26 01:34ID:???
>598
アホですか?
そのシリアライズがうまくいかないって話なんだけど?

てか思い出したけど
サーバC++/クライアントDelphiでやってて
コネクションまで確認できたのに結局データのやりとりはうまくいかなくて
クライアントもC++で組み直したんだった
もちろんDirectPlay使ってたとかいうオチじゃなくてWinSockでやってた
0600名前は開発中のものです。02/09/26 01:36ID:???
>Personalでやったから苦労したんだよ!
非PersonalだとコンパイラやIDEが勝手にプログラマの無知を補間してくれるんですか?
0601名前は開発中のものです。02/09/26 06:31ID:???
Personalに欠けてるコンポーネントが
ゲームアプリ開発に及ぼすってことなのかね。
あまり考えられないよな。
 
 
・・・・DB関連のことなのか。
0602名前は開発中のものです。02/09/26 06:32ID:???
× に及ぼす
○ 影響を及ぼす
0603名前は開発中のものです。02/09/26 06:57ID:???
Indyがフリーで落とせることを知らなかったとか
0604名前は開発中のものです。02/09/26 12:44ID:???
Indyの日本語ヘルプが手に入るインターネットはどこですか?
0605名前は開発中のものです。02/09/26 15:00ID:???
(´-`).。oO(日本語ヘルプがDelphiPro以降に付属することをわかってて聞いているんだろうな)
0606名前は開発中のものです。02/09/26 15:20ID:???
IndyよりもActionManagerがほしい
0607名前は開発中のものです。02/09/26 22:13ID:???
>>599
> そのシリアライズがうまくいかないって話なんだけど?

自分がアホであることを晒してどうするよ?
0608名前は開発中のものです。02/09/26 22:33ID:???
599にはデータを扱うプログラムは早すぎるってことで。
ソケットもファイルも書き込んだ/送出したデータをありのままの姿で返すだけだし、
をれが言語によって変わることも*ありえない*と言うことが理解できてないようだから。
化けたとしたらそれは書き込んだデータと書き込んだつもりのデータが違うだけ
0609名前は開発中のものです。02/09/26 22:40ID:???
ファイルに対してシリアライズして内容をチェックするのが先だあな
素人は何でも一度にやりたがるからダメだ
0610名前は開発中のものです。02/09/27 08:45ID:???
駄スレ防止age
0611名前は開発中のものです。02/09/27 11:30ID:u5LECmtB
C++でシューティングを作ろうと思っています。
敵キャラの抽象クラスを作って、キャラごとに派生クラスをつくりました。

そこで、出てくる敵キャラすべてを格納しておくキューを作りたいのですが、
Javaみたいな、すべてのクラスを格納できるキューが作れなくて困っています。

何か案はありませんか?
0612名前は開発中のものです。02/09/27 12:38ID:???
>>611
その抽象クラスのポインタを、コンテナに入れれば?
0613 02/09/27 15:01ID:uiQG1iKW
Indyって何?(w
0614名前は開発中のものです。02/09/27 15:39ID:???
>>611
… C++ の基本から勉強し直した方が良いような。

struct Base {
  virtual ~Base() {}
  ...
};

class Deriv : public Base {...};

using boost::shared_ptr;
using std::queue;

queue<shared_ptr<Base> > q;
q.push(shared_ptr<Base>(new Deriv);
0615名前は開発中のものです。02/09/27 18:07ID:???
>>613
Internet Direct。
主要なインターネットプロトコルに対応したオープンソース形式のライブラリ。
BSDライセンスとMPLのデュアルライセンスで都合のよい方を選ぶことができる。
Delphi, C++Builder, Kylix用。

http://www.nevrona.com/Indy/
# なぜか今つながらない。
0616名前は開発中のものです。02/09/27 21:17ID:???
>>614
C++をあまり知らないヤシに説明するのに
当然のごとくboostを使ってるお前がウザイと思うのは俺だけか
0617名前は開発中のものです。02/09/27 22:33ID:???
>>616
きみだけ。
0618名前は開発中のものです。02/09/28 03:01ID:???
>>616
boost なんて、もう標準も同然じゃん。
0619名前は開発中のものです。02/09/28 03:02ID:???
>>616
ていうか、boost 無しでは生きていけません。
0620名前は開発中のものです。02/09/28 03:07ID:???
boostが標準ってお前らの中だけでの話だろ。
入門書ではまずboostを扱わないし、
ウチの会社も導入を許可してくれない。

初心者に説明するときは、極力非標準は排除して話すべきだと思うんだが。
0621名前は開発中のものです。02/09/28 03:13ID:???
boostなしで生きていけないなんて軟弱ぅ
0622名前は開発中のものです。02/09/28 04:27ID:???
>>620
かと言って、生ポインタでもかわいそうな気が……
062362202/09/28 04:29ID:???
既に話題がスレ違いな気がしてきたのね。
0624名前は開発中のものです。02/09/28 04:31ID:???
まぁ、なんつーか今はLokiすらも標準同然とか言い出す
頭に何か沸いてる人間も出ているわけで、
boostくらい見逃すのがいいのかもしれないな
0625名前は開発中のものです。02/09/28 09:03ID:???
概念の理解なしにboost等を使うのはまずいっしょ
0626名前は開発中のものです。02/09/28 16:00ID:???
>>611がこの機にboost::shared_ptrを調べる程度の心がけがあれば
問題ない。
0627名前は開発中のものです。02/09/28 18:02ID:???
>>620
> ウチの会社も導入を許可してくれない。
lambda あたりはともかくとして、shared_ptr さえ使えないような会社なら
転職を考えた方が…。
0628名前は開発中のものです。02/09/28 18:13ID:???
そんなことぐらいで転職するもんなのか・・
0629名前は開発中のものです。02/09/28 19:40ID:???
java あがりの初心者には、ポインタを忘れさせてやれ。
0630名前は開発中のものです。02/09/28 20:19ID:???
>>627
導入したければ、自分のプライベートを裂いてコード検証をして、
各クラス毎の関連と、使用可不可のチェックリストを作らないと許可が下りない。
大体、まともなところならshared_ptrに変わる物はすでに作られてる筈だから
対して問題にならないと思うが。
0631名前は開発中のものです。02/09/28 20:30ID:ThgTmq4W
オブジェクトの座標って、みんなどんな型を使ってる?

俺は不安なのでfloatとか使ってるんだけど、実はintでもいい?
0632名前は開発中のものです。02/09/28 20:33ID:???
ポインタって何の役にたつの?
0633名前は開発中のものです。02/09/28 20:52ID:???
>>631
なんかIDがカコイイから特別に教えてやる。

表現したい座標の性質により変える。
0634名前は開発中のものです。02/09/28 21:01ID:???
>>630
仕事に使う道具を検証するのに「プライベート」な時間を要求するのか。
終わっとるな。
0635名前は開発中のものです。02/09/28 21:02ID:???
>>631
意味不明。
「不安」、「いい?」とは具体的に何。

>>632
必要なければそれでいい。
気にすることはない。
0636名前は開発中のものです。02/09/28 21:04ID:???
すでに方法があって、それでうまくいってるなら
検証する時間を与えられるかどうか微妙だなあ。

検証する時間をクレとリーダーに交渉する時間は
仕事中であってもいいと思うが、そこでダメといわれたら
プライベートでやるしかないな
063763102/09/28 21:08ID:???
>>635
スクリーンの左上を(0, 0)、右下を(800, 600)などとして
オブジェクトを配置していくわけです。

移動してくオブジェクトの座標には、今までfloat型を使って表現
していたのですが、これって意味のないことですか?
0638名前は開発中のものです。02/09/28 21:16ID:???
ぽいんた出来ないと仕事になりません
0639名前は開発中のものです。02/09/28 21:19ID:???
>>637
スクリーンに表示だけならint型だけでもいいんでないの。
ただし、その値を計算する時に、float型程度の精度が無いと
計算出来ないんじゃない?
計算様の別型の値を持って、それで計算、intにキャストして表示って馬鹿らしい。
だから、漏れは初めからfloat型でいっていますが。
0640名前は開発中のものです。02/09/28 21:25ID:???
>>637
オブジェクトが小数点以下の数値をとる可能性があるなら無駄じゃないよ。
0641名前は開発中のものです。02/09/28 21:35ID:???
>>637
アプリの内部変数の型の話をしてるなら
意味がないかどうかはアプリによるだろう。ちゃんと設計しる。

一方、一般的な3DAPIに渡される座標値の型指定がfloat値であることの
意味を問うているなら、それはちゃんと意味があるという答えになる。
試しに320x240程度の画面モードにすれば肉眼で確認できるだろう。
064264102/09/28 21:40ID:???
3Dなら
「ゲームの中のシーン座標」と「スクリーン座標」はそれぞれ別物として
定義するのが普通だぞ。2Dの場合は、依存関係を持たせないと苦しいケースも
ある。
0643初心者02/09/29 00:07ID:???
初めてパソゲーで曲を作るんですが、、
どうやったらいいんでしょうか?
実際にギターなどでは作ったことがあるんですが、、、
シンセサイザーに挑戦します。
友達とチームを組んで活動します。
シンセサイザーのことはまるで分からないので、アドバイスください。


0644名前は開発中のものです。02/09/29 00:19ID:???
>>643
MIDIデータを作ることから始めてみてはどうか
まったく知らなければDTM板でも覗いてみるとか
0645名前は開発中のものです。02/09/29 15:07ID:RRwSPMiU
>>631
8ビットCPUのフルアセンブラでしか経験ないけど、16bit整数+8bit小数の24bit
で、管理してました。
0.5ドットの移動とかやりますし。

0646名前は開発中のものです。02/09/29 19:19ID:???
音楽ツクールかってみたら?
0647名前は開発中のものです。02/09/30 01:38ID:???
3D使わないなら、精度の変化が無い固定小数で扱う。
0648名前は開発中のものです。02/10/01 20:56ID:???
今、固定小数点を C++ で実装するなら、テンプレートかね?
0649名前は開発中のものです。02/10/02 12:32ID:???
ぶっちゃけ、RagnarokOnline の武器攻撃計算Javaスクリプトを作ってるのですが、Web制作版で聞くことでもないし、ゲームタイトル非依存の一般的な問題とおもうのでここで聞くことにしました。

あのゲームの場合、装備品にカードが刺せて、装備品やカードによっていろいろとパラメーターが変わります。あるカードを刺せば攻撃力 += 10; とか、あるカードをさすと敵の属性によって追加ダメージ15%等‥‥

で、私の頭ではいちいち、いちいち武器やカードの効果を攻撃力計算関数内に全部書き込む方法しかおもいつきません。
こんなの↓

func 攻撃力()
{
  全装備品のカードスロットを走査、カード枚数[カードID] の配列を作成

  基本能力値読み込み

  if (カード枚数[100] > 0) { .. }.  // 修正能力値の計算
  if (カード枚数[200] > 0) { ... }

  修正能力値による基本攻撃力の計算

  if (カード枚数[150] > 0) { .. }.
  if (カード枚数[250] > 0) { ... }

  ほげほげほげほげ

  if (カード枚数[50] > 0) { ... }

  以下繰り返し

  return 最終攻撃力
}

でも、この方法は私としてはすごい汚いとおもうんですね。ミスを誘いやすいし、メンテもしにくい‥‥
というわけで、こういうのを効率よく処理する方法について教えてください。
0650名前は開発中のものです。02/10/02 13:27ID:???
>649
オブジェクト「思考」せよ
なんのためにJava使ってるんだ(藁
0651名前は開発中のものです。02/10/02 13:33ID:???
とりあえず>>650に具体的に説明してみて欲しい。
他の者は解法を書くのをしばし待て。
065264902/10/02 13:56ID:???
>650
一応、考えてみたんですが、

function Card(〜〜〜, effect)  {
  ...
  this.effect = (effect == null || effect == undefined) ? null : function () {};
  return this;
}

function Equipe(〜〜〜, numcards, effect)  {
  ...
  this.Cards = (numcards == 0 || numcards == null || numcards == undefined) ? null : new Array (numcards);
  this.effect = (effect == null || effect == undefined) ? null : function () {};
  return this
}

function ComputeAttack()  {
  基本能力値読み込み

  for (e = 0; e < EquipSlot.length; e++) {
    E = EquipeSlot[e];
    E.effect();
    if (E.Cards == null) continue;
    for (c = 0; c < E.Cards.length; c++) {
      E.Cards[c].effect();
    }
  }
  
  繰り返し
}

というのを考えては見たのですが、(続く)
065364902/10/02 14:02ID:???
(652から続き)

あ、上のコードで effect っていうのは、カード効果とか装備品の効果です。

で、上のように考えては見たんですが、

ものによって
  a += 5; --- @
とか、
  a = 0; --- A
とかあるんですね。

詳しく実装が解明されているわけではないのですが、Aの効果があったら@の効果はキャンセルされるし
@A@@とか、配列にきてたらどうしよう?とか非常に困ってしまったのです。
0654名前は開発中のものです。02/10/02 14:05ID:???
C++でごめん

class 武器 {
public:
 int 攻撃力();
 ステータス構造体 ステータス修正();
private:
 int 基本攻撃力;
 ステータス構造体 ステータス修正値;
 カード; //複数枚装着できるなら配列化
};

int 武器::攻撃力() {
 return 基本攻撃力 + カード->攻撃力修正();
}

ステータス構造体 武器::ステータス修正() {
 return (*this)->ステータス修正値 + カード->ステータス修正値;
}

入りきらないので次↓
0655名前は開発中のものです。02/10/02 14:05ID:???
class カード {
public:
 int 攻撃力修正();
 ステータス構造体 ステータス修正();
private:
 int 攻撃力修正値;
 ステータス構造体 ステータス修正値;
};

あとは必要な武器とカードをデータベースからインスタンス化するだけだと思われ
カードを複数枚装着できるなら、各計算関数内で繰り返してやるだけ
ステータス構造体は、ゲームに出てくるステータスを静的メンバに持つクラスで実装して
+演算子や+=演算子を定義してやる
てか、攻撃力もステータス構造体に含めて問題なさそうだな

「全ての効果打ち消し」とかは配列をソートすれば良いだけでは?
0656名前は開発中のものです。02/10/05 04:23ID:???
計ったら倍くらい遅かったのに、STL や boost を使いまくってる漏れは、イッテヨシ でつか?
エラー処理は例外に頼ってるのに、例外安全なんか知らんわボケっていうのも、イッテヨシ でつか?
もまいら、どうしてますか?
0657名前は開発中のものです。02/10/05 10:19ID:???
>>656
> もまいら、どうしてますか?
case by case

っつかクリティカルな部分以外は速度なんか気にしないし、クリティカルな部分も
メモリアロケータに手を入れれば幸せになったりする。
0658名前は開発中のものです。02/10/07 17:51ID:???
ガチャポン戦士を作ろうと思うんだけど
スレ立ててもかまわないですかね?
ちなみにプログラミング経験は無しです・・・
言語はHSPかDelphiのどっちかで勉強しながらやろうと思います。
065965802/10/07 18:00ID:???
age
0660名前は開発中のものです。02/10/07 19:06ID:???
>>658
作ってから立てた方が叩かれないかと。
0661名前は開発中のものです。02/10/07 19:37ID:???
>>685
まずはHSPかDelphiのスレで質問しながら作り、
最低限のモノを作ってからスレ立てれば、
叩かれる可能性はかなり減るかと。
0662名前は開発中のものです。02/10/07 22:53ID:???
>658
この板は「カタチの無い企画スレ」は徹底して終了厨に荒らされる傾向があるので
まず一通りカタチにしてからスレ建てた方が良いでしょう
0663名前は開発中のものです。02/10/07 23:02ID:???
(´-`)。oO(荒らしの自己基準にあわせなきゃならんのか・・・・・・)
0664名前は開発中のものです。02/10/07 23:03ID:WME4JpPc
荒らしと一般の人の価値観が一致している部分だと思うよ。 <形のない企画スレ禁止
0665名前は開発中のものです。02/10/07 23:03ID:???
あ、ごめん、ageちゃった。
0666名前は開発中のものです。02/10/07 23:09ID:???
この板じゃ「勉強しながらやろうと思います」で完成したためしがないからな。
出来る香具師ですら完成しねーんだからよ。
066765802/10/07 23:12ID:???
>>660-665
そうですね。
とりあえず形になるものを作ってみます。
0668名前は開発中のものです。02/10/07 23:16ID:???
>>664
「形のない企画スレ」には3Dレースゲースレも含まれるのかい?
0669名前は開発中のものです。02/10/07 23:19ID:???
あれは【スレ独立で失敗】の典型例として
この板の歴史に名を刻んでしまったね。
0670名前は開発中のものです。02/10/07 23:23ID:???
形があることは単に成功の必要条件に過ぎない
(成功の十分条件ではない)ということを、あのスレは教えてくれた。
0671名前は開発中のものです。02/10/07 23:31ID:???
3Dレースゲースレ最大の敗因は作者サイドが煽りに過剰反応したとこだな
作者が名前伏せて反論してたから削除人も相手にしてくれなかった
0672名前は開発中のものです。02/10/07 23:32ID:???
ここは雑談スレじゃないからそろそろやめなされ
067366902/10/07 23:38ID:???
悪かった。雑談スレに移動するよ。
0674名前は開発中のものです。02/10/08 00:11ID:tUlUNf/S
RPGの本体とシナリオデータってどうゆう風に分離させるんですか?
どっかで「スクリプト」を使え見たいな話きいたけど。
例えば、
じいさんに話す。(シナリオ始まり)
洞窟でなにする。
じいさんに話す。(シナリオ終了)
こんな感じの場合。
0675名前は開発中のものです。02/10/08 00:25ID:???
>>674
RPGツクールを一度触ってみ。
あんな感じで分離させればOK.
0676名前は開発中のものです。02/10/08 00:31ID:???
>>675
禿同。
RPGツクールは作られるモノはクソだがツール自体は優れている。
0677ひきプロ ◆8fhky/PGis 02/10/08 00:47ID:???
今擬似3Dのフィールドを歩くゲーム作ってるんですが
(タクティクスオーガみたいな)
あらかじめフィールドだけを最初に1回作っておいて、
キャラクタのみをメイン画面に転送すると、フィールドと
キャラクタとの前後関係がおかしくなってしまいます。
かと言って全部を毎フレーム描画していると遅くて困っています
(GDIのBitbltで処理しています)
DirectX使ったら改善できるでしょうか。
またDirectX使わない場合はどうしたらよいでしょうか
0678名前は開発中のものです。02/10/08 00:51ID:???
うーん、ツクール買うのはつらい。
どんな感じ?
鍛冶屋のおやじとか、通常のNPCを絡ませるのとか難しそうなんだけど。
そのまま台詞も本体に突っ込んでしまうのはやっぱり無理かな。
0679ひきプロ ◆8fhky/PGis 02/10/08 00:55ID:???
NPCの属性決めて、(店か人か)
店の場合は汎用的な店の親父のメッセージ表示、
人だったらメッセージ文字列へのポインタ持っておいて
そのポインタ参照したらメッセージ出てくる感じにしたらどうでしょ
0680名前は開発中のものです。02/10/08 00:56ID:???
>>677
その種のヘヴィな処理にGDIを使うのは狂気の沙汰です。

描画順序については「フィールド」「キャラ」といった
モジュール化的な分割を諦めて画面生成のみをモジュール化する形をとります。

えぇえぇ、ゲームのコードなんてスパゲティ作ってナンボですから。
0681名前は開発中のものです。02/10/08 00:58ID:???
他にも解決策はあるけどね。
ZバッファやZソートを使った陰面処理を行うとか
始めからDirect3Dで描画しそのへんの処理をハードウェアに任せる方法とか。
遅くなるけどね。
0682ひきプロ ◆8fhky/PGis 02/10/08 01:00ID:???
>>680
ご返事ありがとうございます。

やっぱGDIでは無理でしょうか…。
一応モジュール化的な事をしているんですが果たして
使いやすくなってるのかどうか藁
今んとこスパゲッティになりまくりです
0683ひきプロ ◆8fhky/PGis 02/10/08 01:02ID:???
>>681
3D空間にポリゴン一枚出す処理すらよく分かりません(;´Д`)
0684ひきプロ ◆8fhky/PGis 02/10/08 01:05ID:???
あ、読み間違えてた…
諦めて ですね藁
0685名前は開発中のものです。02/10/08 01:06ID:???
>>683
死ね
0686名前は開発中のものです。02/10/08 01:15ID:???
>>678
RPGツクールは体験版があるので、どんなものか見てみるだけなら
それで充分だと思うよ。
体験版のあるURLは、適当に検索してちょ。
0687名前は開発中のものです。02/10/08 01:15ID:???
>>679
とりあえずその考えでやってみる。
0688名前は開発中のものです。02/10/08 01:16ID:???
お、体験版もあるのか。さがしてくるよ。
0689名前は開発中のものです。02/10/08 03:06ID:???
体験版ならエンターブレインのHPにないか?
もしみつからないようならMXかなんかで拾って
参考にしたら破棄しちまいな。
0690名前は開発中のものです。02/10/08 21:06ID:???
>>677
素直に DirectX 使って 3D で描画しろ。CPU <-> バス <-> グラフィックカード
間を流れるデータの量、桁が違ってくる。
0691名前は開発中のものです。02/10/08 22:12ID:???
>>690
流れるデータ量の桁って変な知ったかするのヤメレ

この場合問題はバスに流れるデータ量ではなく
Zバッファがハード的に使えるか
CPU側で自前計算しなければならないかの差
0692名前は開発中のものです。02/10/09 21:07ID:???
>>691
前後関係無視して単純に全画面 BitBlt するだけでも、GDI だと
すぐにサチるぞ。
■ このスレッドは過去ログ倉庫に格納されています