DXライブラリ 総合スレッド その5
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2009/12/04(金) 16:49:13ID:7SKA4I5zGUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
【公式】
http://homepage2.nifty.com/natupaji/DxLib/
【過去スレ】
DXライブラリ 総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1197468399/
DXライブラリ 総合スレッド 2008
http://pc11.2ch.net/test/read.cgi/gamedev/1224923873/
DXライブラリ 総合スレッド その3
http://pc11.2ch.net/test/read.cgi/gamedev/1238429676/
DXライブラリ 総合スレッド その4
http://pc11.2ch.net/test/read.cgi/gamedev/1249822550/
0423名前は開発中のものです。
2010/01/01(金) 19:16:43ID:CHW7ms0X0424名前は開発中のものです。
2010/01/01(金) 19:24:26ID:Xn7CcDBA#define CANCEL_OK 0x00000001
,,,
if (stat & CANCEL_OK)
...
else if (stat & CANCEL_NG)
...
とか書くのかな
>boolの配列作って0〜nの数字をそれぞれステータス名でenumしてる
みたいなほうが好きだ
ただ例にあげてるとおりに格闘ゲームだとするとキャラクターの1フレームごとの変数の数が増えるのをきらうのはわかる
0425名前は開発中のものです。
2010/01/01(金) 19:28:11ID:DuVCrQzJGBAとかMSXとか古いゲーム機の時のことでしょ
懐かしいな
0426名前は開発中のものです。
2010/01/01(金) 19:28:36ID:+lDteCCN例えば「1時間後に働けよ」というのがスリープの考え方。
「じゃあその1時間何をするか」。
1時間、ずーっと1,2,3,4,5,6,7,8,・・・・と声に出して数え上げるとする。
これじゃ、なんか用事があっても何も出来ない。
「じゃあ本でも読むか」となれば、別の処理(本を読んで知識を得る)が出来る。
どっちやっててもシステム時間として1時間は過ぎるが
片方は「実質的に意味のあることを何もしてないのにパワーだけ食う」
片方は「実質的に何もしないんだから別のことをする」
どっちが効率的か分かるだろう
0427名前は開発中のものです。
2010/01/01(金) 19:31:29ID:+lDteCCNfor(i=0; i < During; i++){
Plus += Exactly;
}
ではなく、
if(During == FuckingAss){
Plus += Exactly;
Plus += Exactly;
Plus += Exactly;
Plus += Exactly;
Plus += Exactly;
Plus += Exactly;
}
などとしたりすることがある。
基本的にコッチのほうが速いからだ。
CPUとコンパイラにもよるが。
0428名前は開発中のものです。
2010/01/01(金) 19:32:53ID:ulJ3MFDLへー
0429名前は開発中のものです。
2010/01/01(金) 19:35:16ID:ulJ3MFDL大体何回までのループなら>>427の↓のパターンで書いてもいいの?
0430名前は開発中のものです。
2010/01/01(金) 19:37:18ID:+lDteCCNforループではなく、こういうふうな展開したループもどきが使われることも多い。
難点は、見た目素人っぽいこと
それ以外は何してるか分かりやすくていいのだが
「こっちのほうが速いよ」ってことをなかなか認めてもらえないのが難といえば難
これを、デッドラインまで繰り返す
デッドラインが決まっているということはおおよそのアタリがつくし、
そんなに長いループにもならない。なってはいけない。
0431名前は開発中のものです。
2010/01/01(金) 19:42:28ID:+lDteCCN「もっと軽くしたい」ってときの最終手段なので
根本から遅いのであれば設計を見直したほうがいいよ
0432名前は開発中のものです。
2010/01/01(金) 19:44:49ID:Xn7CcDBAじゃあWindowsのDXライブラリで
たとえば1フレーム50ミリ秒にするのにSleepを使わない最適なメインループはどういうの
公式のサンプルがいいのなら「それ」といってくれればいいです
0433名前は開発中のものです。
2010/01/01(金) 19:46:30ID:qgsN6nSc0434名前は開発中のものです。
2010/01/01(金) 19:48:17ID:ulJ3MFDLこれ具体的にどんな感じで書けばいいの?
0435名前は開発中のものです。
2010/01/01(金) 19:50:56ID:+lDteCCN例えばPowerPCはタイマユニットを持っているので
これに値を入れてカウントさせる。アンダーフローと同時に割り込みが入る。
その割り込みでタスクを駆動させる。
こういうハード寄りもいいとこのタイマ管理ってのはアプリで使うもんじゃないというし、
まあそれもそうだろうが実現する場合これが一番いいのだ。
ハードウェアのタイマクロック計上はタスクじゃないので、一切影響を及ぼさない。
普通OSのスリープは多かれ少なかれCPUのパワーを食うが
俺のやるタイマは一切食わない。割り込み処理のオーバーヘッドは微々たるもの。
0436名前は開発中のものです。
2010/01/01(金) 19:52:10ID:ulJ3MFDL全然わからんからサンプルソースで説明しておくれ
0437名前は開発中のものです。
2010/01/01(金) 19:54:51ID:OvIEzR2yDXライブラリのスレでPowerPCwwww
面白いヤツだなお前
0438名前は開発中のものです。
2010/01/01(金) 20:05:29ID:+lDteCCNサンプルといっても、やりたい事を記した関数しかないのだがw
割り込みはソフトウェアじゃない。
割り込みは、ベクタ方式の場合ベクタベースからオフセットしたところにプログラムカウンタが来るだけだから
別にソースで表すもんじゃない。
また、PowerPCならベクタじゃない。
0439名前は開発中のものです。
2010/01/01(金) 20:07:18ID:rctl5BXb0440名前は開発中のものです。
2010/01/01(金) 20:08:35ID:rctl5BXb俺も飲んでるがなww
0441名前は開発中のものです。
2010/01/01(金) 20:10:31ID:+lDteCCN普通あんまり使わないウォッチドッグタイマ
どうしても更新したいのに処理が終わらなかったとき
これで強制的に更新したりできる
たまにはハード寄りのオブジェクトを作ってみても面白い
0442名前は開発中のものです。
2010/01/01(金) 20:42:23ID:WC0TdB7Oここは主にDXライブラリやそれに関する話をするスレなので
DXライブラリに全く関係ないPowerPCの話はやめてほしい
あとゲームではあまり意味の無い、
>427のような時期尚早な最適化を進めるのはどうかと思う
今のVC++の無償版には最適化機能が付いているし
0443名前は開発中のものです。
2010/01/01(金) 20:50:31ID:+lDteCCN0444名前は開発中のものです。
2010/01/01(金) 22:16:35ID:yLIIIbHt横レスだが、たぶんこんなかんじじゃないの
enum StatusSet{
Stat_POINSON,
Stat_PARALYSIS,
Stat_DISEASE,
Stat_CURSE,
Stat_NUM
};
bool phys_stat[Stat_NUM];
for(int i=0;i<Stat_Num;++i) phys_stat[i] = false;
あとはif( phys_stat[Stat_POISON] )とかでもswitchで振り分けてもいいし
STLのbitsetは役に立たないかな?使ったことないけど
0445名前は開発中のものです。
2010/01/01(金) 22:41:12ID:qgsN6nSc意図してたのはちょっと違った
enum StatusSet{
JUMP,
WALK,
DASH,
ATTACK,
};
bool stat[5];
if (stat[JUMP]) { 〜〜 }
という。
#まあjumpとかwalkは色々やるべきなのでintで管理すべきだが……
0446名前は開発中のものです。
2010/01/01(金) 22:49:37ID:ulJ3MFDLありがとん
0447名前は開発中のものです。
2010/01/01(金) 23:18:29ID:4nYhycH70448名前は開発中のものです。
2010/01/01(金) 23:28:38ID:/td8CeQE可読性が指摘されているが、
やり方が悪いくせに可読性が低いと決めつける奴に進歩はない。
#define JUMP (1 << 0)
#define WALK (1 << 1)
#define DASH (1 << 2)
#define ATTACK (1 << 3)
unsigned long stat;
if (stat & WALK) { 〜〜 }
↓ジャンプアタック
if (stat & (JUMP | ATTACK)) { 〜〜 }
-----------------------------------------------
Cをアセンブラ視点で見られるかどうかは重要だと思うが、
今は最適化のレベルが上がっているので、
>>427のようなロートルな話は意味がないと思う。
0449名前は開発中のものです。
2010/01/01(金) 23:30:56ID:+lDteCCNlogとビットシフトでは10秒も差がある。
0450名前は開発中のものです。
2010/01/01(金) 23:57:47ID:1cbp2whqDXライブラリと無関係なのはわかる
0451名前は開発中のものです。
2010/01/02(土) 00:16:20ID:ek4oo2Ge0452名前は開発中のものです。
2010/01/02(土) 00:26:34ID:08xjavwk0453名前は開発中のものです。
2010/01/02(土) 00:27:36ID:HeY6umvi0454名前は開発中のものです。
2010/01/02(土) 00:33:31ID:08xjavwk細かいことはIOや描画の桁違いのコストで吹き飛ぶ
0455名前は開発中のものです。
2010/01/02(土) 00:36:42ID:txdXna1V>>405
ありがとです
行表示できました
まだ、便利な機能があればおしえてほしいです。
0456名前は開発中のものです。
2010/01/02(土) 11:44:35ID:Ab6bZvqB10秒って・・・・・・Z80とかクロック4Mhzの時代の話ですか?
0457ひらしょ
2010/01/02(土) 13:50:19ID:xqJ6LKWHシングルトンがああなのは、getInstanceの速度をあげるため。
if一回減らせる。描画APIラッパとかだとここ重要。
create二回で死ぬのも「二回呼んじゃダメ!」と言いながら
assertで死ぬわけで、意味のある死に方。
ゲームにおいては、
間違ったコードを書いても動き続けることは重要ではない。
間違った、あるいは非効率なコードを書いたら
すぐわかるようにしておいて、出荷までに直すべき。
0458名前は開発中のものです。
2010/01/02(土) 14:03:41ID:+OdFeBMV0459名前は開発中のものです。
2010/01/02(土) 14:09:07ID:X1WEcwoJ老いぼれセガ社員必死だな
Seleneスレ荒したのお前だろ
0460名前は開発中のものです。
2010/01/02(土) 14:09:36ID:7cOQTttoSelene作者帰れよ
0461名前は開発中のものです。
2010/01/02(土) 14:38:27ID:Y2eIfDvE0462名前は開発中のものです。
2010/01/02(土) 14:41:47ID:+OdFeBMV0463名前は開発中のものです。
2010/01/02(土) 15:39:32ID:HeY6umvi>>390はassertが何のためにあるのかも知らないただのプログラム初心者だな
スレ違いでチラシの裏にでも書くような内容を堂々と書くくらいだしな
>>459
Seleneの現行スレ、過去スレ見たけど全然荒れてないぞ
あと、お前はアンチSEGAのスレにでもいけ
0464名前は開発中のものです。
2010/01/02(土) 18:47:34ID:US5QyJsT0465名前は開発中のものです。
2010/01/03(日) 09:52:26ID:uXTT7Kpp”ゲームプログラマになった後の〜”の執筆もよろしくお願いします
0466名前は開発中のものです。
2010/01/03(日) 11:10:30ID:WXd0Gz3Iマップは20×15で通れるところが0、通れないところが1で2次元配列読み込み済。
自キャラは32×32の場合、DXライブラリのサンプルにあったマップとのあたり判定の例に従って
float oldX,oldY;//移動前の座標
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
oldX = (*it).x ;//移動前のX座標
oldY = (*it).y ;//移動前のY座標
int x1 = (*it).x , y1 = (*it).y;
int x2 = (*it).x+32 , y2 = (*it).y+32; //右下の座標(どこで使うか考えている)
printfDx("%d,%d,%d,%d\n",x1,y1,x2,y2);
0467名前は開発中のものです。
2010/01/03(日) 11:12:21ID:WXd0Gz3Iif(key & PAD_INPUT_UP) (*it).y = (*it).y - df;
if(key & PAD_INPUT_DOWN) (*it).y = (*it).y + df;
if(key & PAD_INPUT_LEFT) (*it).x = (*it).x - df;
if(key & PAD_INPUT_RIGHT) (*it).x = (*it).x + df;
if((*it).x<0) (*it).x=0;
if((*it).x>608) (*it).x=608;
if((*it).y<0) (*it).y=0;
if((*it).y>448) (*it).y=448;
x=x1/32;
y=y1/32;
if(map[y][x]==1){
(*it).x = oldX ;
(*it).y = oldY ;
}
(*it).anim->draw(0, (*it).x, (*it).y);
こんな感じにすると若干思っているのとずれるんですよね…。
当たり判定なので左上の座標と右下の座標を取得するところまでは考えたのですが、
どのようにしたら実情にあったマップとのあたり判定になると思いますか?
0468名前は開発中のものです。
2010/01/03(日) 11:25:02ID:CHMCqqiY移動させてから戻すんじゃなくて、二次元配列のマップチップなら移動先が0かどうか判定するほうがいいんじゃね
0469名前は開発中のものです。
2010/01/03(日) 11:26:09ID:mNxKxxAQ>こんな感じにすると若干思っているのとずれるんですよね…。
ちょっと分かりづらいので、何が原因でどういう風にずれるのか詳しく教えて。
0470名前は開発中のものです。
2010/01/03(日) 11:44:39ID:WXd0Gz3Iうまく言えないのですが、ぶつかるべきところでぶつからないで食い込んで止まったりする、という感じでしょうか・・・。
あと、通行可のはずのところに入れなかったり。
マップに入れるところ、入れないところを作りたいのですが。
0471名前は開発中のものです。
2010/01/03(日) 11:52:19ID:v00n4e/G何でもそうだが、
条件判定は少なければ少ないほどよい。
っていうか現場でifififififififififififififififif重ねる奴は怒られる。
switch-caseで済む場合もあれば
ビットシフトで済む場合もある
俺はswitch-case大嫌い
下に来るまでクロックを食いながら来るからだ
だから個人的にはビット演算以外認めない
ビット演算なら、立てておけば何が来ても一瞬だからだ
0472名前は開発中のものです。
2010/01/03(日) 12:06:18ID:v00n4e/Gステータスに数字を割り振って、その値が指すものに直に飛ばしてもよい
擬似テーブル方式だな
内心嫌だった
とにかく、ifififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififif重ねるのは見た目にもよくないし
実行速度的にも良くないので絶対に改めるべきだ。
単純なswitch-caseも絶対に避けるべきだ。10項目あったら10項目めに来るまで最低11クロックかかる。
11クロックもあったらシェーダを3回も回せる。
じつにもったいない話だ。
0473名前は開発中のものです。
2010/01/03(日) 12:07:15ID:aWVerO1px=x1/32;
y=y1/32;
↓
x=x1/20;
y=y1/15;
じゃないか?
その上でマップに当たった場合、
ギリギリまでキャラクタを移動させる処理が足りない。
それをやらないと、キャラクタがブルブル震える。
あと変数の名前をもうちょっと考えてやろうな。
配列の引数に渡すセル番号の値がキャラ座標と同じx,yはひどい。
規格が違う。
0474名前は開発中のものです。
2010/01/03(日) 12:10:36ID:CHMCqqiY実際の位置は表示部分で考えるか、滑らかな動きがいいなら別途キャラクター表示x,yを用意して補正してやる
0475名前は開発中のものです。
2010/01/03(日) 12:15:25ID:mNxKxxAQという言い回しだったので「アルゴリズムを提案してほしい」ということかと思ったのに、実は「バグを見つけて下さい」ということだったとは・・・
>>473で解決だな。
0476名前は開発中のものです。
2010/01/03(日) 13:43:46ID:+Y7mHkgr自キャラは32×32だから/32でいいだろ
出鱈目教えんなよw
それと
if(map[y][x]==1){
(*it).x = oldX ;
(*it).y = oldY ;
}
となってるが
それはキャラの左上しか減り込みチェックしてないから
int x2 = (*it).x+32 , y2 = (*it).y+32 は
int x2 = (*it).x+31 , y2 = (*it).y+31 に変えて
map[y1][x1], map[y1][x2], map[y2][x1], map[y2][x2] をチェックしてやらんといかん
他も変えるべき個所はあるがとりあえずここまで
0477名前は開発中のものです。
2010/01/03(日) 13:47:15ID:+Y7mHkgr>map[y1][x1], map[y1][x2], map[y2][x1], map[y2][x2] をチェックしてやらんといかん
はなかったことね
取りあえず4隅をチェックするということ
0478名前は開発中のものです。
2010/01/03(日) 14:02:44ID:+Y7mHkgr引き返すなら今のうちかも、特に初心者は
ある程度慣れた人ならできるだろうけど
俺の場合は下行くか上行くか左行くか右行くかによって場合わけで上の人が嫌いって言ってたswitch-caseでやったけど
まあ上手いことやればswitch-case使わなくてもできるんだろうけど
俺の場合は上行った場合は左上と右上の2隅チェック、
右行った場合は右上と右下の2隅チェック、以下略
ってやってったと思ったんだけど
0479名前は開発中のものです。
2010/01/03(日) 14:31:11ID:CHMCqqiY0480名前は開発中のものです。
2010/01/03(日) 15:24:02ID:WXd0Gz3Iなんとなくそれっぽい動きができればそれでいいのですが…。
switch-caseも一度考えてみます。
0481名前は開発中のものです。
2010/01/03(日) 16:42:55ID:TuIYpr0Pスレ斜め読みのおいらが答えると、まず、floatは辞めよう。
一度、float型で、単純な計算をさせると分るけど、floatは精度的に難がありすぎる。
使うなら、intかdoubleを。(特に今回は浮動小数点が必要なさそうだからintで十分)
あと、値が何を示しているのか?をきっちりと考える事。
(x2が、自キャラがギリギリ外れてる位置なのか?ギリギリ入っている位置なのか?)
可能なら、それぞれの名前をx1=>x_top x2=>x_under y1=>y_left y2=>y_rightとか、
ちゃんと意味する名前に・・・。
また、無意味なマジックナンバーはさっさと定数に。
static const int SQUARE_SIZE=32;とかにする。
さらに、一般的にキャラと通路がほとんど同じ大きさだと、
将棋みたいなマス目管理じゃないと、操作不可能になりやすい。
(何か絶対の理由が無ければ、キャラの処理的な大きさは7割で処理していっても問題無い。)
めんどくさいんで、人の書いたモノの紹介で濁すけど、
今回は、基本ただの四角形と四角形の判定辺りで行ける。
http://marupeke296.com/COL_main.html
の その4 のはじめの所を読めば問題解決するだろう。
0482名前は開発中のものです。
2010/01/03(日) 18:04:43ID:smx+9BoV次のような要素を実現したいのですが・・・
@エイリアンを倒した数によって、ヒロインのおっぱいが大きくなる。
Aステージをクリアしたあと、ヒロインのおっぱいを揉める。
@に関しては、おっぱいの大きさごとのモデルを作るのではなく、DXライブラリの
プログラムで、おっぱいだけを大きくしたいです。
Aに関しては、プレイヤーの動きに応じてちゃんとおっぱいがもにもにするようにしたいです。
DXライブラリで可能でしょうか?
0483名前は開発中のものです。
2010/01/03(日) 18:10:25ID:Cn7qbODVおっぱい以前に,さすがにFPSならDXライブラリじゃなくてもっとちゃんとした3Dゲームエンジン使った方が結果的にずっと楽だよ
0484名前は開発中のものです。
2010/01/03(日) 18:12:54ID:FbdCmvgh_ = ~~ ``ヽ_,=''~´ ´~ヽ : は こ き .っ イ
_= ~ ヽ : 思 が く ぱ リ
~=、 ミゞ、 , -彡 ヽ. : わ ま .し. い ア
~=、、、Cl~evj <e~}6)_ 、、、ミ : ん し よ を .ン
ミ.~~ /', ゚ ;'7 ミ7ヾ~- 、 : か い う の
≡ (','゚, '.人 ゝ | ヽ : ね な 命
`= `ー' iノ' | / | ん で
~ーノノノノノ'′ て
_ ∩ピタ
(; ゚д゚)
し |
| |
し ⌒J
( ;´゚д゚) ・・・・・・・・・
c(,_U_U ガク
( ;´゚Д゚) おっぱいは何のためにあるんだー
c(,_U_U
_,,..-―'"⌒"~⌒"~ ゙゙̄"'''ョ
゙~,,,....-=-‐√"゙゙T"~ ̄Y"゙=ミ
T | l,_,,/\ ,,/\
0485名前は開発中のものです。
2010/01/03(日) 20:05:43ID:wq7ATXDp3Dメッシュの1部分の頂点座標を変更することが出来れば可能ではないだろうか
DXLibではメッシュの中の1点の頂点情報を変更する関数が見当たりませんでした
直DirectXではLockVertexBufferで頂点情報を抜き出し、一部変更してからUnlockすれば書き換えできる
その他知る限りだとDarkBasicのSET VERTEXDATAがそれらしき機能かもしれない
自分はボーンの使い方わかないので、頂点書き換え方式でキャラのモーション作ってます
0486名前は開発中のものです。
2010/01/03(日) 21:49:29ID:v00n4e/G0487名前は開発中のものです。
2010/01/04(月) 00:50:49ID:96m9JQJM0488名前は開発中のものです。
2010/01/04(月) 08:25:51ID:TtKqpyJCおっぱいはTonnyかべっかんこみたいなのが好みです
0489名前は開発中のものです。
2010/01/04(月) 11:15:32ID:fBgUH+Peで
0490名前は開発中のものです。
2010/01/04(月) 15:41:04ID:7VFKyHz5HLSLで頂点シェーダやったけど、メッシュ全体の平行移動しかわからない
一部分の頂点座標を動かすってoffset引数使うとまでは調べられたが情報全然ありません
どうやってやるのでしょうか
0491名前は開発中のものです。
2010/01/04(月) 16:44:21ID:R2vcIv7j0492名前は開発中のものです。
2010/01/05(火) 23:31:28ID:V0sHGwwtビットマップと違って3Dはラスターデータだから、データの重さにはあまり影響ないように思うんだけど。
テクスチャの大きさが影響するとか?
もしそうなら、大体どれくらいの大きさのモデルが基準になるんだろう。
0493名前は開発中のものです。
2010/01/05(火) 23:58:55ID:7uq6yiICこれを一つにまとめて、クリアしたら次の面にいくようにしたいのですが、どのような方法がありますか?
0494名前は開発中のものです。
2010/01/06(水) 00:27:54ID:lKDLfFv0ポリゴン数とテクスチャサイズはパフォーマンスに影響するよ。
市販のゲームを参考にすると良いと思う。
ttp://www.geocities.jp/gamerabbits/programing_08.htm
>>493
「#include」「extern」を使う。
ttp://www.geocities.jp/ky_webid/c/032.html
0495名前は開発中のものです。
2010/01/06(水) 02:00:14ID:odLPnjyO3DCGソフトによって座標系や単位もバラバラなので関係ないよ。
ただ作業上の手間はあるので、サイズは統一しておいた方が
良いとは思う。
Dxライブラリの場合は、メタセコに合わせているので市販の3DCG
ソフトから直接xで書き出した場合は、極小で表示されると思う。
3DCGソフト側で適正なサイズでモデリングするか、メタセコ経由
してサイズを調整するのが無難かも。
>>493
switchとかでもできるけど、シーン(面)ごとにクラスに分けてるなら
基底のクラス作ってそっから各面を派生させたほうが楽かも。
シーン遷移(シーケンス遷移)やstateパターンとかでググるといいかも。
0496名前は開発中のものです。
2010/01/06(水) 02:15:00ID:ngavL09Nif ( scene == SCENE_TITLE ) Title();
else if ( scene == SCENE_PLAY ) Play();
でも良い気がした。
0497名前は開発中のものです。
2010/01/06(水) 02:17:06ID:BbbKJDe60498名前は開発中のものです。
2010/01/06(水) 02:41:18ID:T+FI4egHどっかに書いてあった気がする
浮動少数点の精度がどうたらこうたらで
0499名前は開発中のものです。
2010/01/06(水) 16:02:24ID:AxwVnUF1〜略〜
mapmodel_h = MV1LoadModel(file) ;
〜略〜
}
//グローバルスコープ
int mapmodel_h;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
〜略〜
model_load("newmap2.mqo",5,6);
これのmodel_load関数のどこが間違ってるの?デバッグ中に「モデルファイル newmap2.mqo が読み込めませんでした」とか怒られる
ちゃんとファイルを置く場所も間違ってないのに・・・
0500名前は開発中のものです。
2010/01/06(水) 16:15:50ID:Yz0j5Uar0501名前は開発中のものです。
2010/01/06(水) 19:54:12ID:+MjWEeUN試しにDxLibのサンプルのファイルに置き換えてみるとかどうだろう。
あと念のため、>>301-302も見てみてね。
0502名前は開発中のものです。
2010/01/06(水) 21:30:52ID:AxwVnUF1たった今、もの凄い恥ずかしいミスをしている事に気づいた。ぅゎー
0503名前は開発中のものです。
2010/01/07(木) 00:27:42ID:YFEgAVA7story.cpp内のdraw関数では、
switch(nowstage) {
case 0:
DrawGraph(0,0,img[0],FALSE);
(nowfstageは現在プレイ中のステージ。クリアすると+1されるようになってる
img[0]には画像が読み込まれている)
という宣言がしてあって、
void ShootGame::drawGameClear(){
slgmap.draw();
jikicnt.move();
bakucnt.move();
GameFrame::drawGameClear();
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if(key & PAD_INPUT_B)story.draw();
// if(key & PAD_INPUT_B)setGameState(GAME_MAIN);
}
とした場合、該当のキーを押している間は画像が表示されるのですが、キーを離すと表示されません。
まずキーを押したら画像が表示されて、その後キー入力で画像を切り換えて何枚か表示させた後、
またキーを押したらGAME_MAINに戻るようにしたいのですが、どうしたらいいですか?
0504名前は開発中のものです。
2010/01/07(木) 01:03:02ID:TMdG719d{
START,
FIRST,
SECOND,
END,
};
int draw_state = START;
drawGameClear(){
int key = GetJoypadInputState();
if(key & PAD_INPUT){
draw_state++;
}
}
some_function(){
if(draw_state == START){
// hyouji sinai
}
else if(draw_state == FIRST){
// 1maime hyouji
}
else if(draw_state == SECOND{
// 2maime hyouji
}
else if(draw_state == END){
// GAME_MAIN ni modoru
}
}
0505名前は開発中のものです。
2010/01/07(木) 01:04:01ID:TMdG719d0506名前は開発中のものです。
2010/01/07(木) 01:10:32ID:TMdG719dbool now_key_state = false;
chk_key(){
before_key_state = now_key_state;
if(GetJoypadInputState() & PAD_INPUT){
now_key_state = true;
}
}
chk_key()を毎フレームかコールバックでやってるなら
キーが押されたときに実行して以下の処理で検知とか
if(!before_key_state && now_key_state){
// ima osareta
}
0507名前は開発中のものです。
2010/01/07(木) 01:11:44ID:TMdG719dchk_key(){
before_key_state = now_key_state;
if(GetJoypadInputState() & PAD_INPUT){
now_key_state = true;
}
else{
now_key_state = false;
}
}
0508名前は開発中のものです。
2010/01/07(木) 15:40:47ID:4ItCtcBu方法が悪いのか、やはりキーを押している間しか画像が表示されません。
現在このような形にしています。
bool before_key_state = false;
bool now_key_state = false;
はすべての関数の外で呼び出し、
(int cstate = STARTは外で呼び出すと2回目から画像が出なくなったので、中にしました)
void ShootGame::drawGameClear(){
int cstate = START;
chk_key();
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if(key & PAD_INPUT_B){
cstate++;
}
if(cstate == START){
slgmap.draw();
jikicnt.move();
bakucnt.move();
GameFrame::drawGameClear();
}
else if(cstate == FIRST){
story.draw();
}
else if(cstate == SECOND){
story.draw();
}
else if(cstate == END){
setGameState(GAME_MAIN);
}
0509名前は開発中のものです。
2010/01/07(木) 15:43:45ID:4ItCtcBu以下をsome_function関数にして、
void ShootGame::drawGameClear(){
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
chk_key();
if(key & PAD_INPUT_B){
cstate++;
some_function();
}
}
というのもやってみましたが(当然ですが)できませんでした。
chk_keyの中身は、
void ShootGame::chk_key(){
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
before_key_state = now_key_state;
if(key & PAD_INPUT_B){
now_key_state = true;
}
else{
now_key_state = false;
}
}
というような形になっています。
0510名前は開発中のものです。
2010/01/07(木) 15:52:30ID:4ItCtcBuif(key & PAD_INPUT_B){ }内の cstate++;の前後に
if(cstate == START){ を入れるというのも試してみたのですが、
やはりうまくいきません
0511名前は開発中のものです。
2010/01/07(木) 16:22:43ID:3PYGN21/それじゃあその関数呼ばれるたびに cstate = START; がセットされるわな
int cstate = START; を static int cstate = START; に変えるか
あるいは cstate をメンバ変数にするかしないと
あと、キー押し続けチェックは彼とは違ったやりかたになるけど
chk_key();
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if(key & PAD_INPUT_B){
cstate++;
}
の部分を以下に変えたらどうか
static bool holdDownB = true;
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
int pushB = key & PAD_INPUT_B;
if (pushB && !holdDownB){
cstate++;
holdDownB = true;
}
if (!pushB) holdDownB = false;
0512名前は開発中のものです。
2010/01/07(木) 16:39:31ID:4ItCtcBu確かにintでは値の保持ができませんね…。気が付きませんでした。
静的変数にしなくてはいけなかったんですね。
あとキー入力の部分もありがとうございました。
考えていた通りに動かすことができました。
0513名前は開発中のものです。
2010/01/07(木) 16:45:13ID:tQIgGLUE0514名前は開発中のものです。
2010/01/07(木) 17:40:30ID:eYJAziPKC#版は一部の関数が使えないこと以外はC版と同じ。
readme.txtに書かれていること以上に解説することがないから解説サイトもないよ。
0515名前は開発中のものです。
2010/01/07(木) 22:19:47ID:TMdG719d0516名前は開発中のものです。
2010/01/07(木) 23:25:56ID:eYJAziPK別に静的変数を使わなくても実装できるよ。
せっかくC++使ってるんだしクラス化してみたら?
↓みたいな感じで。
// ジョイパッド管理クラス
class Joypad
{
private:
enum
{
MAX_BUTTON = 28 // DXライブラリは最大28個のボタンに対応している
};
int PressedCounts[MAX_BUTTON]; // 各ボタンの押されたフレーム数を保存しておく
public:
void Update(); // ジョイパッドの入力状態を更新する
int GetPressedCount(int InputType, int Button); // ボタンが押されたフレーム数を取得する
};
// 使用例:-------------------------------
// ジョイパッドの入力状態を毎フレーム1回だけ更新する
joybad->Update();
// パッド1のBボタンが押された
if(joybad->GetPressedCount(DX_INPUT_KEY_PAD1, PAD_INPUT_B) == 1)
{
// 何らかの処理
}
0517名前は開発中のものです。
2010/01/08(金) 02:41:50ID:8yWASrLd少なくとも手間は普通にコーディングした方が全然掛からないが
0518名前は開発中のものです。
2010/01/08(金) 09:30:18ID:TquDKlBDクラス化はあくまで一例でしょ
君のいう普通がどんななのかは知らないけど
0519名前は開発中のものです。
2010/01/08(金) 21:55:23ID:G0v30nLn何色を表示しているかわかる方法ってありますか?
0520名前は開発中のものです。
2010/01/08(金) 21:59:21ID:UpbwAmjx0521名前は開発中のものです。
2010/01/08(金) 22:04:52ID:3zMDBTld0522名前は開発中のものです。
2010/01/08(金) 22:08:20ID:G0v30nLn0523名前は開発中のものです。
2010/01/08(金) 22:11:52ID:3zMDBTld■ このスレッドは過去ログ倉庫に格納されています