トップページgamedev
981コメント424KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。04/03/06 01:25ID:d2e/eEyg
ゲームプログラミング全般の質問スレッド。
扱う話題のダイナミックレンジはやや広め。包容力高め。
他の初心者質問スレとの棲み分けを探りつつ
これからもマターリと活用しておくれ。
 
■過去スレ
【Part2】http://pc.2ch.net/tech/kako/985/985540361.html
【Part3】http://pc.2ch.net/tech/kako/1002/10028/1002894129.html
【Part4】http://game.2ch.net/gamedev/kako/1005/10050/1005040025.html
【Part5】http://pc2.2ch.net/test/read.cgi/gamedev/1036410116/
■関連スレなど
>>2-5
0512名前は開発中のものです。05/01/15 00:27:16ID:rN3ku86Q
>>510
サイトじゃなくて書籍だけど
「ゲーム開発者のためのAI入門」

A*ならgamdev wikiにもあったような・・・・
0513名前は開発中のものです。05/01/16 22:59:35ID:CY/+3klI
2次元配列をゼロクリアしたいのですが簡単な方法ないですか?
今はfor分の二重ループで1つずつ代入しています
使用環境はVC++です
0514名前は開発中のものです。05/01/16 23:01:24ID:NpLjrdXw
memset
0515名前は開発中のものです。05/01/16 23:23:24ID:CY/+3klI
>>514
うまくいきました。ありがとうございます。

使用前
  for (int i=0; i<3; i++)
  {
    for (int j=0; j<3; j++)
    {
      map[i][j]=0;
    }
  }

使用後
memset(map, 0, sizeof(int)*9);
0516名前は開発中のものです。05/01/16 23:26:51ID:IXkeSk7x
sizeof(map)じゃダメ?
0517名前は開発中のものです。05/01/16 23:42:36ID:CY/+3klI
>>516
なるほど!全体を指定してしまったほうが手っ取り早いですね。
うまくいきました。ありがとうございます。

改良後
memset(map, 0, sizeof(map));
0518名前は開発中のものです。05/01/17 02:12:10ID:Q4YWdrDN
なんか、ほほえましいな。自分が若かった頃を思い出す。
>>513は、もっとガンガレ!!
0519名前は開発中のものです。05/01/17 02:42:31ID:jWBtbAdV
callocって無かった?
0520名前は開発中のものです。05/01/17 07:52:36ID:6lEx3rdP
ZeroMemory(map, sizeof(map));

でもいいね。
0521名前は開発中のものです。05/01/18 01:05:52ID:7XkOXKh6
忘れるな。
memset は string.h
ZeroMemory は windows.h
0522名前は開発中のものです。05/01/19 16:17:57ID:ZQyRJ79S
むしろZeroMemoryは中身memset
0523名前は開発中のものです。05/01/19 18:28:10ID:aRH3B+4H
さらにインライン展開されて、関数を呼ばずにストリング転送に変換される。
0524名前は開発中のものです。05/01/23 04:37:44ID:LheYkhaz
なんかこんなのあったけど

http://www.microsoft.com/japan/msdn/library/ja/jpdncode/htm/secure10102002.asp
052552405/01/23 04:52:12ID:LheYkhaz
なんか違ってた
0526名前は開発中のものです。05/01/28 12:13:19ID:7PgE831H
ファミコンのラディア戦記みたいなアクションRPGを作りたいけど
イベントの処理やデータの管理(セーブ機能をつけたい)などを
どう実現していいやら検討も付きません。
どこかに参考になりそうなソース付きのアクションRPGをDL出来るところは無いでしょうか?
ちなみにVC++とDirectXで作っててキャラ&敵の表示、あたり判定、攻撃、マップの移動などは出来てます。
0527名前は開発中のものです。05/01/28 17:50:53ID:IiB3r9BB
>>526
暗号化と、バイナリモードのファイル入出力を習得すればできる
大事なのは考えることだ
0528名前は開発中のものです。05/01/28 18:07:56ID:DhbqYSB9
別に暗号化する必要もないし、バイナリファイルである必要もない。
大事なのは「他人にいじられないようにする」という勝手な用件を脳内で作らないことだ。
0529名前は開発中のものです。05/01/28 19:29:59ID:IiB3r9BB
>>528
よく意味がわからないんだが、どういうことだ?
0530名前は開発中のものです。05/01/28 20:52:13ID:KA8jG9qB
イベントもセーブもどう弄られ様とかまわねーっつーことじゃないの?
弄られることで自分が不利益被らないなら、どーなっても良いんじゃないのかな。

