DXライブラリ 総合ス ..
[2ch|▼Menu]
181:名前は開発中のものです。
08/12/01 16:57:45 Mqk5OkvC
>>177
そのプロセッサ専用のライブラリを熟知してれば
サクサク動くゲームになる

例えばPS2ならEEとかのベクトル計算のためのライブラリの仕様とか
windowsマシンにはそんな計算機能はデフォルトじゃついてないから
どうしてもグラボ依存になる

182:名前は開発中のものです。
08/12/02 00:02:20 zbFv8Mtr
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpc, int nC){
  ChangeWindowMode(TRUE);
    SetDrawScreen(DX_SCREEN_BACK);

while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
   ClsDrawScreen();
    〜〜
   ScreenFlip();
}
}

↑こう書いたとき、〜〜 の部分の処理が毎回変わるモノだった場合でも、よほど〜〜の処理が長くならない限り、
ScreenFlip()があることによって、画面に出力される周期は〜〜の処理時間によらない、と考えていいんでしょうか?

なんか説明下手ですみません・・・。  たとえば、指数関数的に動く物体を作りたいとして、
〜〜の部分を「毎回n=n+1して、x^nの位置に画像を出力」という内容にしたとした場合、
ループが来るたびにnが増えるからx^nの計算の処理が多少だんだん増えていくと思うのですが、
もしその処理時間も画面出力に影響してしまったら、動きが時間の正確な指数関数にならないと思うのですが、
『ScreenFlip()によって、「処理が終わっても、規定時間δtが来るまでは画面出力しない」という仕組みが加わってるので、
処理時間に影響せず一定時間ごとに画面出力される。 ただし、もちろん 処理時間の方がδtを超えてしまったら、重くなるという別の影響は出てくる。』
というものだと解釈していいのでしょうか?

(すみません。アク禁中の代レスなので、返事できないかもしれません。)

183:名前は開発中のものです。
08/12/02 08:48:55 jLo5RDUc
どうでもいいがProcessMessage()の場所が俺の好みじゃなかった。
本文は読んでいない。

184:名前は開発中のものです。
08/12/02 08:53:50 l3NK/S0H
SetWaitVSyncFlagがFALSEで無い限りは

185:名前は開発中のものです。
08/12/02 09:50:01 ptyOGcVX
リフレッシュレートに依存する。

186:名前は開発中のものです。
08/12/02 21:13:42 xSROB0kK
x^nの計算なんか描画処理に比べたらほんの一瞬

187:名前は開発中のものです。
08/12/02 22:13:19 g62jpxUX
そういやCを独学でやってて最初に詰まったのがべき乗計算だったなw

188:名前は開発中のものです。
08/12/03 05:14:23 Ts8WjI0J
>>153
#include <stdio.h>
#include <windows.h>
void main (){
int cell=0,jinzo18=2,jinzo17=2,tensinhan=25,seimeiryoku=1;
int hikinobasi=0;
cell+=jinzo17;
for(hikinobasi=0;hikinobasi<30;hikinobasi++){printf("おお\n"); SleepEx(200,TRUE);}
printf("天津飯「まずい17号を吸収しやがった・・・チャオズ俺は死ぬかも知れない\n");SleepEx(2000,TRUE);
printf("セル「天津飯!!雑魚が何をするつもりだ!」\n");SleepEx(4000,TRUE);
printf("天津飯「新気功砲!!ハー」\n");SleepEx(200,TRUE);
printf("セル「(゚Д゚)ぬお!\n");SleepEx(200,TRUE);
while(tensinhan>0){
printf("セル「<`Д´>おのれー」\n");SleepEx(200,TRUE);
printf("天津飯「(; ゚Д゚)ハァー!」\n");SleepEx(500,TRUE);
tensinhan-=seimeiryoku;}
printf("天津飯「化け物め・・・・うう・・・・」\n");SleepEx(5000,TRUE);
printf("セル「むううう」\n");SleepEx(1000,TRUE);
printf("セル「こんな雑魚に足止め食らうとは」\n");SleepEx(4000,TRUE);
cell=jinzo17+jinzo18;
for(hikinobasi=0;hikinobasi<100;hikinobasi++){printf("おお\n"); SleepEx(50,TRUE);}
printf("完全体セル「すばらしい力だ 諸君!!」\n");
SleepEx(10000,TRUE);
}

189:名前は開発中のものです。
08/12/03 05:38:32 ecRDRm37
同一内容の文字列を毎フレーム表示する処理があり、

空のサーフェスを作成 → 一旦バックバッファに文字列を描画 → バックバッファから空のサーフェスに文字列の画像を取得

こうして予め文字列を描画しておいたサーフェスから
毎回メイン処理でDrawGraphしているのですが、どうもスッキリしません。
しかもGetDrawScreenGraphの説明にもある通り透過色が使用出来ません。
DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?
やりたい事は「同じ文字列を毎フレーム描画する処理を軽くしたい」だけなのですが、
文字グラフィックファイルを用意することは出来れば避けたいので、良い方法があったら教えて下さい1


190:189
08/12/03 05:45:19 ecRDRm37
無駄に長くて分かり難くなってしまいました。
(例えば説明文等の)同一の文字列を毎フレーム描画する処理を軽くしたいが
文字グラフィックファイルを用意する以外で良い方法があったら誰か教えて下さいです。

191:名前は開発中のものです。
08/12/03 09:09:23 Zrkeui/r
DrawStringで十分軽いと思う
フォントハンドルを毎回読み込んだりしていない?

192:189
08/12/03 17:18:45 ecRDRm37
>>191
お返事遅くなって申し訳ありません。
当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。
DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。
低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。

193:189
08/12/03 17:29:14 ecRDRm37
フォントの変更は行っていないので、フォントハンドルは使用していないです。

194:名前は開発中のものです。
08/12/03 18:07:17 o+fnXJLe
そんなにたくさんの文字を同時に表示してるのかな?
それともPC環境が悪すぎる?

俺普通にDrawString使ってるけど別に遅くなった事ないよ?
普通に60FPS出てる。古いノートパソコンで。
最高でまぁ10行程度の表示しかしてないけど。

