トップページ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/
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 だと
すぐにサチるぞ。
0693名前は開発中のものです。02/10/09 21:14ID:???
サチるってわけのわからないオナニー用語を使うのはヤメレ
0694名前は開発中のものです。02/10/09 21:16ID:???
律速といったほうがいい?
0695名前は開発中のものです。02/10/09 21:51ID:???
このスレはテンプレは無いの?

それぞれの言語の長所・短所・難易度
BGMのそれぞれの記録形式の長所・短所・難易度
作りたいゲームを再現するにはどの言語がいいか

こんなテンプレがあったらいいね。
0696名前は開発中のものです。02/10/09 22:21ID:???
>>695
無いのじゃなくて必要だと思った奴が自分で作れば良いだろ
あったらいいねじゃなくて言いだしっぺのお前が作れ
何でも人任せにするな
069702/10/09 23:27ID:s4kqpcbZ
初心者なので作れません。
0698名前は開発中のものです。02/10/09 23:33ID:4GQZ2WlT
この手の話題はプログラミング板で盛ん。しかも最後は荒れる。
とりあえずJava。
実行速度が遅いんで、アクション・シューティング系は避けた方が良いかも。
ダンジョンマスターJavaは素晴らしかった。
0699名前は開発中のものです。02/10/09 23:37ID:???
>>697
初心者とそれを理由にする怠け者は違う
自分で初心者を名乗る奴は後者
0700名前は開発中のものです。02/10/09 23:48ID:???
>>693
ハードウェア屋さんとか物理屋さんなんかが良く使う用語だな>サチる
saturation (飽和) の略式表現
0701ひきプロ ◆8fhky/PGis 02/10/09 23:55ID:???
>>690
7のDirectDraw使うことにしますた。
3Dはムズイのでまたの機会にします
070202/10/09 23:55ID:???
Java 実行速度が遅く、アクション・シューティング系には向かない。
    (ダンジョンマスターJavaは素晴らしかった)

    公式サイトhttp://www.cs.pitt.edu/~alandale/dmjava/
    ダンジョンマスターをやろう!http://home8.highway.ne.jp/galzo/game/danmasu.htm
0703名前は開発中のものです。02/10/10 00:08ID:???
>>701
確かに DirectDraw なら(ビデオメモリがある限りは)ビデオメモリ上に
サーフェイス作るから、BitBlt は速いやね。フレーム毎に全部書き直し
にしても、そこそこの fps が出せる。
0704名前は開発中のものです。02/10/10 00:10ID:???
パーツを動的に弄らないという前提なら
0705_02/10/10 02:32ID:???
>>702
遅いのはJavaアプレット。
Javaアプリケーションといっしょにするな!ボゲェ!!
0706名前は開発中のものです。02/10/10 07:50ID:???
>>705
今現在Javaでゲーム作ってる漏れが言うのも何だが、
起動とGUIは非常に遅いっす。色々工夫しないと話にならんです。
0707要ブックマーク02/10/10 11:15ID:buBBvKiZ
Computer Programing(日本語)
http://www.realdigital.co.jp/densi2/progindex.html
>C言語・C++言語・WINDOWSプログラム・DirectX Draw・DirectX 3D・ソフトウェアライブラリー
>各言語の説明と、サンプルソース。

YaneuraoGameScript & SDK本体
http://www.sun-inet.or.jp/~yaneurao/links/ygs/

yaneuraoGameScript2000
http://isweb19.infoseek.co.jp/computer/yaneurao/ygs/
>初心者向けC言語によるゲーム制作指南

C言語初心者向けリンク集
http://www3.mahoroba.ne.jp/~seibi/gad_cgi/html/16_02.html

ヒューマンアカデミー
http://www.athuman.com/a/it/course.html
>3ヶ月コースなど