大事なのは考えることだ
だけど、余計なことは考えなくて良い
0531名前は開発中のものです。05/01/28 21:19:33ID:ZJQyR3uN
>>526
イベントが発生する時は、何かしらのアクションやシグナルがあるから、
それらをifやswitchとかで監視する。(他にも方法はあるだろうけど)
ボスが死んだらイベントが発生する、とか色々イベントを試していれば、おのずと形が見えてくると思う。
まぁ俺の言ってることは>>527、530と一緒で、とにかく試行錯誤したほうがいいよw
0532名前は開発中のものです。05/01/29 03:56:50ID:hwmUiymu
>>526
何が分からないのかよく分からないからもっと具体的な質問をしてみな。
データセーブはファイルの入出力さえできれば簡単だろ。どこができないの?

イベントについては、最高の理想を言えば、ごちゃごちゃプログラムで泥縄式に
作るするんじゃなくて、シナリオ記述言語(スクリプト)みたいなのを自分で
勝手に考えて創って、それを読み進めるプログラム(=ゲームプログラム)を
作る…という感じにすると美しいぞ。
0533名前は開発中のものです。05/01/29 06:10:59ID:dcHY39ty
>>526
>勝手に考えて創って、それを読み進めるプログラム(=ゲームプログラム)を
>作る…という感じにすると美しいぞ。

多分、526にはその技術が無いから、想像もできんのだよ。
イベントは、まず、イベントマップというのを作る。
これは、画面を表示するマップに重なっているイメージだ。
そんで、そのイベントマップに、イベント番号などを記録する。
すると、マップの。X=5.Y=6の地点で、イベントマップにイベント番号があれば、そこでイベント発生だ。
イベントは、メインルーチンと並列に実行されるようにせねばならない。
たとえば、勝手に上に歩いて、キャラクタが「勝手に足が動いたんだ」というセリフを出すイベントだとしたら、
その歩いてるときにも、ゲームの全体の進行を止めてはならない。
053452605/01/29 09:16:02ID:7YDq9IjJ
お返事ありがとうございます。

データの管理:まとめてメモリを確保して、セーブが必要なデータはそのメモリを使う。セーブする場合はそのメモリを保存する。
イベントの管理:イベントのデータが入ったファイルを用意して必要なイベントファイルを読み込んでおき、そのデータに応じて処理をする。

書き込む前に色々調べて上記のような処理で実現するのがいいんじゃないかとは思ったのですが、
教材になりそうなプログラムやサイトが見つからないのでここに書き込みをしました。
質問べたですみません。

シナリオ記述言語(スクリプト)をつくる技術はありませんが、イベントマップ方式?はできそうです。
イベントマップとはRPGツクールのイベント処理と同じ考え方ですよね。
体験版があるみたいなのでちょっといじってみようと思います。
0535名前は開発中のものです。05/02/07 22:00:54ID:lJKKg9iL
クイックセーブ(何処でもセーブ)ができるシステム組むのって大変だよね。
でもこれが作れたらかなりの腕だと思うよ。
0536名前は開発中のものです。05/02/10 07:15:16ID:wT+Y0IFB
>>535
場合によるだろ。
はじめからあらかじめ計画してあって
プレイヤーが今そこにいるための情報がすべてまとまっていれば
ファイルに書き込むだけで終わりだろ。

逆に何も考えずにただゲームを作った後で
どこでもセーブしたいとかいいだしたら地獄絵図だが。

システム組むのって大変だよね。
じゃなくてちゃんと計画できてなきゃそもそも不可能であってやるべきじゃねーことだろ。
0537名前は開発中のものです。05/02/10 15:17:17ID:pqZJazXR
これが正解