195:名前は開発中のものです。
08/12/03 18:30:58 JlppSG1I
いやそれじゃ全くテストになってないから。
192の知識通り、今も文字列表示は遅いよ。
189の方法が適切だと思うし、他に方法を提示できないのは申し訳ないけど、
少なくとも文字列表示が遅いって前提でレスされると無駄だと思ったので口を出してみた。

196:名前は開発中のものです。
08/12/03 18:37:18 JlppSG1I
×少なくとも文字列表示が遅いって前提でレスされると無駄だと
○少なくとも文字列表示が遅いって前提を否定するレスは無駄だと

197:名前は開発中のものです。
08/12/03 19:17:52 o+fnXJLe
俺の事?
別にテストしたわけじゃなくて、普通に使ってるだけなんだが。

文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。

グラフィック表示が遅いから他の方法はありますか? って質問があったとしたら
まず現在どういう環境でどれだけのグラフィックをどういう方法で表示させてるのか教えろってのは普通の流れだろ?

そこをかっとばしてグラフィック表示処理そのものを早くする方法を考えるのは無駄な話だ。

198:名前は開発中のものです。
08/12/03 19:27:15 zxrZF3eH
確かに
今与えられた情報だけではなんともいえんな

199:名前は開発中のものです。
08/12/03 19:41:02 RJPTfL79
文字列の長さ、量がまずわからない。

「フォントの変更は行っていない」というのが、フォントの大きさやアンチエイリアス有無の変更は行っているかもしれないとも読める。

200:名前は開発中のものです。
08/12/04 00:31:01 jlPFeEOB
>>197
文字列表示はグラフィック表示より遅いって常識知らないの?
そこは議論の余地なしだから言ったまで。
それと、テストじゃないなら>>194の報告は不適切。
まあ上記の前提を知らなかった故だからしかたないと言えばしかたないが、ややこしくなるのでなかったほうがよかったな。

情報は少ないが、前提を知っているば容易に共感できるし、解決方法を知っている人ならこの情報量でも回答できるかもしれない。

201:名前は開発中のものです。
08/12/04 00:33:46 GF73/yq8
>>197
>文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。

(;^ω^)

202:名前は開発中のものです。
08/12/04 02:05:10 z7drhJqc
何人か偉そうにレスしてるけど、誰もライブラリのソース見てないのか?

DXライブラリは文字を描画する前にテクスチャにキャッシュしてるから
同じ文字なら2回目以降はほぼDrawGraphと同じコストで処理は完了する
キャッシュ用のテクスチャは512x512だから画面一杯に異なった文字を
描画するくらいしない限りは文字列描画特有の遅さは発生しないぞ

まあ、毎フレームキャッシュに無い文字を描画したら一般に言うところの
「文字列表示が遅い」ってのに当てはまるけど

203:名前は開発中のものです。
08/12/04 09:46:46 ggjOtlxc
良スレage
みなぎってきた、学校でゲーム作ってくる

204:名前は開発中のものです。
08/12/04 10:33:56 763fKCgi
>>200

何を言ってるんだ君は。
60FPSで動いてるゲームに、一回のDrawString処理を追加しただけで30FPSにまで落ちたりするか?
普通はしないだろ?

じゃあどういう処理にしてるんだ? っつーレベルの話だぞ?

192が出してる情報はその程度って事。

205:名前は開発中のものです。
08/12/04 12:47:01 GF73/yq8
>>204
>>202

分からない(・∀・)カエレ!!

206:名前は開発中のものです。
08/12/05 18:06:46 YY5q+8z/
ソフトウェア描画モードと言う物があるらしいのですが、
どれのことなのでしょうか?
一部のPCだと動かなかったりする時にこれを使えばいいらしいのですが……。
リファレンスを見た限りそれっぽいのがありませんでした。

207:名前は開発中のものです。
08/12/05 18:19:39 MN0oAg79
この辺をどうぞ。
URLリンク(www.dkut.flnet.org)

208:名前は開発中のものです。
08/12/05 20:49:20 YY5q+8z/
>>207
ありがとうございます。
SetScreenMemToVramFlag( FALSE );
と、
SetUse3DFlag( FALSE );
を使ったらよさそうなのでこの二つを使ってみようと思います。

209:名前は開発中のものです。
08/12/06 03:56:27 5bnbt+Lt
>>204
垂直同期を使って処理していれば僅かな処理の遅さでFPSは半分になることがある
そしてGDIは遅い

>>189はDrawStringを使用せずに同等の文字描画処理をする方法を模索しているであって
デバッグをしてくれと言っているわけじゃないんだから君がムキになるのは頓珍漢な話
俺を含め解決策が分からない初心者が回答することが間違い

210:名前は開発中のものです。
08/12/06 04:17:22 MshHJhkd
俺もよくわからないけど、>>189

>DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?

と明確に聞いてるぞ。
それを初心者が関係ない知ったか話をしてるとしか見えない。
「俺は平気だよ?」とか言う話もいらないと思うww

>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
毎フレーム更新される数値を表示するって事も多いと思うし。

211:名前は開発中のものです。
08/12/06 06:11:31 VA5mVjgv
ファイナルファンタジーの裏ワザででてくる
数字ゲームとかあれ作ると面白そう

212:名前は開発中のものです。
08/12/06 09:55:12 DCsCuBVu
ブラックジャックといいたまへ

213:名前は開発中のものです。
08/12/06 11:21:34 gOAp6PdO
>>189は「同じ文字列」って書いてるじゃないか。
まあ任意のオフスクリーンバッファに描いてそれを転送したい、というのはわかるが
できる機能を追加するかDXライブラリをやめるしかないのでは。

214:名前は開発中のものです。
08/12/06 16:48:54 KujsLoK9
クリックイベントを使いたいのですがどうすればよいのでしょうか?
公式などにクリックイベントのコードがなかったのでここで質問させてください

215:名前は開発中のものです。
08/12/06 17:16:43 t9JSHoeE
SetWaitVSyncFlagをFalseにしておいて、16666マイクロミリセカンド待機し描画

↑で描画すると30フレームあたりまで落ちるんですが、SetWaitVSyncFlagをFalseにしてても同期するってあるんでしょうか?