初心者向けゲーム制作講座"Delphi de GAME"TopPage
http://www.din.or.jp/~koudai/Delphi/Delphi.html
0708名前は開発中のものです。02/10/10 12:07ID:???
>701
はぁ?DirectX8にスプライト関数(ラッパークラス)あるだろ?
非常に簡単に半透明使えるし、回転拡大縮小できるし、ポリゴンみたいなこと
できるし、いいんじゃないの?エフェクトはかけられないけど・・・。
DirectDrawより簡単ではるかに便利。2Dならこれを使えや
0709名前は開発中のものです。02/10/10 12:11ID:???
>>701はもうプログラム諦めたに1000マンセー
0710名前は開発中のものです。02/10/10 12:28ID:???
DirectX8以降だとWin95を切り捨てる事になる。
0711名前は開発中のものです。02/10/10 13:02ID:???
>>708はID3DXSpriteまともに使った事無いに10万ペリカ
0712名前は開発中のものです。02/10/10 13:45ID:???
おまえら、相談室で煽りあうのは寄席。
0713名前は開発中のものです。02/10/10 16:22ID:???
煽りあいできるクソスレは他にいくらでもあるだろう
0714名前は開発中のものです。02/10/10 16:37ID:???
(´-`).。oO(くどい)
071570802/10/10 16:41ID:???
DX8のスプライト関数使うとよく叩かれるんだけど
なんか理由あるの?
drawPrimitiveUPと比較しても速度変わんないんだけど?
抜き色指定とかでDDS使わない分、楽でいいだろうに・・・。
071670802/10/10 16:42ID:???
アゲハチョウ
0717ひきプロ ◆8fhky/PGis 02/10/10 16:49ID:???
>>703
ためしに作ってみたら毎フレーム全部描画しても
GDIの時より軽くなりますた。
>>708
そういえばアルファブレンドができなくて悩みました
8のヘルプも読んでみようと思います
0718名前は開発中のものです。02/10/10 17:02ID:???
>>715
ID3DXSpriteを使うと叩かれるのか。謎だな。
それはどこでの話だ。
071970802/10/10 17:43ID:???
>>718
2ch
0720名前は開発中のものです。02/10/10 17:51ID:tjuH/a8v
ID3DXSpriteで、scaleで拡大率変えてたんだけど、
他の環境で動かしたらscaleが有効になってなくてしょぼんだった。
072171802/10/10 17:54ID:???
>>719
スレのリンクを貼るほどの価値もない話題ということか。
それなら気にしねーほうがいいんじゃねーの。
 
どうせ具体的な指摘は何も無かったんだろ?
0722名前は開発中のものです。02/10/10 18:08ID:???
( ´,_ゝ`)プッ
0723名前は開発中のものです。02/10/10 19:04ID:???
708=722?
072471802/10/10 19:15ID:???
>>723
違うだろ。さすがに。
0725名前は開発中のものです。02/10/10 20:45ID:pMa8asNt
ID3DXSpriteだと256*256以上の大きさのテクスチャを扱えないからじゃねーの?
0726名前は開発中のものです。02/10/10 20:50ID:???
そんな制限は無い
0727名前は開発中のものです。02/10/10 22:57ID:???
>>726
あるぞ。

0728名前は開発中のものです。02/10/10 23:53ID:???
>>708
> DirectDrawより簡単ではるかに便利。
DirectDraw は初期化と、ロスト時の再初期化処理だけで意外と面倒。
0729名前は開発中のものです。02/10/11 00:28ID:???
>>727
無い
サイズの制限はハード依存であってID3DXSpriteそのものの制限とは関係ない
0730名前は開発中のものです。02/10/11 00:33ID:???
どのみち相対的な話である。
073173002/10/11 00:46ID:???
730は728へのレス。
0732名前は開発中のものです。02/10/11 02:21ID:???
>725 :名前は開発中のものです。 :02/10/10 20:45 ID:pMa8asNt
>  ID3DXSpriteだと256*256以上の大きさのテクスチャを扱えないからじゃねーの?
>726 :名前は開発中のものです。 :02/10/10 20:50 ID:???
>  そんな制限は無い
>727 :名前は開発中のものです。 :02/10/10 22:57 ID:???
>  >>726
>  あるぞ。
>729 :名前は開発中のものです。 :02/10/11 00:28 ID:???
>  >>727
>  無い
>  サイズの制限はハード依存であってID3DXSpriteそのものの制限とは関係ない
 
このやりとりは不毛だな。まず具体例書いてくれ。
 
 Windows98SE + DirectX8.1(debug runtime)
 GeForce256 (Detonatorドライバ 40.72)
 D3DCAPS8.MaxTextureWidth  = 2048
 D3DCAPS8.MaxTextureHeight = 2048
 
 Windows98SE + DirectX8.1(debug runtime)
 ATI RADEON ALL-IN-WONDER (ドライバ 4.13.01.9039 7.72-020524M-004273C)
 D3DCAPS8.MaxTextureWidth  = 2048
 D3DCAPS8.MaxTextureHeight = 2048
 
上記2つ例ではID3DXSprite固有のテクスチャサイズ制限(256x256)は確認できない。
0733名前は開発中のものです。02/10/11 02:45ID:???
チュートリアルの5だと多少の変更で実行できるので、とりあえずコード書いて動かしてみたが、
Drawだと左上から256×256の部分が表示されるだけだな。
GeForce2MXだからVoodooのような256×256の制限はない。

確かDirectX7の時にはこの制限がなかったと思うが。


0734名前は開発中のものです。02/10/11 03:43ID:???
Geforce3(32MB)で512*512テクスチャを試した。問題なく表示された。
ドライバは40.72 Beta
0735734(補足)02/10/11 03:44ID:???
環境はWin2k+DirectX8.1SDK
■ このスレッドは過去ログ倉庫に格納されています