大規模なシステム組むのって大変だよね。
作れたらかなりの腕だと思うよ。
0538名前は開発中のものです。05/02/10 16:57:44ID:UHlpW5jj
まずはきちんとした設計を。
0539名前は開発中のものです。05/02/10 20:56:02ID:R7En7PQ7
クイックセーブをシリアライズですまそうなんてぬかすなよ
0540名前は開発中のものです。05/02/10 23:29:01ID:m8YDuGMo
理由を述べよ。
0541名前は開発中のものです。05/02/18 07:16:25ID:NdgimZZ6
今DirectX9.0 SDK Update (Summer 2003) + VC++.netで
DirectXをプチプチと勉強しているんだけど、2体のポリゴンキャラクター同士の全ポリゴン判定?フル当たり判定?
をする場合どうやってやってますか?
自分が思いついたのはVertexBufferとIndexBufferを使ってLockするして判定する方法です。
でもこれだと速度的に心配なので他の方法ないかと思ってエロイ人が集っていて板違いじゃなさそうな
ここに相談しにきました。(;´Д`)ハァハァ
0542名前は開発中のものです。05/02/18 08:38:07ID:I2CSa8I2
普通は衝突判定用の簡易オブジェクトを作るもんだと思うが…
0543名前は開発中のものです。05/02/18 09:00:28ID:NdgimZZ6
・でもそれだとメッシュによって精度が落ちちゃうんですよ。
・勉強という事で何かいい方法がないか知りたいんですよ。(;´・ω・`)
0544名前は開発中のものです。05/02/18 09:11:40ID:5R+gyy4l
簡易オブジェクトでぶつかってるやつだけ詳細にチェック
0545名前は開発中のものです。05/02/18 15:37:57ID:JUukIzID
Lockせずにnewしてそこに置いとけばいいんじゃない?
0546名前は開発中のものです。05/02/18 20:15:52ID:SyUoLxbM
>>544
それも思いつきました。
でもたくさんのメッシュが一度にぶつかるとやっぱりきついかな?って思いまして。

>>545
むむ!?(;`・ω・´)もっと詳しく説明やここよめアホってなサイトお願いします!
0547名前は開発中のものです。05/02/19 06:29:08ID:UXB8Jg0C
>>546
たくさんのメッシュを一度にぶつけないでください(マジレス)
衝突判定に銀の弾丸はないのです
0548名前は開発中のものです。05/02/19 06:41:03ID:O2/kCUDX
>>546
当たってるかどうかだけなら重くはならん。
ほかに何か求めたいのか?角度とか。
0549名前は開発中のものです。05/02/19 07:07:27ID:j8BXkcXy
>>548
角度や摩擦など求める予定ですが、その前にLockして判定する以外
の方法を教えてくれたらと思っています。

簡易オブジェでぶつかっているやつだけLockしてフルチェックさせる方法でも
たくさんのオブジェクトが密集してしまうと結局は簡易オブジェクトなしでフルチェックする
場合とあんまり変わらず処理に影響してしまうので。
0550名前は開発中のものです。05/02/19 07:08:58ID:T6zgD8Th
4つぐらい重なったら核爆発が起きるようにしてはどうか。
0551名前は開発中のものです。05/02/20 10:22:20ID:Mw8d2O0L
>>550
えぇ!そんなぁ・・・。(´Д`;)
0552名前は開発中のものです。05/02/21 18:17:21ID:b2LRiS8s
>>549
ゲームが作りたいなら全メッシュ衝突判定なんて考えない。簡易オブジェクトを使う。
それでも超重くなるとしたら設計が悪い。たくさんのオブジェクトが密集しまくる設計にしないでください。
0553名前は開発中のものです。05/02/23 00:55:24ID:4mRmpQC+
D3DXVec3TransformCoordをヘルプで読んだのですがいまいち分かりません。
これはグローバルな座標変数をローカルな座標変数に変換するのですか?
あと似たような名前の
D3DXVec3Transformとの違いもD3DXVec3TransformCoord が理解できないため分かりません。
どなたか教えてください。お願いします。
0554名前は開発中のものです。05/02/23 05:48:21ID:lVuNeIQF
以下の関数はDirectXヘルプを読んで、私がコーディングしたものです。
これらを見ても関数の意味が分からないようでしたら、ベクトルと行列の基礎をしっかり勉強してから再挑戦することをお勧めします。