待機を16200にすると60フレームになるので、同期でひっかかってるんだと思うのですが……

216:名前は開発中のものです。
08/12/06 17:19:10 KujsLoK9
自己解決しました

217:名前は開発中のものです。
08/12/06 20:30:15 JBa6ugiY
なんだったのよw

218:215
08/12/07 18:55:49 OyZdJ9xq
すいません、こちらも自己解決しました……

219:名前は開発中のものです。
08/12/08 00:25:32 2qR4Oo16
Cの入門書見てる段階なんですが、DXライブラリでのゲーム製作講座を見てみたら、
C言語というより、DXライブラリ言語でのプログラミングという印象を受けました。
DXライブラリを使ってプログラミングする場合は、
Cのほうは入門書を一通り読んだだけの知識でよくて、
あとはDXライブラリの使い方をきちんとやるほうがいいんですよね?

220:名前は開発中のものです。
08/12/08 00:31:03 A0APKyuo
Cも一通りの知識は要るだろうから
平行して勉強しなはれ。

221:名前は開発中のものです。
08/12/08 00:55:25 FYgRMyd9
いやいや
もろCで作ってるよ
printfが絵を表示する関数になるだけ

222:名前は開発中のものです。
08/12/08 03:17:20 tsVxmfWH
>>219
「C言語 = printfやscanf、fopen等の標準関数」だと思ってるんならそれは間違いだ

223:名前は開発中のものです。
08/12/08 03:37:47 ghLgcWkz
>>219
それでいいと思うよー。
Cの文法なんて覚える事少ないし、入門書片手に取り掛かっちゃえば大丈夫。
今後も、プログラミングで何かを作る時、基本的にDXライブラリのような、外部のライブラリの使い方を覚えるって作業が大半になるよ。
入門書に書いてあるstdio.hのprintfみたいな標準関数を覚えるみたいに。

224:名前は開発中のものです。
08/12/08 11:27:49 tq0zLS+0
>>210

>>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
>毎フレーム更新される数値を表示するって事も多いと思うし。

それこそ仕様を見直せとしか言いようがないようなw
毎フレーム更新する数値や文章ならプレイヤーに全文しっかり読ませるためものじゃないだろうし。

225:名前は開発中のものです。
08/12/08 18:07:49 ofH1nP7I
ノベルとかアドベンチャーのサンプルがあるサイト教えてください

226:名前は開発中のものです。
08/12/08 18:55:26 dZklSLE8
公式にあったような気がするが……。

227:名前は開発中のものです。
08/12/08 20:50:58 vtoynrkC
Dxライブラリを使って
60フレーム固定のシューティングを作ろうと思ったんですが

公式をみると「グラフィックがぶれがひどくなる」と書いてあって
URLリンク(homepage2.nifty.com)

で、実際にサンプル試してみたら
確かに時々ひっかかる感じが。

これって改善はできないものなんでしょうか?

228:名前は開発中のものです。
08/12/08 20:56:58 a6vLxw2w
内部の更新処理(当たり判定,posX += vXなど)のフレームレートを倍にするとか

229:名前は開発中のものです。
08/12/09 01:42:49 osPjvukM
>>227
int Time; を
LONGLONG Time; に、

Time = GetNowCount(); を
Time = GetNowHiPerformanceCount(); に

while( GetNowCount() - Time < 17) {} を
while (GetNowHiPerformanceCount() - Time < (1000000 / 60)) {} に

書き換えてみたら?



230:名前は開発中のものです。
08/12/09 13:46:02 uZqK3Qyt
>>224
RPGやアドベンチャーゲームなら
1文字ずつゲーム内Windowに描画され、ゲーム内Windowごと表示非表示を切り替えられるって仕様は普通に有るでしょう

231:名前は開発中のものです。
08/12/09 15:29:12 hNxQdCPd
>>226
文字表示ぐらいしかないと思うけど・・・

232:名前は開発中のものです。
08/12/09 15:52:37 R5xGo07t
サンプルゲームみたいなのでなかったっけ?
前はあったはずなんだが。

233:名前は開発中のものです。
08/12/09 17:32:59 PL50HxGw
「DXライブラリサンプルゲームのダウンロード」のページにある
「スクリプトプレーヤー」の事じゃないかな。


234:名前は開発中のものです。
08/12/09 18:26:23 hNxQdCPd
スクリプトプレーヤーはソースの意味が分からない
いきなりスクリプトのソースみろとか言われてもなにがなにやらって感じ

235:名前は開発中のものです。
08/12/09 19:12:36 PIQiSLzg
サンプル見たいって話を聞くたびに
見てもわかるの?
という疑問が湧く。
同じ動きをするものを自分で書けるくらいの技量がなければ結局読めない気がする。

他人のソース読むのが超苦手で自分で書いた方が早い俺限定の話だが。

236:名前は開発中のものです。
08/12/09 19:35:05 aLvm7Uo6
>>235
アルゴリズムは同程度の技量がないと読めないけど、設計はそんなことないよ。

スクリプトプレイヤーのソース見たけどちょっと酷いな。
マジックナンバー、関数長すぎる、グローバル変数使いまくりetc...
たしかにこれ読めとか言われても俺も困る。


自作2Dライブラリ作ってたんだが、画像系の実装が終了したところで
面倒になってきたんでDXライブラリを使うことにした。おまいらよろしく。

237:名前は開発中のものです。
08/12/09 20:33:33 PIQiSLzg
>>236
ああ確かに設計は読みたいかも。
うまい人のクラス構成とかはみてみたい。

238:名前は開発中のものです。
08/12/09 20:44:39 HfON+uiV
うまい人のコードは,クラスやメソッドの実装にどんどんステップインしていかなくても
表面だけ見れば理解できるよね

239:名前は開発中のものです。
08/12/09 20:59:26 MCEWLRF6
>>228
すいません、内部処理は一定化したかったので・・

>>229
ありがとうございます!
引っかかりが無くなりました。
タイマーの精度の問題だったみたいですね。

