DXライブラリ 総合スレッド 2008
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/10/25(土) 17:37:53ID:BCFbbKcoGUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリの詳細ついては
http://homepage2.nifty.com/natupaji/DxLib/
を参照して頂きたい。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
過去スレ:DXライブラリ 総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
0192189
2008/12/03(水) 17:18:45ID:ecRDRm37お返事遅くなって申し訳ありません。
当方の環境ではDrawStringでやった場合のFPSが30くらいでDrawGraphにすると60になりました。
DirectX自体、文字描画にGDIを使っているのでビデオカードで処理できるBitBltの方が高速だと思っていました。数年前の知識ですが。。
低スペックでも快適に動くように作りたいので、DrawStringは極力使いたくないです。
0193189
2008/12/03(水) 17:29:14ID:ecRDRm370194名前は開発中のものです。
2008/12/03(水) 18:07:17ID:o+fnXJLeそれともPC環境が悪すぎる?
俺普通にDrawString使ってるけど別に遅くなった事ないよ?
普通に60FPS出てる。古いノートパソコンで。
最高でまぁ10行程度の表示しかしてないけど。
0195名前は開発中のものです。
2008/12/03(水) 18:30:58ID:JlppSG1I192の知識通り、今も文字列表示は遅いよ。
189の方法が適切だと思うし、他に方法を提示できないのは申し訳ないけど、
少なくとも文字列表示が遅いって前提でレスされると無駄だと思ったので口を出してみた。
0196名前は開発中のものです。
2008/12/03(水) 18:37:18ID:JlppSG1I○少なくとも文字列表示が遅いって前提を否定するレスは無駄だと
0197名前は開発中のものです。
2008/12/03(水) 19:17:52ID:o+fnXJLe別にテストしたわけじゃなくて、普通に使ってるだけなんだが。
文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。
グラフィック表示が遅いから他の方法はありますか? って質問があったとしたら
まず現在どういう環境でどれだけのグラフィックをどういう方法で表示させてるのか教えろってのは普通の流れだろ?
そこをかっとばしてグラフィック表示処理そのものを早くする方法を考えるのは無駄な話だ。
0198名前は開発中のものです。
2008/12/03(水) 19:27:15ID:zxrZF3eH今与えられた情報だけではなんともいえんな
0199名前は開発中のものです。
2008/12/03(水) 19:41:02ID:RJPTfL79「フォントの変更は行っていない」というのが、フォントの大きさやアンチエイリアス有無の変更は行っているかもしれないとも読める。
0200名前は開発中のものです。
2008/12/04(木) 00:31:01ID:jlPFeEOB文字列表示はグラフィック表示より遅いって常識知らないの?
そこは議論の余地なしだから言ったまで。
それと、テストじゃないなら>>194の報告は不適切。
まあ上記の前提を知らなかった故だからしかたないと言えばしかたないが、ややこしくなるのでなかったほうがよかったな。
情報は少ないが、前提を知っているば容易に共感できるし、解決方法を知っている人ならこの情報量でも回答できるかもしれない。
0201名前は開発中のものです。
2008/12/04(木) 00:33:46ID:GF73/yq8>文字列表示が遅いってのが前提なら、そもそもグラフィック表示だって遅いだろ。
(;^ω^)
0202名前は開発中のものです。
2008/12/04(木) 02:05:10ID:z7drhJqcDXライブラリは文字を描画する前にテクスチャにキャッシュしてるから
同じ文字なら2回目以降はほぼDrawGraphと同じコストで処理は完了する
キャッシュ用のテクスチャは512x512だから画面一杯に異なった文字を
描画するくらいしない限りは文字列描画特有の遅さは発生しないぞ
まあ、毎フレームキャッシュに無い文字を描画したら一般に言うところの
「文字列表示が遅い」ってのに当てはまるけど
0203名前は開発中のものです。
2008/12/04(木) 09:46:46ID:ggjOtlxcみなぎってきた、学校でゲーム作ってくる
0204名前は開発中のものです。
2008/12/04(木) 10:33:56ID:763fKCgi何を言ってるんだ君は。
60FPSで動いてるゲームに、一回のDrawString処理を追加しただけで30FPSにまで落ちたりするか?
普通はしないだろ?
じゃあどういう処理にしてるんだ? っつーレベルの話だぞ?
192が出してる情報はその程度って事。
0205名前は開発中のものです。
2008/12/04(木) 12:47:01ID:GF73/yq8>>202
分からない(・∀・)カエレ!!
0206名前は開発中のものです。
2008/12/05(金) 18:06:46ID:YY5q+8z/どれのことなのでしょうか?
一部のPCだと動かなかったりする時にこれを使えばいいらしいのですが……。
リファレンスを見た限りそれっぽいのがありませんでした。
0207名前は開発中のものです。
2008/12/05(金) 18:19:39ID:MN0oAg79ttp://www.dkut.flnet.org/dxlibwiki/?3D%B5%A1%C7%BD%A4%F2%BB%C8%A4%A6%A4%AB%A4%C9%A4%A6%A4%AB%A4%F2%A5%E6%A1%BC%A5%B6%A1%BC%A4%CB%C1%AA%C2%F2%A4%B5%A4%BB%A4%EB
0208名前は開発中のものです。
2008/12/05(金) 20:49:20ID:YY5q+8z/ありがとうございます。
SetScreenMemToVramFlag( FALSE );
と、
SetUse3DFlag( FALSE );
を使ったらよさそうなのでこの二つを使ってみようと思います。
0209名前は開発中のものです。
2008/12/06(土) 03:56:27ID:5bnbt+Lt垂直同期を使って処理していれば僅かな処理の遅さでFPSは半分になることがある
そしてGDIは遅い
>>189はDrawStringを使用せずに同等の文字描画処理をする方法を模索しているであって
デバッグをしてくれと言っているわけじゃないんだから君がムキになるのは頓珍漢な話
俺を含め解決策が分からない初心者が回答することが間違い
0210名前は開発中のものです。
2008/12/06(土) 04:17:22ID:MshHJhkd>DXライブラリでは作成したサーフェスに直接描画出来ないのでしょうか?
と明確に聞いてるぞ。
それを初心者が関係ない知ったか話をしてるとしか見えない。
「俺は平気だよ?」とか言う話もいらないと思うww
>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
毎フレーム更新される数値を表示するって事も多いと思うし。
0211名前は開発中のものです。
2008/12/06(土) 06:11:31ID:VA5mVjgv数字ゲームとかあれ作ると面白そう
0212名前は開発中のものです。
2008/12/06(土) 09:55:12ID:DCsCuBVu0213名前は開発中のものです。
2008/12/06(土) 11:21:34ID:gOAp6PdOまあ任意のオフスクリーンバッファに描いてそれを転送したい、というのはわかるが
できる機能を追加するかDXライブラリをやめるしかないのでは。
0214名前は開発中のものです。
2008/12/06(土) 16:48:54ID:KujsLoK9公式などにクリックイベントのコードがなかったのでここで質問させてください
0215名前は開発中のものです。
2008/12/06(土) 17:16:43ID:t9JSHoeE↑で描画すると30フレームあたりまで落ちるんですが、SetWaitVSyncFlagをFalseにしてても同期するってあるんでしょうか?
待機を16200にすると60フレームになるので、同期でひっかかってるんだと思うのですが……
0216名前は開発中のものです。
2008/12/06(土) 17:19:10ID:KujsLoK90217名前は開発中のものです。
2008/12/06(土) 20:30:15ID:JBa6ugiY0218215
2008/12/07(日) 18:55:49ID:OyZdJ9xq0219名前は開発中のものです。
2008/12/08(月) 00:25:32ID:2qR4Oo16C言語というより、DXライブラリ言語でのプログラミングという印象を受けました。
DXライブラリを使ってプログラミングする場合は、
Cのほうは入門書を一通り読んだだけの知識でよくて、
あとはDXライブラリの使い方をきちんとやるほうがいいんですよね?
0220名前は開発中のものです。
2008/12/08(月) 00:31:03ID:A0APKyuo平行して勉強しなはれ。
0221名前は開発中のものです。
2008/12/08(月) 00:55:25ID:FYgRMyd9もろCで作ってるよ
printfが絵を表示する関数になるだけ
0222名前は開発中のものです。
2008/12/08(月) 03:17:20ID:tsVxmfWH「C言語 = printfやscanf、fopen等の標準関数」だと思ってるんならそれは間違いだ
0223名前は開発中のものです。
2008/12/08(月) 03:37:47ID:ghLgcWkzそれでいいと思うよー。
Cの文法なんて覚える事少ないし、入門書片手に取り掛かっちゃえば大丈夫。
今後も、プログラミングで何かを作る時、基本的にDXライブラリのような、外部のライブラリの使い方を覚えるって作業が大半になるよ。
入門書に書いてあるstdio.hのprintfみたいな標準関数を覚えるみたいに。
0224名前は開発中のものです。
2008/12/08(月) 11:27:49ID:tq0zLS+0>>>202もヒントになると思うけど多分新しい文字列を頻繁に表示しようとしてるんじゃないかな。
>毎フレーム更新される数値を表示するって事も多いと思うし。
それこそ仕様を見直せとしか言いようがないようなw
毎フレーム更新する数値や文章ならプレイヤーに全文しっかり読ませるためものじゃないだろうし。
0225名前は開発中のものです。
2008/12/08(月) 18:07:49ID:ofH1nP7I0226名前は開発中のものです。
2008/12/08(月) 18:55:26ID:dZklSLE80227名前は開発中のものです。
2008/12/08(月) 20:50:58ID:vtoynrkC60フレーム固定のシューティングを作ろうと思ったんですが
公式をみると「グラフィックがぶれがひどくなる」と書いてあって
ttp://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N13
で、実際にサンプル試してみたら
確かに時々ひっかかる感じが。
これって改善はできないものなんでしょうか?
0228名前は開発中のものです。
2008/12/08(月) 20:56:58ID:a6vLxw2w0229名前は開発中のものです。
2008/12/09(火) 01:42:49ID:osPjvukMint Time; を
LONGLONG Time; に、
Time = GetNowCount(); を
Time = GetNowHiPerformanceCount(); に
while( GetNowCount() - Time < 17) {} を
while (GetNowHiPerformanceCount() - Time < (1000000 / 60)) {} に
書き換えてみたら?
0230名前は開発中のものです。
2008/12/09(火) 13:46:02ID:uZqK3QytRPGやアドベンチャーゲームなら
1文字ずつゲーム内Windowに描画され、ゲーム内Windowごと表示非表示を切り替えられるって仕様は普通に有るでしょう
0231名前は開発中のものです。
2008/12/09(火) 15:29:12ID:hNxQdCPd文字表示ぐらいしかないと思うけど・・・
0232名前は開発中のものです。
2008/12/09(火) 15:52:37ID:R5xGo07t前はあったはずなんだが。
0233名前は開発中のものです。
2008/12/09(火) 17:32:59ID:PL50HxGw「スクリプトプレーヤー」の事じゃないかな。
0234名前は開発中のものです。
2008/12/09(火) 18:26:23ID:hNxQdCPdいきなりスクリプトのソースみろとか言われてもなにがなにやらって感じ
0235名前は開発中のものです。
2008/12/09(火) 19:12:36ID:PIQiSLzg見てもわかるの?
という疑問が湧く。
同じ動きをするものを自分で書けるくらいの技量がなければ結局読めない気がする。
他人のソース読むのが超苦手で自分で書いた方が早い俺限定の話だが。
0236名前は開発中のものです。
2008/12/09(火) 19:35:05ID:aLvm7Uo6アルゴリズムは同程度の技量がないと読めないけど、設計はそんなことないよ。
スクリプトプレイヤーのソース見たけどちょっと酷いな。
マジックナンバー、関数長すぎる、グローバル変数使いまくりetc...
たしかにこれ読めとか言われても俺も困る。
自作2Dライブラリ作ってたんだが、画像系の実装が終了したところで
面倒になってきたんでDXライブラリを使うことにした。おまいらよろしく。
0237名前は開発中のものです。
2008/12/09(火) 20:33:33ID:PIQiSLzgああ確かに設計は読みたいかも。
うまい人のクラス構成とかはみてみたい。
0238名前は開発中のものです。
2008/12/09(火) 20:44:39ID:HfON+uiV表面だけ見れば理解できるよね
0239名前は開発中のものです。
2008/12/09(火) 20:59:26ID:MCEWLRF6すいません、内部処理は一定化したかったので・・
>>229
ありがとうございます!
引っかかりが無くなりました。
タイマーの精度の問題だったみたいですね。
0240名前は開発中のものです。
2008/12/10(水) 15:43:30ID:LwDc2Tc0>>221
>>222
>>223
printfなどが関数だということを意識していませんでした。
まさに、C言語=標準関数のつもりで勉強していました。
外部ライブラリを使うのだから、それから提供される関数の使い方を勉強するのは当たり前ですね。
プログラミングに対する疑問が少し解けました。どうもありがとうございました。
0241名前は開発中のものです。
2008/12/11(木) 09:38:29ID:oww0q0NNループ表示する背景の一部分だけを拡大表示したいです。
0242名前は開発中のものです。
2008/12/11(木) 10:38:54ID:qrB4r20jそれをしてから拡大表示させればいいんじゃないかな。
前提条件として矩形範囲のみって事になるけど。
0243名前は開発中のものです。
2008/12/11(木) 11:00:28ID:oww0q0NNなるほど、ありがとうございます。矩形なのでその辺は大丈夫です。
でもアクションゲームみたいに、リアルタイムにバックグラウンドをスクロールさせつつ、
拡大率を変えてバックグラウンド表示するのはその方法ではコストが掛かり過ぎて無理なようですね。
DrawExtendGraphの描画元矩形指定関数があれば一発なのに><
0244名前は開発中のものです。
2008/12/11(木) 11:23:00ID:qrB4r20jそれじゃ無理だね。
それならいっそ、
背景を普通の大きさで書く → 画面の描画範囲を設定(SetDrawArea) → 背景を拡大して書く
ってやってみるのはどうだろう。
背景を二回描くから、やり方によってはコストかかるけど……。
0245名前は開発中のものです。
2008/12/11(木) 12:23:15ID:Otp3maXe0246名前は開発中のものです。
2008/12/11(木) 12:49:25ID:oww0q0NNそうですそうです、元画像の一部分を拡大表示したいんです。
>>245
おお!ありがとうございます。そんな関数があったんですねw
面倒でも自分でDxLib.hをチェックしないと駄目ですねw
0247名前は開発中のものです。
2008/12/12(金) 18:14:48ID:dqaLLhhf800 x 600 ウィンドウモードで作っているんですが
2Dゲームは 640 x 480 が基本だと聞きました。
800x600だと何か不都合でも起こるんでしょうか?
0248名前は開発中のものです。
2008/12/12(金) 19:08:10ID:e0uVhp4S0249名前は開発中のものです。
2008/12/12(金) 20:15:13ID:dqaLLhhf800x600だと特定の環境ではちらつきが酷いとかだったら嫌だなぁと思いまして
0250名前は開発中のものです。
2008/12/12(金) 20:24:18ID:yokHYtBf処理速度の問題とユーザの環境の問題
ちなみにカラーモードも256色パレットモードが基本だった
しかしそれは過去の話
今はPCのスペックは十分だし、800*600の画面モードの無いPCの方が少ないと思うから問題ないかと
0251名前は開発中のものです。
2008/12/12(金) 21:25:42ID:aXKygAOwCRT使いなんでわからないんだけど
液晶の場合、画面サイズに合わない画面モードの表示ってどうなるの?
1)全画面に拡大されてぼやける
2)表示分だけ使われて余白は黒塗りになる
0252名前は開発中のものです。
2008/12/12(金) 21:28:59ID:8ZHcqCMQA.液晶の設定しだい
0253名前は開発中のものです。
2008/12/12(金) 22:00:48ID:J3zydYCSうまく言えないんだけど
player.cpp内でint宣言をして、void player()で増減させる。
そして
「enemy.cpp内」で「player.cppのvoid player()」で増減したint変数を使用して作りたい判定があるんだけど。
こういうのってやっぱり出来ないのかな?
0254名前は開発中のものです。
2008/12/12(金) 22:09:20ID:r3WCUutT0255名前は開発中のものです。
2008/12/12(金) 22:12:35ID:dqaLLhhfenemy.cppの冒頭にextern宣言すれば判定にも使えるようになるよ
0256名前は開発中のものです。
2008/12/12(金) 22:19:36ID:J3zydYCSああそれ忘れてたww
おもいっくそ素材ファイルの読み込みで使ってたのに
ありがと、助かった
0257名前は開発中のものです。
2008/12/12(金) 22:34:39ID:ztObze9Yint i;
void player(){ i += 1; }
-- enemy.cpp --
extern int i;
void enemy(){ if(i) ・・・ ;}
0258名前は開発中のものです。
2008/12/12(金) 22:49:50ID:aXKygAOw即レスサンクス。
じゃあプログラムする側としては
あんまり気にしても意味無いんだ・・
勉強になりますた。
0259名前は開発中のものです。
2008/12/12(金) 23:04:32ID:e0uVhp4S最近流行りの低価格ノートPCとかだと、どんな感じなんだろう?
縦600くらい?
0260名前は開発中のものです。
2008/12/13(土) 01:45:20ID:E/1bppJyDeleteGraph( enemy01 ) ;
}
else if(hitS < hit ){
PlaySoundMem( hit_test , DX_PLAYTYPE_BACK );
shotflag = 0;
enemy01_Life -=1;
}
このコードで、最後のenemy01_Life -=1の判定を一回だけ判定場合ってどうすればいいの?
ダメージ判定だけがどうしても残ってしまう
0261名前は開発中のものです。
2008/12/13(土) 02:02:18ID:Swo2xfir具体的に何がしたいが、何が起こってるのかを示せ。
コードにはコメントを入れろ。第三者には何をやってるか分からない。
んで、だ。
ショットが命中した時、
(1)ショット自体を消す(敵に当たると弾が消える)
(2)敵ごとにカウンタを作っておき、「一度当たったら10フレームの間は無敵」とかにする
(3)弾ごとに自分がどの敵に命中したかを覚えておき、2度目は命中扱いにならないようにする
こんな感じ?
0262名前は開発中のものです。
2008/12/13(土) 02:20:00ID:E/1bppJy玉の画像は消えるんだけど、当たり判定だけが「次にショットボタンを押すまで」残るんだ。
何がしたいかは、「玉一つにつき一回だけダメージ判定」をしたい。
ショットコード↓
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;
0263名前は開発中のものです。
2008/12/13(土) 02:39:09ID:DJ2YFwb1判定のコードが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 ) ;
}
0264名前は開発中のものです。
2008/12/13(土) 02:43:12ID:DJ2YFwb1if(shotflagが真)
{
//ここに判定のコードも書く
}
0265名前は開発中のものです。
2008/12/13(土) 02:56:17ID:E/1bppJyショットコード内で
if( shotflag == 1 ){ //ショットフラグONになったら
この部分に判定コード(>>263のGetGraphSize〜DeleteGraph( enemy01 ) ;)
}
を入れないとダメってこと?
0266名前は開発中のものです。
2008/12/13(土) 03:06:51ID:DJ2YFwb1shotflagって弾があるかないかのフラグでしょ?
今のままだとshotflagが0の時にも判定される
あといろいろ突っ込みどころがあるけど
そういう書き方してると確実にスパゲティソースになる
0267名前は開発中のものです。
2008/12/13(土) 11:56:05ID:E/1bppJyマジかw
プログラム初心者で全然分からんから適当に組んでる
既にややこしくなってる
0268名前は開発中のものです。
2008/12/13(土) 12:55:29ID:6PMqtPt6実際に作って慣れればいいのだ。
0269名前は開発中のものです。
2008/12/13(土) 13:01:52ID:E/1bppJyそのとおりにやってみたけど
やっぱり玉一つで「次にショットボタンが押されるまで」の間に複数回攻撃判定が出ちゃう・・・。
0270名前は開発中のものです。
2008/12/13(土) 13:08:45ID:WaQfNGav初心者なら仕方なら、一回スパゲティコード書いて捨てる経験もしてみるといいかもね。
それがいやならオブジェクト指向の簡単な本があるからそれ読んでみるといいよ。
オブジェクト指向とゲームは相性がよい部類。
ためしにオブジェクト指向で書き直してみようかと思ったけど、半分ほど書いた時点で
長くなった上に果たしてこれを理解できるのかという疑問がわいてきたので捨てた^w^)
0271名前は開発中のものです。
2008/12/13(土) 13:10:15ID:WaQfNGav0272名前は開発中のものです。
2008/12/13(土) 13:19:00ID:klDdA96T素人の俺がいうのもなんだけどむしろ相性はよくない方だと思うけど、経験が足りないからかな?
一応ゲーム作りはDXライブラリ使ってもOO(OO風ともいう)を意識して書いてるけど、
C++の便利な機能(クラスや継承程度)を使うくらいでこれぞOOって感じでもないなぁ。
C#でちょっとしたツールなんか作るとOOだなぁって感じるけど。
0273名前は開発中のものです。
2008/12/13(土) 13:48:06ID:WaQfNGavツールを作る件はオブジェクト指向じゃなくて提供されるオブジェクト指向ライブラリが優秀
ってだけだと思う。
>相性はよくない方
どの辺が?ならデータ指向で作る?手続き指向で?俺は絶対いやだけどなー。
パラダイムってのはつまるところコードの整理術なわけで、それを感じないってのは別に
不思議じゃないよ。
さっきでたコード、弾丸と敵との当たり判定がでてきだけど、
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 ) )
{
/*ヒット処理*/
}
変更にも強く、なおかつコードはわかりやすくなる。
0274名前は開発中のものです。
2008/12/13(土) 17:56:36ID:E/1bppJyいっそコレ仕様にすっか
敵の端っこにショット当てた状態でショットボタンを押さないと一定時間大ダメージ!
画期的と言えば画期的だが生憎ただのバグだ。
0275名前は開発中のものです。
2008/12/13(土) 18:54:39ID:DJ2YFwb1今じっくり見たけど
>>262のif( shotflag == 1 )のブロックを>>262の一番最後で閉じるか
else if(hitS < hit )のブロックの中でhitSを条件満たさないように変更する
これで正常になると思うが、違ったらすまそ
0276名前は開発中のものです。
2008/12/13(土) 18:56:46ID:O5bnNqrG弾が生きているときだけ判定をすればいいわけだよね。
>>>264が言う通り当たり判定をするブロックを if ( shotflag == 1 ){}で囲めば出来ると思うんだけどなあ。
弾が死んでても玉の座標は留まって、さらにshotflagが機能していないから(セットが上手く行っていないか判定処理に考慮されていない)
何度も当たっていると思われるんだけど。
てか敵をデタッチするのにDeleteGraph()で画像そのものを削除するって激しすぎないか?w
if ( enemy_alive ) { Task(); } // 敵が生きているときのみ敵に関する処理を行う
とかにした方が良いと思うんだが。
0277名前は開発中のものです。
2008/12/13(土) 18:59:29ID:O5bnNqrG0278名前は開発中のものです。
2008/12/13(土) 21:59:39ID:E/1bppJy当たり判定は座標で行ってたから
http://www.uploda.org/uporg1853070.jpg
この画像の様に(hit>hitS)になってる時に判定が出て、その判定が次玉を出すときまで残るんだ。
だからこの画像はhitは21でhitSは13.9.....ってなってるので次に玉が出るまで(hitSの数値が変わるまで)凄い勢いでenemy_Lifeが減り続けてる
敵に当たった瞬間にhitSをリセットすればいいのかな?
0279名前は開発中のものです。
2008/12/13(土) 22:22:05ID:O5bnNqrG0280名前は開発中のものです。
2008/12/13(土) 22:28:29ID:E/1bppJyパスは274
問題のソースはenemy_moveとplayerにあります。
初心者だからすげー読みずらいと思う
0281名前は開発中のものです。
2008/12/13(土) 22:30:08ID:DJ2YFwb10282名前は開発中のものです。
2008/12/13(土) 22:32:35ID:E/1bppJyうん、その通りにやってみても何故か結果は変わらずだった
0283名前は開発中のものです。
2008/12/13(土) 22:32:46ID:O5bnNqrGそれは当たり判定をする必要があるとき、
つまり弾と敵が生きているときに毎フレーム計算すればいい
弾の座標を遥か彼方にリセットしたりhitSを直接いじくって
当たり判定が真にならないようにすれば確かに上手く行くだろうけど
本質的には当たり判定をする必要が無いときに判定しているのが問題なんじゃないの?
0284名前は開発中のものです。
2008/12/13(土) 22:45:11ID:E/1bppJy毎回計算して判定してるんだけど
ヒットした時に計算が次玉出すときまで止まっちゃう
0285名前は開発中のものです。
2008/12/13(土) 22:47:31ID:O5bnNqrG全然修正されてないじゃないかw
「enemy_move.cpp」の
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
の前に一行追加して
if ( shotflag == 1 ){
GetGraphSize( enemy01 , &SizeX , &SizeY ) ; //グラフィックのサイズを取得
とする。
次に、その下のほうの
int Color ;
の前に閉じ括弧を追加して
}
int Color ;
とする。
つまり、当たり判定をしている部分を
if ( shotflag == 1 ){
}
で括る。
それとインデントをきっちりしないとネストレベルが分からなくなるよ。
0286名前は開発中のものです。
2008/12/13(土) 22:53:39ID:klDdA96TんーていうかC#の件は、ライブラリが優秀で作りやすい=オブジェクト指向って事じゃなくて、
コントロール一つ設置してイベントを呼び出すってだけでオブジェクト指向を感じる。
もっと具体的に言えばイベントハンドラ(やデリゲート)がオブジェクト指向だなぁって。
提示してくれた下のコードも、それだけじゃオブジェクト指向を感じない。
結果的に言わんとしようとしてることはわかるけどね。
ただそれだけじゃただのサブルーチン呼び出し。
言いたいのはそのコードだけを見てオブジェクト指向じゃないって事じゃないし、
自分でゲーム作る時もオブジェクト指向で書きたいわけだけど、
概念的に無理やり感があるのと、非オブジェクト指向でも書けるってので、
GUIアプリと比べて相性がいい方ではないって事。
0287名前は開発中のものです。
2008/12/13(土) 23:05:58ID:E/1bppJyおおおおおおお!!!ありがとおおおおお
一つのライフしか減らないwwwwwww
すげー!ショットフラグがONの時にしか判定しないようにするってそういう事だったのかwww
ちなみにプログラムの書き方?はこんな感じでいいのかな?
0288名前は開発中のものです。
2008/12/13(土) 23:22:28ID:HImZ/jwv俺は気持ち悪いからconstでやってるわけだが
0289名前は開発中のものです。
2008/12/13(土) 23:33:22ID:Swo2xfir・歴史的な経緯とかはあるかも
・特に理由が無ければconstでいいんじゃね?
・defineじゃないと出来ないこと、スマートなこともあるから気をつけろ
0290名前は開発中のものです。
2008/12/13(土) 23:34:35ID:Swo2xfirとりあえず、何でもいいので1つ完成させてからじゃないと
定番の書き方とかは説明しても意味が無いし、おそらく理解できないと思う。
0291名前は開発中のものです。
2008/12/13(土) 23:42:11ID:MCFYNnvA気を付けないと間違った結果が返ってくるハメになるが
■ このスレッドは過去ログ倉庫に格納されています