VECTOR4F* D3DXVec3Transform
( VECTOR4F *pOut, const VECTOR3F *pV, const MATRIX44F *pM )
{
pOut->x = pV->x * pM->_11 + pV->y * pM->_21 + pV->z * pM->_31 + pM->_41;
pOut->y = pV->x * pM->_12 + pV->y * pM->_22 + pV->z * pM->_32 + pM->_42;
pOut->z = pV->x * pM->_13 + pV->y * pM->_23 + pV->z * pM->_33 + pM->_43;
pOut->w = pV->x * pM->_14 + pV->y * pM->_24 + pV->z * pM->_34 + pM->_44;
return pOut;
}
0555名前は開発中のものです。05/02/23 05:49:38ID:lVuNeIQF
VECTOR3F* D3DXVec3TransformCoord
( VECTOR3F *pOut, const VECTOR3F *pV, const MATRIX44F *pM )
{
VECTOR3F ret;
float w;
w = pV->x * pM->_14 + pV->y * pM->_24 + pV->z * pM->_34 + pM->_44;
if(w) w = 1.f / w;
ret.x = (pV->x * pM->_11 + pV->y * pM->_21 + pV->z * pM->_31 + pM->_41) * w;
ret.y = (pV->x * pM->_12 + pV->y * pM->_22 + pV->z * pM->_32 + pM->_42) * w;
ret.z = (pV->x * pM->_13 + pV->y * pM->_23 + pV->z * pM->_33 + pM->_43) * w;
*pOut = ret;
return pOut;
}
VECTOR3F* D3DXVec3TransformNormal
( VECTOR3F *pOut, const VECTOR3F *pV, const MATRIX44F *pM )
{
VECTOR3F ret;
ret.x = (pV->x * pM->_11 + pV->y * pM->_21 + pV->z * pM->_31);
ret.y = (pV->x * pM->_12 + pV->y * pM->_22 + pV->z * pM->_32);
ret.z = (pV->x * pM->_13 + pV->y * pM->_23 + pV->z * pM->_33);
*pOut = ret;
return pOut;
}
0556名前は開発中のものです。05/02/23 05:53:24ID:lVuNeIQF
すいません型を以下のように直しておいてください。

VECTOR4F → D3DXVECTOR4
VECTOR3F → D3DXVECTOR3
MATRIX44F → D3DXMATRIX
0557名前は開発中のものです。05/02/23 07:07:45ID:5jBEcMCA
なんと独りよがりな
0558名前は開発中のものです。05/02/23 14:56:55ID:9pm4uh9q
D3DXVec3TransformとD3DXVec3TransformCoordの違いが多分分かりました。
055955405/02/24 17:48:31ID:9BALKx7J
>557
少しでも質問者の疑問に答えられれば良いなと思って書いたレスを、「なんと独りよがりな」という言葉で一蹴ですか。
お前みたいなやつがいると正直やる気を無くすよ。
0560名前は開発中のものです。05/02/25 03:35:38ID:8xpRQllj
なんでそこでキレるかなぁ〜
0561名前は開発中のものです。05/03/06 20:52:45ID:+8c0xIHX
機嫌悪かったんだろ
0562名前は開発中のものです。05/03/15 00:30:34ID:2caYpl3H
あの日だったんだろ
0563名前は開発中のものです。05/03/15 17:25:12ID:l/6TEvIC
(*ノノ)
0564名前は開発中のものです。05/03/19 22:25:07ID:zqD1MdPq
大手ゲームメーカーでプログラマやってます。
このスレ、レベルひくっ(ぷっ)笑えてきた。

プログラムなんかやめちゃえ!
0565名前は開発中のものです。05/03/19 22:53:19ID:OqPAYq45
最初からレベルが高い人など居ませんよ。
くだらないことを書き込まないように。
0566名前は開発中のものです。05/03/20 05:27:02ID:oSFOPQ/k
>>564
喪前は
人間やめちゃえ!!
0567名前は開発中のものです。05/03/20 05:28:52ID:oSFOPQ/k
>>564
無能な上司の下で
デスマーチ頑張ってねwww
0568名前は開発中のものです。2005/03/29(火) 09:19:19ID:NLg6bdst
>>564
大手ゲームメーカーって言ってるところが笑えるな
腕に自信が無いんだろうな
0569名前は開発中のものです。2005/03/29(火) 19:21:00ID:UxPYIf8b
「大手でプログラマ」ねぇ…。
ま、下請けでも強弁すれば「大手でプログラマ」と言い張れないこともないし、
内部事情を知らない厨房の嘘だと決め付けるのもアレかねぇ。
0570名前は開発中のものです。皇紀2665/04/01(金) 11:07:39ID:2DNa+8SZ
大手町にある会社の社員だな。
0571名前は開発中のものです。2005/05/10(火) 22:31:50ID:qbemgZao
Ruby/SDLでアクションRPG作ってるんですが、
敵の動きを一つずつRubyのマルチスレッド機能で処理するのは良くないですか?
羽虫みたいのが画面一杯に湧いてくるのを蹴散らす場面があるので、弾幕STG並の負荷になると思われます
動作環境はWindowsXPが動いてるメーカー製PCなら例外なく動くようにしたいです
0572名前は開発中のものです。2005/05/10(火) 23:03:32ID:xTojRoxk
>>571
ゲームに限っては、の話ですが。
マルチスレッドよる処理は、そうする必然性がない限り、お勧めしません。

