- 1 名前:名前は開発中のものです。 mailto:sage [2008/10/25(土) 17:37:53 ID:BCFbbKco]
- Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、 「DXライブラリ」に関するスレッドです。 DXライブラリの詳細ついては homepage2.nifty.com/natupaji/DxLib/ を参照して頂きたい。 DXライブラリに関するテクニックなどの情報交換などを行う事で、 多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。 過去スレ:DXライブラリ 総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1197468399/
- 237 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 20:33:33 ID:PIQiSLzg]
- >>236
ああ確かに設計は読みたいかも。 うまい人のクラス構成とかはみてみたい。
- 238 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 20:44:39 ID:HfON+uiV]
- うまい人のコードは,クラスやメソッドの実装にどんどんステップインしていかなくても
表面だけ見れば理解できるよね
- 239 名前:名前は開発中のものです。 mailto:sage [2008/12/09(火) 20:59:26 ID:MCEWLRF6]
- >>228
すいません、内部処理は一定化したかったので・・ >>229 ありがとうございます! 引っかかりが無くなりました。 タイマーの精度の問題だったみたいですね。
- 240 名前:名前は開発中のものです。 mailto:sage [2008/12/10(水) 15:43:30 ID:LwDc2Tc0]
- >>220
>>221 >>222 >>223 printfなどが関数だということを意識していませんでした。 まさに、C言語=標準関数のつもりで勉強していました。 外部ライブラリを使うのだから、それから提供される関数の使い方を勉強するのは当たり前ですね。 プログラミングに対する疑問が少し解けました。どうもありがとうございました。
- 241 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 09:38:29 ID:oww0q0NN]
- 画像の、ある部分だけを拡大して描画することは出来ますか?
ループ表示する背景の一部分だけを拡大表示したいです。
- 242 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 10:38:54 ID:qrB4r20j]
- やった事ないけど、指定領域だけで新しいグラフィックハンドルを作るとかできるはずだから、
それをしてから拡大表示させればいいんじゃないかな。 前提条件として矩形範囲のみって事になるけど。
- 243 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 11:00:28 ID:oww0q0NN]
- >>242
なるほど、ありがとうございます。矩形なのでその辺は大丈夫です。 でもアクションゲームみたいに、リアルタイムにバックグラウンドをスクロールさせつつ、 拡大率を変えてバックグラウンド表示するのはその方法ではコストが掛かり過ぎて無理なようですね。 DrawExtendGraphの描画元矩形指定関数があれば一発なのに><
- 244 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 11:23:00 ID:qrB4r20j]
- 背景をスクロールさせつつ、拡大部分もスクロールさせるのかな。
それじゃ無理だね。 それならいっそ、 背景を普通の大きさで書く → 画面の描画範囲を設定(SetDrawArea) → 背景を拡大して書く ってやってみるのはどうだろう。 背景を二回描くから、やり方によってはコストかかるけど……。
- 245 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 12:23:15 ID:Otp3maXe]
- つDrawRectExtendGraph
- 246 名前:名前は開発中のものです。 mailto:sage [2008/12/11(木) 12:49:25 ID:oww0q0NN]
- >>244
そうですそうです、元画像の一部分を拡大表示したいんです。 >>245 おお!ありがとうございます。そんな関数があったんですねw 面倒でも自分でDxLib.hをチェックしないと駄目ですねw
- 247 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 18:14:48 ID:dqaLLhhf]
- 今 トルネコやシレンみたいな2Dダンジョン探索ゲームを
800 x 600 ウィンドウモードで作っているんですが 2Dゲームは 640 x 480 が基本だと聞きました。 800x600だと何か不都合でも起こるんでしょうか?
- 248 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 19:08:10 ID:e0uVhp4S]
- 32x32とか16x16のブロックがぴったり収まらない、とか。?
- 249 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 20:15:13 ID:dqaLLhhf]
- 画面下と右にブロックが半分だけ表示されるのは我慢しようと思います。
800x600だと特定の環境ではちらつきが酷いとかだったら嫌だなぁと思いまして
- 250 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 20:24:18 ID:yokHYtBf]
- >>247
処理速度の問題とユーザの環境の問題 ちなみにカラーモードも256色パレットモードが基本だった しかしそれは過去の話 今はPCのスペックは十分だし、800*600の画面モードの無いPCの方が少ないと思うから問題ないかと
- 251 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 21:25:42 ID:aXKygAOw]
- ちょっと便乗
CRT使いなんでわからないんだけど 液晶の場合、画面サイズに合わない画面モードの表示ってどうなるの? 1)全画面に拡大されてぼやける 2)表示分だけ使われて余白は黒塗りになる
- 252 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 21:28:59 ID:8ZHcqCMQ]
- >>251
A.液晶の設定しだい
- 253 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:00:48 ID:J3zydYCS]
- 初心者で悪いんだが質問。
うまく言えないんだけど player.cpp内でint宣言をして、void player()で増減させる。 そして 「enemy.cpp内」で「player.cppのvoid player()」で増減したint変数を使用して作りたい判定があるんだけど。 こういうのってやっぱり出来ないのかな?
- 254 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:09:20 ID:r3WCUutT]
- extern
- 255 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:12:35 ID:dqaLLhhf]
- player.cppでグローバル変数としてint宣言して
enemy.cppの冒頭にextern宣言すれば判定にも使えるようになるよ
- 256 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:19:36 ID:J3zydYCS]
- >>254-255
ああそれ忘れてたww おもいっくそ素材ファイルの読み込みで使ってたのに ありがと、助かった
- 257 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:34:39 ID:ztObze9Y]
- -- player.cpp --
int i; void player(){ i += 1; } -- enemy.cpp -- extern int i; void enemy(){ if(i) ・・・ ;}
- 258 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 22:49:50 ID:aXKygAOw]
- >>252
即レスサンクス。 じゃあプログラムする側としては あんまり気にしても意味無いんだ・・ 勉強になりますた。
- 259 名前:名前は開発中のものです。 mailto:sage [2008/12/12(金) 23:04:32 ID:e0uVhp4S]
- >画面サイズ
最近流行りの低価格ノートPCとかだと、どんな感じなんだろう? 縦600くらい?
- 260 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 01:45:20 ID: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 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 02:02:18 ID:Swo2xfir]
- >260
具体的に何がしたいが、何が起こってるのかを示せ。 コードにはコメントを入れろ。第三者には何をやってるか分からない。 んで、だ。 ショットが命中した時、 (1)ショット自体を消す(敵に当たると弾が消える) (2)敵ごとにカウンタを作っておき、「一度当たったら10フレームの間は無敵」とかにする (3)弾ごとに自分がどの敵に命中したかを覚えておき、2度目は命中扱いにならないようにする こんな感じ?
- 262 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 02:20:00 ID: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 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 02:39:09 ID: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 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 02:43:12 ID:DJ2YFwb1]
- なんか伝わる気がしないから書き方を変えると
if(shotflagが真) { //ここに判定のコードも書く }
- 265 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 02:56:17 ID:E/1bppJy]
- えっと、つまり
ショットコード内で if( shotflag == 1 ){ //ショットフラグONになったら この部分に判定コード(>>263のGetGraphSize〜DeleteGraph( enemy01 ) ;) } を入れないとダメってこと?
- 266 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 03:06:51 ID:DJ2YFwb1]
- そう
shotflagって弾があるかないかのフラグでしょ? 今のままだとshotflagが0の時にも判定される あといろいろ突っ込みどころがあるけど そういう書き方してると確実にスパゲティソースになる
- 267 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 11:56:05 ID:E/1bppJy]
- >>266
マジかw プログラム初心者で全然分からんから適当に組んでる 既にややこしくなってる
- 268 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 12:55:29 ID:6PMqtPt6]
- 動けば結構。
実際に作って慣れればいいのだ。
- 269 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 13:01:52 ID:E/1bppJy]
- >>263-264
そのとおりにやってみたけど やっぱり玉一つで「次にショットボタンが押されるまで」の間に複数回攻撃判定が出ちゃう・・・。
- 270 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 13:08:45 ID:WaQfNGav]
- >>267
初心者なら仕方なら、一回スパゲティコード書いて捨てる経験もしてみるといいかもね。 それがいやならオブジェクト指向の簡単な本があるからそれ読んでみるといいよ。 オブジェクト指向とゲームは相性がよい部類。 ためしにオブジェクト指向で書き直してみようかと思ったけど、半分ほど書いた時点で 長くなった上に果たしてこれを理解できるのかという疑問がわいてきたので捨てた^w^)
- 271 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 13:10:15 ID:WaQfNGav]
- 仕方ならってなんだよOTL 仕方ない、ね
- 272 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 13:19:00 ID:klDdA96T]
- OOとゲームって相性いいかなぁ。
素人の俺がいうのもなんだけどむしろ相性はよくない方だと思うけど、経験が足りないからかな? 一応ゲーム作りはDXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど、 C++の便利な機能(クラスや継承程度)を使うくらいでこれぞOOって感じでもないなぁ。 C#でちょっとしたツールなんか作るとOOだなぁって感じるけど。
- 273 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 13:48:06 ID: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 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 17:56:36 ID:E/1bppJy]
- もー全然できねーよおおおおおおお
いっそコレ仕様にすっか 敵の端っこにショット当てた状態でショットボタンを押さないと一定時間大ダメージ! 画期的と言えば画期的だが生憎ただのバグだ。
- 275 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 18:54:39 ID:DJ2YFwb1]
- >>274
今じっくり見たけど >>262のif( shotflag == 1 )のブロックを>>262の一番最後で閉じるか else if(hitS < hit )のブロックの中でhitSを条件満たさないように変更する これで正常になると思うが、違ったらすまそ
- 276 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 18:56:46 ID:O5bnNqrG]
- shotflagっていうのは弾の生死状態を管理するフラグなんだから、
弾が生きているときだけ判定をすればいいわけだよね。 >>>264が言う通り当たり判定をするブロックを if ( shotflag == 1 ){}で囲めば出来ると思うんだけどなあ。 弾が死んでても玉の座標は留まって、さらにshotflagが機能していないから(セットが上手く行っていないか判定処理に考慮されていない) 何度も当たっていると思われるんだけど。 てか敵をデタッチするのにDeleteGraph()で画像そのものを削除するって激しすぎないか?w if ( enemy_alive ) { Task(); } // 敵が生きているときのみ敵に関する処理を行う とかにした方が良いと思うんだが。
- 277 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 18:59:29 ID:O5bnNqrG]
- ごめん、if ( enemy_alive ) → if ( enemy01_Life >= 0 )
- 278 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 21:59:39 ID:E/1bppJy]
- >>274だけど、ちょっと検証した
当たり判定は座標で行ってたから www.uploda.org/uporg1853070.jpg この画像の様に(hit>hitS)になってる時に判定が出て、その判定が次玉を出すときまで残るんだ。 だからこの画像はhitは21でhitSは13.9.....ってなってるので次に玉が出るまで(hitSの数値が変わるまで)凄い勢いでenemy_Lifeが減り続けてる 敵に当たった瞬間にhitSをリセットすればいいのかな?
- 279 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:22:05 ID:O5bnNqrG]
- もうソースうpしてくれよ
- 280 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:28:29 ID:E/1bppJy]
- www2.uploda.org/uporg1853197.zip.html
パスは274 問題のソースはenemy_moveとplayerにあります。 初心者だからすげー読みずらいと思う
- 281 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:30:08 ID:DJ2YFwb1]
- >>275では解決しなかったか?
- 282 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:32:35 ID:E/1bppJy]
- >>281
うん、その通りにやってみても何故か結果は変わらずだった
- 283 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:32:46 ID:O5bnNqrG]
- hitSっていうのは敵と弾との距離でしょ
それは当たり判定をする必要があるとき、 つまり弾と敵が生きているときに毎フレーム計算すればいい 弾の座標を遥か彼方にリセットしたりhitSを直接いじくって 当たり判定が真にならないようにすれば確かに上手く行くだろうけど 本質的には当たり判定をする必要が無いときに判定しているのが問題なんじゃないの?
- 284 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:45:11 ID:E/1bppJy]
- >>283
毎回計算して判定してるんだけど ヒットした時に計算が次玉出すときまで止まっちゃう
- 285 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:47:31 ID: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 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 22:53:39 ID:klDdA96T]
- >>273
んーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、 コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。 もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。 提示してくれた下のコードも、それだけじゃオブジェクト指向を感じない。 結果的に言わんとしようとしてることはわかるけどね。 ただそれだけじゃただのサブルーチン呼び出し。 言いたいのはそのコードだけを見てオブジェクト指向じゃないって事じゃないし、 自分でゲーム作る時もオブジェクト指向で書きたいわけだけど、 概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、 GUIアプリと比べて相性がいい方ではないって事。
- 287 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 23:05:58 ID:E/1bppJy]
- >>285
おおおおおおお!!!ありがとおおおおお 一つのライフしか減らないwwwwwww すげー!ショットフラグがONの時にしか判定しないようにするってそういう事だったのかwww ちなみにプログラムの書き方?はこんな感じでいいのかな?
- 288 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 23:22:28 ID:HImZ/jwv]
- どうでもいいけど定数を#defineで書くのとconstで書くのってどっちがいいのけ?
俺は気持ち悪いからconstでやってるわけだが
- 289 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 23:33:22 ID:Swo2xfir]
- >288
・歴史的な経緯とかはあるかも ・特に理由が無ければconstでいいんじゃね? ・defineじゃないと出来ないこと、スマートなこともあるから気をつけろ
- 290 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 23:34:35 ID:Swo2xfir]
- >287
とりあえず、何でもいいので1つ完成させてからじゃないと 定番の書き方とかは説明しても意味が無いし、おそらく理解できないと思う。
- 291 名前:名前は開発中のものです。 mailto:sage [2008/12/13(土) 23:42:11 ID:MCFYNnvA]
- #defineは計算式入れられるのがいいな
気を付けないと間違った結果が返ってくるハメになるが
- 292 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 00:49:54 ID: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 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 01:24:21 ID:2jf1rfQx]
- そこでPythonとrubyの登場ですね
- 294 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 07:22:24 ID:HIyGZizO]
- >>286
さっき提示したコードの価値をただのサブルーチン呼び出しとか 言っちゃってる時点でなんかもう全然わかってない。 あれはShotオブジェクトにEnemyとの当たり判定を”頼んで”いるんだよ。 この違いがわからないんならいつまでたっても素人のまま。 というか >もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。 デリゲートなんか関数型プログラミング言語の概念の拝借だよ。 これがオブジェクト指向!なんてデザインパターンこそがオブジェクト指向!というのと同じくらい笑えるんだが。 >概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、 >GUIアプリと比べて相性がいい方ではないって事。 どこが無理やりなんだよw さっきのコード、Enemy,Player,Shotというクラスを抽出できるけど、これのどこが無理やりなんだよ。自然だろうに。 それとGUIアプリだって手続き型で書ける。イベントハンドラやデリゲートはオブジェクト指向の一機能を使って 実装されてるけれど、それ自体はオブジェクト指向じゃない。だからVBでもGUIアプリが組めるわけだ。 ここまで言ってゲームをオブジェクト指向で組むのは向いてないと言うならもうしらね というかもっと勉強してくださいいやマジで
- 295 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 09:52:32 ID:1zOFBaLD]
- C#6年やってるんだけど未だにオブジェクト指向わからねえ。
でもゲームとオブジェクト指向は相性いいと思うよ。
- 296 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 11:03:33 ID:DFScKmBl]
- イベントを使ってたところをEventListenerとか使ってobserver剥き出しに変更したら
オブジェクト指向になるのか? 実質的に全く等価なのに? >>294の言うオブジェクト指向って何なんだ
- 297 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 11:38:14 ID:NFgVN8d3]
- オブジェクト指向って単純に、人が走っても車が走っても同じ「走る」だ、ってだけじゃねーの
- 298 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 12:16:50 ID:h39ltAFv]
- オブジェクト指向って考え方が出る前からプログラム作って遊んでるが
未だにオブジェクト指向が理解できん。 273で言うならちょっと表へ出ろレベル以下だ。
- 299 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 17:59:02 ID:17g8Fdx4]
- >>294は釣りだよな?w
突っ込むところが多すぎるww 「ShotオブジェクトにEnemyとの当たり判定を”頼んで”いる」だけでオブジェクト指向とかww ところで、ゲームをオブジェクト指向で組むのは向いてないって話題は誰がしてるの?してない気がする。。
- 300 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 18:01:31 ID:17g8Fdx4]
- >>297
たぶんオブジェクト指向入門書にはそういう概念的な事が書いてあると思うけど、 オブジェクト指向って本当は概念の事じゃないよ。 もっと具体的なプログラミングの事。 「ShotオブジェクトにEnemyとの当たり判定を”頼んで”」も別にオブジェクト指向じゃないww
- 301 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 18:44:57 ID:CDnr1Yv3]
- >>300
そうなん? レシーバか引数が違えばそれは別物だっていう名前空間の概念がまずあって そいつを楽に実現するための補助がクラスやテンプレートやインターフェースなんだって認識だったが 具体的なプログラミングの事を言うなら言語がクラスベースかどうかで相当違ってくると思うし あと>>299最後の行は>>272
- 302 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 18:58:29 ID:AhiFoxCU]
- 構造体に関数がくっついただけのクラスのインスタンスを生成して
それで動かしたらオブジェクト指向。 そう思っている俺が通りますよ。
- 303 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 19:02:22 ID:ST598Jfh]
- 何もめてんだよ
>>272は基本的に用語を間違っているがそれに気付いていない で、親切に答えてくれた>>273と会話がかみ合っていない >>272はVBライクなコンポーネント貼りつけとプロパティ設定での プログラミングスタイルとオブジェクト指向を混同している また、Windowsのイベントドリブン構造を言語仕様と勘違いしてる -まとめ- Q.DXライブラリを使うとVBでアプリ作るみたいにコンポーネント貼ってプロパティ設定だけでプログラムできますか? A.できません Q.イベントドリブンがオブジェクト指向ですよね? A.違います Q.イベントドリブンでゲームプログラムは書けますか? A.書けます Q.オブジェクト指向でゲームプログラムは書けますか? A.書けます
- 304 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 19:18:54 ID:mrF69eoK]
- ん〜・・・?
>>272の >DXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど っていうのはDXライブラリ自体がC(非OOPL)で書かれてるけどって意味だろ >>303こそ勘違いしてるだろ
- 305 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 19:22:31 ID:17g8Fdx4]
- 厳密に言えばC/C++使ってる時点でピュアなオブジェクト指向は無理だけどな。
メッセージ呼び出しっていう機能はないし、それに似た機能はメソッド呼び出し(=関数呼び出し)でしかないし。 組み込み型もオブジェクトじゃないしいきなりint main(){}で始まるしww
- 306 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 19:33:16 ID:5menpJL8]
- 幸せって何ですか?
- 307 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 20:33:18 ID:P8eg6rH1]
- オブジェクト指向ってそんなに高度な事なの?
それとも人それぞれ考え方が変わるモノなの?
- 308 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 20:46:29 ID:uHyIUedU]
- CしかわかんなくてもDirextXゲームプログラムがさっくりできちゃうのがウリの
DXライブラリのスレでオブジェクト指向を熱っぽく語る男の人って……
- 309 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 21:04:56 ID:SEtb8HBj]
- ____
/ \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ < 厳密に言えばC/C++使ってる時点で | |r┬-| | ピュアなオブジェクト指向は無理だけどな。 \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒)) ____ /_ノ ヽ、_\ ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ /⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒) | / / / |r┬-| | (⌒)/ / / // だっておwwwww | :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) / ヽ / `ー'´ ヽ / / バ | | l||l 从人 l||l l||l 从人 l||l バ ン ヽ -一''''''"~~``'ー--、 -一'''''''ー-、 ン ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
- 310 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 21:23:33 ID:a4AnO2Cl]
- DXライブラリで質問が・・・
あ、スレ間違えました!すみません
- 311 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 21:47:10 ID:17g8Fdx4]
- >>309
int main()ってオブジェクト指向的になんなの?www
- 312 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 22:41:43 ID:ST598Jfh]
- >>304
何がん〜・・・?だ そんな事だから >>286 >んーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、 >コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。 とかマヌケな事を書いてしまうのさ >>303のまとめでいいんだよ RADツールと言語の区別もついてない質問に対して、みんなにちゃんと答えてもらってる事をまず理解するべきだな 元々スレ違いだ、感謝こそすれ相手を見下すとか勘違いすぎるんだよww
- 313 名前:名前は開発中のものです。 mailto:sage [2008/12/14(日) 23:20:03 ID:17g8Fdx4]
- なんか常に話がちょいズレの人いるな
- 314 名前:さらに話がちょいズレの人 mailto:sage [2008/12/15(月) 00:08:20 ID: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 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 00:20:00 ID:xNu63hXk]
- 俺は別にピュアだか厳密だか理想的だかなOOじゃなくても
それなりに作れてメンテできればいいかな ピュアなのがいい人はその人が納得する言語なりなんなりを使えばいいし
- 316 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 00:48:36 ID:syJyrDB+]
- ついこの前DXライブラリでゲームを作り始めた初心者なんですが。
時間のとり方について質問があります ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_other.html#R7N1 のサイトを見て時間所得して表示までできたのですが、ボタン(たとえばスペースボタン)を押して時間を最初からやり直すのはどうすればいいでしょうか?(キー入力状態の取得はできています) 日本語わかりずらかったらすいませんm(_ _;)m
- 317 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 00:52:41 ID:r0Y4Aqo3]
- int ゲーム内ではこっちを使う;
ゲーム内ではこっちを使う = GetNowCount(); if (ボタンが押された) ゲーム内ではこっちを使う = 0;
- 318 名前:317 mailto:sage [2008/12/15(月) 00:57:14 ID:r0Y4Aqo3]
- 間違えた。正しくは
int ゲーム内ではこっちを使う; int 前にリセットした時間; int now = GetNowCount(); ゲーム内ではこっちを使う = now - 前にリセットした時間; if (ボタンが押された) { ゲーム内ではこっちを使う = 0; 前にリセットした時間 = now; }
- 319 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 05:27:51 ID:dny0TB5O]
- >>148
いや、スレチでもないぞ。ライブラリ作者の古い作品だから
- 320 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 11:37:12 ID:gYDVxSnY]
- >>273
if( shot->hitTest( enemy ) ) { /*ヒット処理*/ } って書くとたしかに変更に強くわかりやすくなるけどそれがOOだっていうのは尚早だよ。 hitTest()の中身は結局上と同じ事してるんだから。 だからその部分がOOだって言われるとただのリファクタリング手法でしかない。 もしその部分だけでOOだっていえるならGUIアプリだって TextBox tb = new TextBox; list.add(tb); ほら、同じ。 でも両方ともただオブジェクトを渡してるって事実しかないよ。 それを推しておきながらデリゲートだけじゃOOじゃない!っていうのは横暴だなぁ。 ちなみにVBは今はOOPLだよ。 OOは議論が起きるくらい曖昧なところもあるけど、やっぱりカプセル化・継承・ポリモーフィズムの3つは最低限主張すべきだね。 個人的にはわざわざなんでカプセル化なんてあるのか疑問だけどw(隠蔽や最小の原則なんかは構造化言語からずっとあった)
- 321 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 11:46:55 ID:gYDVxSnY]
- >>303
煽るわけじゃないけど流れを読んできてなんでいきなりWindowsのイベントドリブンが出てくるのかなって思ったんだけど、 きっと>>305のメッセージ呼び出し機能って言葉からそう思ったのかな? たしかにイベントドリブンもメッセージっていうけどOOのメッセージっていうのは全く別物だよ。 純粋なOOPL(Smalltalkなど)ではメッセージ機能っていうのがあるんだ。 メソッド呼び出しに似てるけどちょっと違う。 C++ではメンバ関数、Javaではメソッド呼び出しで実現してるけどね。 詳しくは自分で調べてみて。
- 322 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 13:36:35 ID:Mi5wQEEl]
- >>321
>>286 >コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。 >もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。 いや、Windowsのイベントドリブン構造の事だ 読めばわかる
- 323 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 17:20:30 ID:k3xYLtfr]
- オブジェクト指向は僕達の心の中にあります
- 324 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 18:27:06 ID:VbZykIE5]
- 俺の中でオブジェクトっつったらスプライトの事だ!
- 325 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 20:55:40 ID:0kk0L8Su]
- じゃあ俺は、この形。
int WINAPI WinMain(うんたらかんたら〜){ Application App; App.Run(); return 0; } Applicationのインスタンスが生成されてる間はアプリが生きてる。 App破棄と同時にアプリも終了する、この形がいちばん美しいと思う。
- 326 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 21:40:30 ID:fyQ9eFTJ]
- >>325
シングルスレッドであれば、確かに良いアイディアだと思う。
- 327 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 21:43:08 ID:WW1gkqvT]
- そこまでやる必要あるか?
- 328 名前:名前は開発中のものです。 mailto:sage [2008/12/15(月) 23:22:35 ID:A6pVWDv7]
- >>326
中でタスクマネージャー的なものでCPU毎に負荷分散させているかもしれんぞ?
- 329 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 00:20:42 ID:fzHt/ZSS]
- >>325のやりかたにどこかまずいところあるの?
- 330 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 00:26:55 ID:JBSSxUHl]
- >>324
用語が適当すぎるよな。 メモリを占拠した実体→「オブジェクト」 コンパイルして出来るファイル→「オブジェクト」 自分自身で処理させる論理機構→「オブジェクト」 名前付けたやつちょっとツラ貸せっていうか 昔、書籍読んだときさっぱり意味わからんかったぜ・・
- 331 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 00:44:36 ID:o3pFEybH]
- メモリを占拠した実体ってインスタンスのこと?
- 332 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 01:58:01 ID:r2TMQqJU]
- 変数じゃないの?変数もオブジェクトだよね
- 333 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 04:02:55 ID:dNyohwYS]
- >324はもっと誉められていいと思う
- 334 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 11:37:43 ID:IA9CyF+N]
- 昔読んだ本には、OOPは
オブエクとは「物」と訳される。曖昧さの象徴である。 頭の中でイメージしなさい。 物と呼ばれる、段ボール箱「みかん箱」がたくさんある。 みかん箱の中身は隠されている、知らなくて良い。 みかん箱を紐で結ぶ事が「プログラム」である。 みかん箱には切替スイッチが付いている、それで位置、色、大きさが変化する。 みかん箱が「オブジェクト」である。
- 335 名前:名前は開発中のものです。 mailto:sage [2008/12/16(火) 14:57:03 ID:j+OyGE8J]
- 基本的にOOやマイノリティ言語のウンチクや自分語りはスレ違いだな
- 336 名前:名前は開発中のものです。 mailto:sage [2008/12/17(水) 01:37:25 ID:SDA7SaR9]
- >>334
簡単に言うと バカでも切り替えスイッチをポチって押せば変化する事が出来る。 けどその変化する「仕組み」を理解する必要は無い。 って事? オブジェクト指向あんまよく分からないけど、そうなると定数#defineって簡単なオブジェクト指向に入るの? 例えば #define SPEED 25//数値を変えると速度が変えられます。 ってあったら数字を変えるだけで変化が実装できるし。 なんか違うかw
- 337 名前:名前は開発中のものです。 mailto:sage [2008/12/17(水) 02:09:42 ID:adQIUXL6]
- >>336
それだけだとただのブラックボックス化。 OOの一部ではあるけどCの関数だってブラックボックスでしょ?
|

|