240:名前は開発中のものです。
08/12/10 15:43:30 LwDc2Tc0
>>220
>>221
>>222
>>223
printfなどが関数だということを意識していませんでした。
まさに、C言語=標準関数のつもりで勉強していました。
外部ライブラリを使うのだから、それから提供される関数の使い方を勉強するのは当たり前ですね。
プログラミングに対する疑問が少し解けました。どうもありがとうございました。

241:名前は開発中のものです。
08/12/11 09:38:29 oww0q0NN
画像の、ある部分だけを拡大して描画することは出来ますか?
ループ表示する背景の一部分だけを拡大表示したいです。

242:名前は開発中のものです。
08/12/11 10:38:54 qrB4r20j
やった事ないけど、指定領域だけで新しいグラフィックハンドルを作るとかできるはずだから、
それをしてから拡大表示させればいいんじゃないかな。

前提条件として矩形範囲のみって事になるけど。

243:名前は開発中のものです。
08/12/11 11:00:28 oww0q0NN
>>242
なるほど、ありがとうございます。矩形なのでその辺は大丈夫です。
でもアクションゲームみたいに、リアルタイムにバックグラウンドをスクロールさせつつ、
拡大率を変えてバックグラウンド表示するのはその方法ではコストが掛かり過ぎて無理なようですね。
DrawExtendGraphの描画元矩形指定関数があれば一発なのに><

244:名前は開発中のものです。
08/12/11 11:23:00 qrB4r20j
背景をスクロールさせつつ、拡大部分もスクロールさせるのかな。
それじゃ無理だね。

それならいっそ、

背景を普通の大きさで書く → 画面の描画範囲を設定(SetDrawArea) → 背景を拡大して書く

ってやってみるのはどうだろう。
背景を二回描くから、やり方によってはコストかかるけど……。

245:名前は開発中のものです。
08/12/11 12:23:15 Otp3maXe
つDrawRectExtendGraph

246:名前は開発中のものです。
08/12/11 12:49:25 oww0q0NN
>>244
そうですそうです、元画像の一部分を拡大表示したいんです。

>>245
おお!ありがとうございます。そんな関数があったんですねw
面倒でも自分でDxLib.hをチェックしないと駄目ですねw

247:名前は開発中のものです。
08/12/12 18:14:48 dqaLLhhf
今 トルネコやシレンみたいな2Dダンジョン探索ゲームを
800 x 600 ウィンドウモードで作っているんですが
2Dゲームは 640 x 480 が基本だと聞きました。

800x600だと何か不都合でも起こるんでしょうか?

248:名前は開発中のものです。
08/12/12 19:08:10 e0uVhp4S
32x32とか16x16のブロックがぴったり収まらない、とか。?

249:名前は開発中のものです。
08/12/12 20:15:13 dqaLLhhf
画面下と右にブロックが半分だけ表示されるのは我慢しようと思います。
800x600だと特定の環境ではちらつきが酷いとかだったら嫌だなぁと思いまして

250:名前は開発中のものです。
08/12/12 20:24:18 yokHYtBf
>>247
処理速度の問題とユーザの環境の問題
ちなみにカラーモードも256色パレットモードが基本だった
しかしそれは過去の話
今はPCのスペックは十分だし、800*600の画面モードの無いPCの方が少ないと思うから問題ないかと


251:名前は開発中のものです。
08/12/12 21:25:42 aXKygAOw
ちょっと便乗
CRT使いなんでわからないんだけど
液晶の場合、画面サイズに合わない画面モードの表示ってどうなるの?

1)全画面に拡大されてぼやける
2)表示分だけ使われて余白は黒塗りになる

252:名前は開発中のものです。
08/12/12 21:28:59 8ZHcqCMQ
>>251
A.液晶の設定しだい

253:名前は開発中のものです。
08/12/12 22:00:48 J3zydYCS
初心者で悪いんだが質問。

うまく言えないんだけど

player.cpp内でint宣言をして、void player()で増減させる。
そして
「enemy.cpp内」で「player.cppのvoid player()」で増減したint変数を使用して作りたい判定があるんだけど。

こういうのってやっぱり出来ないのかな?


254:名前は開発中のものです。
08/12/12 22:09:20 r3WCUutT
extern

255:名前は開発中のものです。
08/12/12 22:12:35 dqaLLhhf
player.cppでグローバル変数としてint宣言して
enemy.cppの冒頭にextern宣言すれば判定にも使えるようになるよ

256:名前は開発中のものです。
08/12/12 22:19:36 J3zydYCS
>>254-255
ああそれ忘れてたww
おもいっくそ素材ファイルの読み込みで使ってたのに

ありがと、助かった

257:名前は開発中のものです。
08/12/12 22:34:39 ztObze9Y
-- player.cpp --
int i;
void player(){ i += 1; }

-- enemy.cpp --
extern int i;
void enemy(){ if(i) ・・・ ;}

258:名前は開発中のものです。
08/12/12 22:49:50 aXKygAOw
>>252
即レスサンクス。

じゃあプログラムする側としては
あんまり気にしても意味無いんだ・・

勉強になりますた。

259:名前は開発中のものです。
08/12/12 23:04:32 e0uVhp4S
>画面サイズ
最近流行りの低価格ノートPCとかだと、どんな感じなんだろう?
縦600くらい?

260:名前は開発中のものです。
08/12/13 01:45:20 E/1bppJy
if(enemy01_Life < 0){
DeleteGraph( enemy01 ) ;
}
else if(hitS < hit ){
PlaySoundMem( hit_test , DX_PLAYTYPE_BACK );
shotflag = 0;
enemy01_Life -=1;
}

このコードで、最後のenemy01_Life -=1の判定を一回だけ判定場合ってどうすればいいの?
ダメージ判定だけがどうしても残ってしまう

261:名前は開発中のものです。
08/12/13 02:02:18 Swo2xfir
>260
具体的に何がしたいが、何が起こってるのかを示せ。
コードにはコメントを入れろ。第三者には何をやってるか分からない。


んで、だ。
ショットが命中した時、

 (1)ショット自体を消す(敵に当たると弾が消える)
 (2)敵ごとにカウンタを作っておき、「一度当たったら10フレームの間は無敵」とかにする
 (3)弾ごとに自分がどの敵に命中したかを覚えておき、2度目は命中扱いにならないようにする