特にあなたが提案するケースの場合、環境によっては
「自機の処理が行われないまま一つの弾丸にばかり処理権が連続して行く」
事態が、最悪、想定されます。
すると、DIOの世界(ザ・ワールド)に攻撃されたかのような
理不尽な死が体験できることになります。
やめたほうが無難ですよ。

また、世界(ザ・ワールド)現象を回避するために
各キャラの処理一回につき他のスレッドと同期を取った場合、効率は最悪です。
普通にシングルスレッドで処理した方がよっぽど効率的です。

テクに走りたい気持ちはとっても理解する。
そう思っていた時期が俺にもありました。
でも、シンプルかつ愚直に作るのが最善の道であることも多いのですよ。
0573名前は開発中のものです。2005/05/11(水) 08:43:01ID:6LEYouSH
なるほど
ありがとうございます
シングルタスクでやるっていうと
タスクコントロールブロックとかいうやつですよね
初心者向けに解説してある本とかサイトとかがあれば教えてもらえませんか
やね氏の本で扱ってるっていうのを聞いて(プロフェッショナルの続編だったかな)立ち読みしてみましたが
あれだとよくわからんかったです
0574名前は開発中のものです。2005/05/11(水) 12:26:25ID:KXICTm7E
>>573
別にそんなたいそうなものじゃなくても
考え方の基本を1フレームずつの処理に変えればいいだけ。
0575名前は開発中のものです。2005/05/12(木) 20:29:44ID:aQoHjmWQ
SWFファイルの仕様について
日本語で詳しく説明している書籍かサイトはありませんか
0576名前は開発中のものです。2005/05/24(火) 16:19:08ID:v7WpxIBq
液晶を使っていてもティアリングみたいなのが出るんだけど、
これを回避するにはどういうコードを書けばいいんですか?
0577名前は開発中のものです。2005/05/24(火) 17:14:36ID:NGCTpyCN
VSYNCを待て。
D3DSWAPEFFECT_COPY_VSYNC?
それともここらへんが参考になるか?
ttp://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=28142
0578名前は開発中のものです。2005/08/12(金) 14:16:54ID:CaToi4lw
オブジェクト指向勉強中なんですが、インスタンス生成とかカプセル化とかだるい・・・
ゲーム製作には構造化の方が向いている気がするんですが。どう思います?
0579名前は開発中のものです。2005/08/12(金) 16:50:57ID:+xjZsnhE
オブジェクトは構造化の発展です
0580名前は開発中のものです。2005/08/24(水) 09:49:40ID:NGiAd0T2
カプセル化なんか遥か昔からあった概念だもんな。
0581名前は開発中のものです。2005/08/26(金) 19:17:31ID:vVPZkYc6
ゲームプログラミングに興味を持ったのですが全くの素人でやるべきことが多すぎて何から手を出していいかよくわかりません。
数学や物理の勉強から始めた方がいいのでしょうか?
0582名前は開発中のものです。2005/08/26(金) 19:29:34ID:6D6lM3q9
英語やっとけ
物理なんて当面は高校卒業程度の知識で十分だ
0583名前は開発中のものです。2005/08/26(金) 19:33:27ID:vVPZkYc6
>>582
高校の頃は文系だったので科学はやってましたが物理は全くやってないんです
0584名前は開発中のものです。2005/08/26(金) 21:35:57ID:hMfPlAPs
物理なんていらぬ。
算数やっとこう。それさえできれば後は勘。
0585名前は開発中のものです。2005/08/26(金) 21:46:40ID:D8UBXRK8
まずはプログラミングを楽しむことから始めるんだ!!m9('∀`)
0586名前は開発中のものです。2005/08/26(金) 21:57:23ID:q0ihkIeI
まー最初はプログラミング自体がパズルみたいなもんだしな。
0587名前は開発中のものです。2005/08/27(土) 00:57:00ID:4R6gqBFc
楽しむってそんなので大丈夫なんですか?
俺ド素人だし、しかも仕事にしようと思ったらそんな生半可な気持ちじゃ・・・・
0588名前は開発中のものです。2005/08/27(土) 01:15:27ID:ZquWVtNI
特に目的がねーんならプログラミングそのものを目的にするしかねーってこった
ゲームプログラミングなんて漠然とし過ぎだって
0589名前は開発中のものです。2005/08/27(土) 01:18:02ID:4R6gqBFc
やっぱやりたいジャンルって最初に絞った方がいいんですかね
アクションとかRPGとか
0590名前は開発中のものです。2005/08/27(土) 03:15:29ID:+qa4qoic
ジャンルはあんま関係ねーな。
つか、仕事にするんじゃこんなとこで聞くなよ
それっぽい定番の本買って、そこから参考文献のリンクやら必要な資料を辿って必要なことから身につけろ。
0591名前は開発中のものです。2005/08/27(土) 03:20:16ID:4R6gqBFc
すみません、ありがとうございました
0592名無しさん@そうだ選挙に行こう2005/09/11(日) 01:44:55ID:VkAkPVlE
DirectXのSDK落とそうとしたら
ver9しかないみたいなんだけど、
ひょっとしてもう8は
CD付きの古本とか探すしかないですか?

98SEだと9のSDKが使えないらしいんで…
(入門サイトに2000以上って書いてた)
0593名無しさん@そうだ選挙に行こう2005/09/11(日) 11:35:06ID:2BgVInhk
>>592

つMicrosoft download
0594名無しさん@そうだ選挙に行こう2005/09/11(日) 14:27:23ID:3zrye/oe
>>593
ここですよね…
ttp://www.microsoft.com/downloads/results.aspx?NextOrPrevClause=6%7c%2b6562&
productID=9C954C37-1ED1-4846-8A7D-85FC422D1388&CategoryID=&freetext=&
DisplayLang=en&DisplayEnglishAlso=&sortCriteria=popularity&startDate=&period=0&
type=&sortOrder=ascending&nr=20

何遍見ても8本体が見つからない_M○
ランタイムやupデータはあるのに…
探し方悪いのかな
0595名前は開発中のものです。2005/09/19(月) 23:40:13ID:92cy+6KO
9のインストールも出来ないのかな?
8は9の中にあるんだけどな。
0596名前は開発中のものです。2005/11/30(水) 18:14:19ID:NRCIXxVf
今大学でC言語やってるんだが、C++との互換性はどんなもんなんだ?
CをマスターしていればC++のマスターにどれくらい労力がかかるとか。
0597名前は開発中のものです。2005/11/30(水) 20:18:12ID:/kKwaLK2
互換性は無い。
しかし構文などは似ている部分が多いので、
C++を扱ってた人ならすぐ修得できるよ。
05985962005/11/30(水) 20:46:37ID:NRCIXxVf
>>597

なるほど。ありがとう
ついでに聞いておきたいんだが、そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?
今はCでのいわゆるコンソールアプリってのを学んでいる訳なんだが……。
0599名前は開発中のものです。2005/11/30(水) 22:15:01ID:3MglgmXZ
>>596
いやいや、互換性はあるから。
基本的に、C++ は C に仕様を追加したものだから。
そりゃ、細かいところではルールが違うとかはあるけどさ。

C++ のソースコード内に C のコードを書くことはできるよ。
だから…

 - 最初は C で書いて、後々 C++ に書き直す
 - C++ で書いていって、どうしても分からない場所を C で書く

っていう勉強方法が使えるよ。
0600名前は開発中のものです。2005/11/30(水) 22:18:26ID:3MglgmXZ
連投スマンです…

> そこから派生してWindowsプログラミングってのはやっぱり難しいんだろうか?

Windows の API は C ベース。
なので、最低限 C のコードを書ける程度の力は必要です。

ともあれ、「猫でも分かるプログラミング」を見て勉強してみることをお勧めします。
06015962005/11/30(水) 22:32:57ID:NRCIXxVf
>>596-600
詳しくトンクス。
「猫でも分かる〜」は一応見てみた。つーか今日の課題やってるときもお世話に(ry
0602名前は開発中のものです。2005/12/25(日) 18:32:09ID:QPxHAtwC
最近 Game Programming Gems を読みはじめたのですが、
HandleクラスやHandleMgrクラス内に出てくるマジックナンバーとは、一体どのような役割をする為のものなのでしょうか?
本を読んでもソースを読んでも、全く何のために存在するものなのか理解できません。
初歩的な質問かもしれませんが、マジックナンバーとは何なのか、解る方教えて下さい。お願いいたします。
0603名前は開発中のものです。2005/12/25(日) 21:16:44ID:10j12RX3
>>602
Handle のマジックナンバーは、
ハンドルが指すオブジェクトを区別するためのID(識別値)。

詳しく説明すると、
HandleMgr はメモリを節約するためにデータ配列の同じ位置を何度も再利用する。
そのため、ハンドルを参照したとき、それが指す位置のオブジェクトが入れ替わっている可能性がある。
これを判断するのに必要なのがマジックナンバー(=ID)。

例えば、下の様なデータ配列があるとする(数字はID)。
データ { 1, 2, 3 }

このとき 0 番目のハンドルを取得する。
ハンドルA { index=0, ID=1 }

次にIDが 1 のオブジェクトをデータから削除すると、その位置は空になる。
データ { 0, 2, 3 }  // 0 番目に 0 が入った

次にオブジェクトをデータに追加すると新しい ID が割り振られ、空の位置に入る。
データ { 5, 2, 3 }  //  0 番目に 5 が入った

このとき、さっき作ったハンドルAを参照してみる。
データの ハンドルA.index 位置の ID は 5。
ハンドルA.ID は 1。
ID が一致しないので、ハンドルは無効になった(オブジェクトは削除された)と分かる。
逆に ID が一致した場合は、ハンドルが指す位置のオブジェクトは存在していると分かる。
06046032005/12/25(日) 21:17:35ID:10j12RX3
>>602
とまあこんな感じに、マジックナンバーは、ハンドルの指す位置のオブジェクトが、
ハンドル取得時と同じオブジェクトであるかどうかの判定に使われている。

これで分かんなかったら、
上の例と同じケースをマジックナンバーを使わずにやった場合を考えてみると良いよ。
06056022005/12/26(月) 03:37:22ID:XvOO4Glh
>>603
返信ありがとうございます。
非常に丁寧に解凍して頂いてありがたいです。
マジックナンバーが識別子であると言うことを理解し、順を追って考えたら理解することが出来ました。
0606名前は開発中のものです。2005/12/30(金) 22:08:40ID:0oupnfaC

スーパーマリオワールドのマップが自分で作れるエディタ
http://www.pankura.org/archives/005368.php

これみたいに、アニメのプレビューができるマップエディタを作りたいです。
アニメ部分のプレビューの実装でつまづいてます。
どんな実装にすればよいか情報いただけるとありがたいです。

0607名前は開発中のものです。2005/12/30(金) 23:30:17ID:aGBuMIZJ
仕様を固める前に実装を聞くなよ。

struct _anime_chr {
 int number;
 int max;
 int **anime;
} anime_chr[MAP_PATTERN_MAX];

int map[MAP_Y_MAX][MAP_X_MAX];

int main(void) {
 int i, x, y;
 while (1) {
  for (i = 0; i < MAP_PATTERN_MAX; i++) {
   _anime_chr *anime = anime_chr[i];
   if (++anime->number > anime->max) {
    anime->number = 0;
   }
   /* マップチップをタイルに転送する */
   TransferChipToTile(i, anime->anime, anime->number);
  }
  for (y = 0; y < MAP_Y_MAX; y++) {
   for (x = 0; x < MAP_X_MAX; x++) {
    /* マップ番号を元に、タイルをVRAMに転送する */
    TransferTileToVram(x, y, map[y][x]);
   }
  }
 }
}

こんな感じでどうだ。中身は自分で考えて!
0608名前は開発中のものです。2006/01/14(土) 12:30:32ID:pizx291y
スクリプトの実装方法のサンプルをください
言語は問いません
0609名前は開発中のものです。2006/01/14(土) 12:36:40ID:p1M3DQqd
ほらよ。
http://jp2.php.net/get/php-5.1.2.tar.bz2/from/jp.php.net/mirror
0610名前は開発中のものです。2006/01/14(土) 12:40:01ID:ldillV2z
JavaScript or PHP についてなら、多少教えれると思います。

スクリプトを実装して何をしたいかを、教えてもらえれば
サンプルを載せま〜す。
0611名前は開発中のものです。2006/01/14(土) 14:12:50ID:ENjm6BLu
PHP風のスクリプトってないのかな。
<?= ?>があれば楽にノベルが作れそう。
■ このスレッドは過去ログ倉庫に格納されています