こんな感じ?

262:名前は開発中のものです。
08/12/13 02:20:00 E/1bppJy
>>261
玉の画像は消えるんだけど、当たり判定だけが「次にショットボタンを押すまで」残るんだ。
何がしたいかは、「玉一つにつき一回だけダメージ判定」をしたい。
ショットコード↓

if( Key & PAD_INPUT_A && shotflag == 0){ //ショットボタンが押されたら
PlaySoundMem( p_shot_se , DX_PLAYTYPE_BACK );//ショット音を鳴らす
shotX = PlayerX ;
shotY = PlayerY ; //プレイヤーの現在位置を取得
shotflag = 1 ; //ショットフラグONにする
}
if( shotflag == 1 ){ //ショットフラグONになったら
shotY -= SHOT_SPEED ;
DrawGraph( shotX+10 , shotY , p_shot_img , TRUE ) ;
if(shotY < SHOT_DELAY){
shotflag = 0 ;
}
}

判定コード↓
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
hit = SizeX/2 ; //グラフィックの当たり判定(半径)
hitX = shotX - enemy01X;
hitY = shotY - enemy01Y; //三角形の斜辺を除くXYの長さ
hitS = sqrt(hitX*hitX+hitY*hitY); //斜辺
if(enemy01_Life < 0){ //敵死亡してる時
DeleteGraph( enemy01 ) ;
}
else if(hitS < hit ){ //(ヒット時)
PlaySoundMem( hit_test , DX_PLAYTYPE_BACK );
shotflag = 0;
enemy01_Life -=1;

263:名前は開発中のものです。
08/12/13 02:39:09 DJ2YFwb1
>>262
判定のコードがifにかかってない

if( shotflag == 1 ){ //ショットフラグONになったら
shotY -= SHOT_SPEED ;
DrawGraph( shotX+10 , shotY , p_shot_img , TRUE ) ;
if(shotY < SHOT_DELAY){
shotflag = 0 ;
}

判定コード↓
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
hit = SizeX/2 ; //グラフィックの当たり判定(半径)
hitX = shotX - enemy01X;
hitY = shotY - enemy01Y; //三角形の斜辺を除くXYの長さ
hitS = sqrt(hitX*hitX+hitY*hitY); //斜辺
if(enemy01_Life < 0){ //敵死亡してる時
DeleteGraph( enemy01 ) ;
}

264:名前は開発中のものです。
08/12/13 02:43:12 DJ2YFwb1
なんか伝わる気がしないから書き方を変えると

if(shotflagが真)
{
  //ここに判定のコードも書く
}

265:名前は開発中のものです。
08/12/13 02:56:17 E/1bppJy
えっと、つまり

ショットコード内で
if( shotflag == 1 ){ //ショットフラグONになったら

この部分に判定コード(>>263のGetGraphSize〜DeleteGraph( enemy01 ) ;)

}

を入れないとダメってこと?

266:名前は開発中のものです。
08/12/13 03:06:51 DJ2YFwb1
そう
shotflagって弾があるかないかのフラグでしょ?
今のままだとshotflagが0の時にも判定される

あといろいろ突っ込みどころがあるけど
そういう書き方してると確実にスパゲティソースになる

267:名前は開発中のものです。
08/12/13 11:56:05 E/1bppJy
>>266
マジかw
プログラム初心者で全然分からんから適当に組んでる
既にややこしくなってる


268:名前は開発中のものです。
08/12/13 12:55:29 6PMqtPt6
動けば結構。
実際に作って慣れればいいのだ。

269:名前は開発中のものです。
08/12/13 13:01:52 E/1bppJy
>>263-264
そのとおりにやってみたけど
やっぱり玉一つで「次にショットボタンが押されるまで」の間に複数回攻撃判定が出ちゃう・・・。



270:名前は開発中のものです。
08/12/13 13:08:45 WaQfNGav
>>267
初心者なら仕方なら、一回スパゲティコード書いて捨てる経験もしてみるといいかもね。
それがいやならオブジェクト指向の簡単な本があるからそれ読んでみるといいよ。
オブジェクト指向とゲームは相性がよい部類。

ためしにオブジェクト指向で書き直してみようかと思ったけど、半分ほど書いた時点で
長くなった上に果たしてこれを理解できるのかという疑問がわいてきたので捨てた^w^)


271:名前は開発中のものです。
08/12/13 13:10:15 WaQfNGav
仕方ならってなんだよOTL 仕方ない、ね

272:名前は開発中のものです。
08/12/13 13:19:00 klDdA96T
OOとゲームって相性いいかなぁ。
素人の俺がいうのもなんだけどむしろ相性はよくない方だと思うけど、経験が足りないからかな?
一応ゲーム作りはDXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど、
C++の便利な機能(クラスや継承程度)を使うくらいでこれぞOOって感じでもないなぁ。
C#でちょっとしたツールなんか作るとOOだなぁって感じるけど。

273:名前は開発中のものです。
08/12/13 13:48:06 WaQfNGav
>>272
ツールを作る件はオブジェクト指向じゃなくて提供されるオブジェクト指向ライブラリが優秀
ってだけだと思う。

>相性はよくない方
どの辺が?ならデータ指向で作る?手続き指向で?俺は絶対いやだけどなー。

パラダイムってのはつまるところコードの整理術なわけで、それを感じないってのは別に
不思議じゃないよ。

さっきでたコード、弾丸と敵との当たり判定がでてきだけど、

int dx = shot->getX() - enemy->getX();
int dy = shot->getY() - enemy->getY();
double distance = sqrt( dx*dx + dy*dy );
if( distance < HIT_SIZE )
{
/*ヒット処理*/
}

って書いてたらお前ちょっと表に出ろだけど、ちゃんとTell, dont ask の原則にのっとって書いたら

if( shot->hitTest( enemy ) )
{
/*ヒット処理*/
}

変更にも強く、なおかつコードはわかりやすくなる。

274:名前は開発中のものです。
08/12/13 17:56:36 E/1bppJy
もー全然できねーよおおおおおおお

いっそコレ仕様にすっか
敵の端っこにショット当てた状態でショットボタンを押さないと一定時間大ダメージ!

画期的と言えば画期的だが生憎ただのバグだ。

275:名前は開発中のものです。
08/12/13 18:54:39 DJ2YFwb1
>>274
今じっくり見たけど
>>262のif( shotflag == 1 )のブロックを>>262の一番最後で閉じるか
else if(hitS < hit )のブロックの中でhitSを条件満たさないように変更する
これで正常になると思うが、違ったらすまそ

276:名前は開発中のものです。
08/12/13 18:56:46 O5bnNqrG
shotflagっていうのは弾の生死状態を管理するフラグなんだから、
弾が生きているときだけ判定をすればいいわけだよね。
>>>264が言う通り当たり判定をするブロックを if ( shotflag == 1 ){}で囲めば出来ると思うんだけどなあ。
弾が死んでても玉の座標は留まって、さらにshotflagが機能していないから(セットが上手く行っていないか判定処理に考慮されていない)
何度も当たっていると思われるんだけど。

てか敵をデタッチするのにDeleteGraph()で画像そのものを削除するって激しすぎないか?w
if ( enemy_alive ) { Task(); } // 敵が生きているときのみ敵に関する処理を行う
とかにした方が良いと思うんだが。

277:名前は開発中のものです。
08/12/13 18:59:29 O5bnNqrG
ごめん、if ( enemy_alive ) → if ( enemy01_Life >= 0 )

278:名前は開発中のものです。
08/12/13 21:59:39 E/1bppJy
>>274だけど、ちょっと検証した
当たり判定は座標で行ってたから

URLリンク(www.uploda.org)

この画像の様に(hit>hitS)になってる時に判定が出て、その判定が次玉を出すときまで残るんだ。
だからこの画像はhitは21でhitSは13.9.....ってなってるので次に玉が出るまで(hitSの数値が変わるまで)凄い勢いでenemy_Lifeが減り続けてる

敵に当たった瞬間にhitSをリセットすればいいのかな?

279:名前は開発中のものです。
08/12/13 22:22:05 O5bnNqrG
もうソースうpしてくれよ

280:名前は開発中のものです。
08/12/13 22:28:29 E/1bppJy
URLリンク(www2.uploda.org)
パスは274

問題のソースはenemy_moveとplayerにあります。

初心者だからすげー読みずらいと思う

281:名前は開発中のものです。
08/12/13 22:30:08 DJ2YFwb1
>>275では解決しなかったか?

282:名前は開発中のものです。
08/12/13 22:32:35 E/1bppJy
>>281
うん、その通りにやってみても何故か結果は変わらずだった

283:名前は開発中のものです。
08/12/13 22:32:46 O5bnNqrG
hitSっていうのは敵と弾との距離でしょ
それは当たり判定をする必要があるとき、
つまり弾と敵が生きているときに毎フレーム計算すればいい
弾の座標を遥か彼方にリセットしたりhitSを直接いじくって
当たり判定が真にならないようにすれば確かに上手く行くだろうけど
本質的には当たり判定をする必要が無いときに判定しているのが問題なんじゃないの?

284:名前は開発中のものです。
08/12/13 22:45:11 E/1bppJy
>>283
毎回計算して判定してるんだけど
ヒットした時に計算が次玉出すときまで止まっちゃう

285:名前は開発中のものです。
08/12/13 22:47:31 O5bnNqrG
>>280
全然修正されてないじゃないかw

「enemy_move.cpp」の
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
の前に一行追加して
if ( shotflag == 1 ){
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
とする。
次に、その下のほうの
int Color ;
の前に閉じ括弧を追加して
}
int Color ;
とする。
つまり、当たり判定をしている部分を
if ( shotflag == 1 ){
}
で括る。

それとインデントをきっちりしないとネストレベルが分からなくなるよ。

286:名前は開発中のものです。
08/12/13 22:53:39 klDdA96T
>>273
んーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、
コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。
もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。

提示してくれた下のコードも、それだけじゃオブジェクト指向を感じない。
結果的に言わんとしようとしてることはわかるけどね。
ただそれだけじゃただのサブルーチン呼び出し。

言いたいのはそのコードだけを見てオブジェクト指向じゃないって事じゃないし、
自分でゲーム作る時もオブジェクト指向で書きたいわけだけど、
概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、
GUIアプリと比べて相性がいい方ではないって事。


287:名前は開発中のものです。
08/12/13 23:05:58 E/1bppJy
>>285
おおおおおおお!!!ありがとおおおおお
一つのライフしか減らないwwwwwww

すげー!ショットフラグがONの時にしか判定しないようにするってそういう事だったのかwww

ちなみにプログラムの書き方?はこんな感じでいいのかな?


288:名前は開発中のものです。
08/12/13 23:22:28 HImZ/jwv
どうでもいいけど定数を#defineで書くのとconstで書くのってどっちがいいのけ?
俺は気持ち悪いからconstでやってるわけだが

289:名前は開発中のものです。
08/12/13 23:33:22 Swo2xfir
>288
・歴史的な経緯とかはあるかも
・特に理由が無ければconstでいいんじゃね?
・defineじゃないと出来ないこと、スマートなこともあるから気をつけろ

290:名前は開発中のものです。
08/12/13 23:34:35 Swo2xfir
>287
とりあえず、何でもいいので1つ完成させてからじゃないと
定番の書き方とかは説明しても意味が無いし、おそらく理解できないと思う。

291:名前は開発中のものです。
08/12/13 23:42:11 MCFYNnvA
#defineは計算式入れられるのがいいな
気を付けないと間違った結果が返ってくるハメになるが

292:名前は開発中のものです。
08/12/14 00:49:54 UsQn7VQk
>>287
おめでとう。お世辞にも綺麗なソースとは言えないけど、
モノとして動いているということはとても大事なこと、すごいことだよ。
作り続けていれば段々上手くなって行くはず。

あと>>285の修正をした段階で、今度は敵の消滅タイミングがおかしくなると思う。
敵のライフが-1になった瞬間には敵は消滅せず、その後自機が弾を発射した瞬間に消滅する、っていう風に。

これを修正するには、敵をデタッチ(殺す)処理をしている部分を移動させればいい。

/* ↓elseは消し、必要なら if ( enemy01_Life >= 0 && hitS < hit ) などとする。しなくても出来るが。
  または if ( shotflag == 1 ) のところに敵の生死チェックを入れる。即ち if ( enemy01_Life >= 0 && shotflag == 1 ) とする。しなくてもでき(ry */
if(hitS < hit ){ //敵の画像と自機の玉を直角三角形結んだ時の斜辺が当たり判定より小さい時(hit!!)
    PlaySoundMem( hit_test , DX_PLAYTYPE_BACK );
    shotflag = 0;
    enemy01_Life -=1;
    if(enemy01_Life < 0){ //敵死亡してる時 /* この3行を */
        DeleteGraph( enemy01 ) ;        /* ここに */
    }                        /* 移動 */
}

まずはインデント(ソースコードの段落処理)から始めよう。

293:名前は開発中のものです。
08/12/14 01:24:21 2jf1rfQx
そこでPythonとrubyの登場ですね

294:名前は開発中のものです。
08/12/14 07:22:24 HIyGZizO
>>286
さっき提示したコードの価値をただのサブルーチン呼び出しとか
言っちゃってる時点でなんかもう全然わかってない。

あれはShotオブジェクトにEnemyとの当たり判定を”頼んで”いるんだよ。
この違いがわからないんならいつまでたっても素人のまま。

というか
>もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。
デリゲートなんか関数型プログラミング言語の概念の拝借だよ。
これがオブジェクト指向!なんてデザインパターンこそがオブジェクト指向!というのと同じくらい笑えるんだが。

>概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、
>GUIアプリと比べて相性がいい方ではないって事。
どこが無理やりなんだよw
さっきのコード、Enemy,Player,Shotというクラスを抽出できるけど、これのどこが無理やりなんだよ。自然だろうに。

それとGUIアプリだって手続き型で書ける。イベントハンドラやデリゲートはオブジェクト指向の一機能を使って
実装されてるけれど、それ自体はオブジェクト指向じゃない。だからVBでもGUIアプリが組めるわけだ。


ここまで言ってゲームをオブジェクト指向で組むのは向いてないと言うならもうしらね
というかもっと勉強してくださいいやマジで

295:名前は開発中のものです。
08/12/14 09:52:32 1zOFBaLD
C#6年やってるんだけど未だにオブジェクト指向わからねえ。
でもゲームとオブジェクト指向は相性いいと思うよ。

296:名前は開発中のものです。
08/12/14 11:03:33 DFScKmBl
イベントを使ってたところをEventListenerとか使ってobserver剥き出しに変更したら
オブジェクト指向になるのか? 実質的に全く等価なのに?
>>294の言うオブジェクト指向って何なんだ

297:名前は開発中のものです。
08/12/14 11:38:14 NFgVN8d3
オブジェクト指向って単純に、人が走っても車が走っても同じ「走る」だ、ってだけじゃねーの

298:名前は開発中のものです。
08/12/14 12:16:50 h39ltAFv
オブジェクト指向って考え方が出る前からプログラム作って遊んでるが
未だにオブジェクト指向が理解できん。
273で言うならちょっと表へ出ろレベル以下だ。

299:名前は開発中のものです。
08/12/14 17:59:02 17g8Fdx4
>>294は釣りだよな?w
突っ込むところが多すぎるww
「ShotオブジェクトにEnemyとの当たり判定を”頼んで”いる」だけでオブジェクト指向とかww

ところで、ゲームをオブジェクト指向で組むのは向いてないって話題は誰がしてるの?してない気がする。。

300:名前は開発中のものです。
08/12/14 18:01:31 17g8Fdx4
>>297
たぶんオブジェクト指向入門書にはそういう概念的な事が書いてあると思うけど、
オブジェクト指向って本当は概念の事じゃないよ。
もっと具体的なプログラミングの事。
「ShotオブジェクトにEnemyとの当たり判定を”頼んで”」も別にオブジェクト指向じゃないww

301:名前は開発中のものです。
08/12/14 18:44:57 CDnr1Yv3
>>300
そうなん?
レシーバか引数が違えばそれは別物だっていう名前空間の概念がまずあって
そいつを楽に実現するための補助がクラスやテンプレートやインターフェースなんだって認識だったが
具体的なプログラミングの事を言うなら言語がクラスベースかどうかで相当違ってくると思うし
あと>>299最後の行は>>272

302:名前は開発中のものです。
08/12/14 18:58:29 AhiFoxCU
構造体に関数がくっついただけのクラスのインスタンスを生成して
それで動かしたらオブジェクト指向。
そう思っている俺が通りますよ。

303:名前は開発中のものです。
08/12/14 19:02:22 ST598Jfh
何もめてんだよ

>>272は基本的に用語を間違っているがそれに気付いていない
で、親切に答えてくれた>>273と会話がかみ合っていない

>>272はVBライクなコンポーネント貼りつけとプロパティ設定での
プログラミングスタイルとオブジェクト指向を混同している
また、Windowsのイベントドリブン構造を言語仕様と勘違いしてる

-まとめ-

Q.DXライブラリを使うとVBでアプリ作るみたいにコンポーネント貼ってプロパティ設定だけでプログラムできますか?
A.できません

Q.イベントドリブンがオブジェクト指向ですよね?
A.違います

Q.イベントドリブンでゲームプログラムは書けますか?
A.書けます

Q.オブジェクト指向でゲームプログラムは書けますか?
A.書けます


304:名前は開発中のものです。
08/12/14 19:18:54 mrF69eoK
ん〜・・・?
>>272
>DXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど
っていうのはDXライブラリ自体がC(非OOPL)で書かれてるけどって意味だろ
>>303こそ勘違いしてるだろ

305:名前は開発中のものです。
08/12/14 19:22:31 17g8Fdx4
厳密に言えばC/C++使ってる時点でピュアなオブジェクト指向は無理だけどな。
メッセージ呼び出しっていう機能はないし、それに似た機能はメソッド呼び出し(=関数呼び出し)でしかないし。
組み込み型もオブジェクトじゃないしいきなりint main(){}で始まるしww

306:名前は開発中のものです。
08/12/14 19:33:16 5menpJL8
幸せって何ですか?

307:名前は開発中のものです。
08/12/14 20:33:18 P8eg6rH1
オブジェクト指向ってそんなに高度な事なの?
それとも人それぞれ考え方が変わるモノなの?

308:名前は開発中のものです。
08/12/14 20:46:29 uHyIUedU
CしかわかんなくてもDirextXゲームプログラムがさっくりできちゃうのがウリの
DXライブラリのスレでオブジェクト指向を熱っぽく語る男の人って……

309:名前は開発中のものです。
08/12/14 21:04:56 SEtb8HBj
        ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    < 厳密に言えばC/C++使ってる時点で
    |      |r┬-|    |        ピュアなオブジェクト指向は無理だけどな。
     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


310:名前は開発中のものです。
08/12/14 21:23:33 a4AnO2Cl
DXライブラリで質問が・・・



あ、スレ間違えました!すみません

311:名前は開発中のものです。
08/12/14 21:47:10 17g8Fdx4
>>309
int main()ってオブジェクト指向的になんなの?www

312:名前は開発中のものです。
08/12/14 22:41:43 ST598Jfh
>>304
何がん〜・・・?だ
そんな事だから

>>286
>んーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、
>コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。

とかマヌケな事を書いてしまうのさ
>>303のまとめでいいんだよ

RADツールと言語の区別もついてない質問に対して、みんなにちゃんと答えてもらってる事をまず理解するべきだな
元々スレ違いだ、感謝こそすれ相手を見下すとか勘違いすぎるんだよww

313:名前は開発中のものです。
08/12/14 23:20:03 17g8Fdx4
なんか常に話がちょいズレの人いるな

314:さらに話がちょいズレの人
08/12/15 00:08:20 JJfbOdAj
>>303には、同意だけど。 OOなんて元の発生が3つぐらいあって、
さらに様々な言語にそれらのOOが混同されながら導入される過程で
どんどんと複雑に入り組んでいってる。
(しかも、良くも悪くも元がProgramming言語における概念だから、
 普通の言葉に意味を汲み出す過程で色々とノイズや過不足が起こる。
さらに、OOAだ、OODだなんだので純粋なOOよりも
とりあえず使える道具としてのOOが今のメインストリームだと思うし。)
だから、結果的には、人によってOOの概念も色々な違いがある。


あと、そんな訳だからと言う訳じゃないがCだって、OOPLは可能。
ただし、言語的なサポートが対応してないから、
様々な工夫をする必要があったりする。
また、逆の意見としても>>305のint main()で始まるからオブジェクト指向じゃない。
ってのもどうかと思う。
OSも含めたアプリケーションをProgramとみるならば、
int main()は、ズバリそのアプリの呼び出しメッセージと見做しても誤解ではないしね。

あと、>>301の言ってる事は別にOOじゃないと思うぞ。
それらは単に多態性とかであって、OOとしてあったら好ましいが、

さらに>>300のプログラミングの概念と具体的なプログラミングが別モノっぽいのも違うんじゃない?
基本アセンブリでやるでもない限りは、プログラムは概念に概念を積み上げた産物だし、
それらの概念を如何につかうか?どのように解釈するか?がプログラミングでしょ。
だからこそ、gotoは悪!!やJavaにはポインタはありません!!みたいな話も出てくるわけでww

315:名前は開発中のものです。
08/12/15 00:20:00 xNu63hXk
俺は別にピュアだか厳密だか理想的だかなOOじゃなくても
それなりに作れてメンテできればいいかな
ピュアなのがいい人はその人が納得する言語なりなんなりを使えばいいし

316:名前は開発中のものです。
08/12/15 00:48:36 syJyrDB+
ついこの前DXライブラリでゲームを作り始めた初心者なんですが。
時間のとり方について質問があります
URLリンク(homepage2.nifty.com)
のサイトを見て時間所得して表示までできたのですが、ボタン(たとえばスペースボタン)を押して時間を最初からやり直すのはどうすればいいでしょうか?(キー入力状態の取得はできています)
日本語わかりずらかったらすいませんm(_ _;)m

317:名前は開発中のものです。
08/12/15 00:52:41 r0Y4Aqo3
int ゲーム内ではこっちを使う;

ゲーム内ではこっちを使う = GetNowCount();
if (ボタンが押された) ゲーム内ではこっちを使う = 0;

318:317
08/12/15 00:57:14 r0Y4Aqo3
間違えた。正しくは
int ゲーム内ではこっちを使う;
int 前にリセットした時間;

int now = GetNowCount();
ゲーム内ではこっちを使う = now - 前にリセットした時間;
if (ボタンが押された) { ゲーム内ではこっちを使う = 0; 前にリセットした時間 = now; }

319:名前は開発中のものです。
08/12/15 05:27:51 dny0TB5O
>>148
いや、スレチでもないぞ。ライブラリ作者の古い作品だから

320:名前は開発中のものです。
08/12/15 11:37:12 gYDVxSnY
>>273
if( shot->hitTest( enemy ) )
{
/*ヒット処理*/
}
って書くとたしかに変更に強くわかりやすくなるけどそれがOOだっていうのは尚早だよ。
hitTest()の中身は結局上と同じ事してるんだから。
だからその部分がOOだって言われるとただのリファクタリング手法でしかない。
もしその部分だけでOOだっていえるならGUIアプリだって
TextBox tb = new TextBox;
list.add(tb);
ほら、同じ。
でも両方ともただオブジェクトを渡してるって事実しかないよ。
それを推しておきながらデリゲートだけじゃOOじゃない!っていうのは横暴だなぁ。
ちなみにVBは今はOOPLだよ。
OOは議論が起きるくらい曖昧なところもあるけど、やっぱりカプセル化・継承・ポリモーフィズムの3つは最低限主張すべきだね。
個人的にはわざわざなんでカプセル化なんてあるのか疑問だけどw(隠蔽や最小の原則なんかは構造化言語からずっとあった)


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4261日前に更新/249 KB
担当:undef