[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/25 20:51 / Filesize : 266 KB / Number-of Response : 992
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

DXライブラリ 総合スレッド その5



1 名前:名前は開発中のものです。 mailto:sage [2009/12/04(金) 16:49:13 ID:7SKA4I5z]
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。

【公式】
homepage2.nifty.com/natupaji/DxLib/

【過去スレ】
DXライブラリ 総合スレッド
pc11.2ch.net/test/read.cgi/gamedev/1197468399/
DXライブラリ 総合スレッド 2008
pc11.2ch.net/test/read.cgi/gamedev/1224923873/
DXライブラリ 総合スレッド その3
pc11.2ch.net/test/read.cgi/gamedev/1238429676/
DXライブラリ 総合スレッド その4
pc11.2ch.net/test/read.cgi/gamedev/1249822550/


435 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 19:50:56 ID:+lDteCCN]
俺やったら、スリープはCPUに直結する。
例えばPowerPCはタイマユニットを持っているので
これに値を入れてカウントさせる。アンダーフローと同時に割り込みが入る。
その割り込みでタスクを駆動させる。

こういうハード寄りもいいとこのタイマ管理ってのはアプリで使うもんじゃないというし、
まあそれもそうだろうが実現する場合これが一番いいのだ。

ハードウェアのタイマクロック計上はタスクじゃないので、一切影響を及ぼさない。
普通OSのスリープは多かれ少なかれCPUのパワーを食うが
俺のやるタイマは一切食わない。割り込み処理のオーバーヘッドは微々たるもの。

436 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 19:52:10 ID:ulJ3MFDL]
>>435
全然わからんからサンプルソースで説明しておくれ

437 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 19:54:51 ID:OvIEzR2y]
wwwwww
DXライブラリのスレでPowerPCwwww

面白いヤツだなお前

438 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 20:05:29 ID:+lDteCCN]
PowerPCは例えだし
サンプルといっても、やりたい事を記した関数しかないのだがw

割り込みはソフトウェアじゃない。
割り込みは、ベクタ方式の場合ベクタベースからオフセットしたところにプログラムカウンタが来るだけだから
別にソースで表すもんじゃない。
また、PowerPCならベクタじゃない。

439 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 20:07:18 ID:rctl5BXb]
割り込みベクタとか。正月でやっぱらったロートルPGが集まるスレはここか?


440 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 20:08:35 ID:rctl5BXb]
やっぱらったって酔っぱらったなw
俺も飲んでるがなww

441 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 20:10:31 ID:+lDteCCN]
でもハード寄りプログラムは面白い。
普通あんまり使わないウォッチドッグタイマ

どうしても更新したいのに処理が終わらなかったとき
これで強制的に更新したりできる
たまにはハード寄りのオブジェクトを作ってみても面白い

442 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 20:42:23 ID:WC0TdB7O]
>413で間違えて書き込んだのか知らないけど
ここは主にDXライブラリやそれに関する話をするスレなので
DXライブラリに全く関係ないPowerPCの話はやめてほしい

あとゲームではあまり意味の無い、
>427のような時期尚早な最適化を進めるのはどうかと思う
今のVC++の無償版には最適化機能が付いているし

443 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 20:50:31 ID:+lDteCCN]
考え方はx86系統でも同じなのに・・・w



444 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 22:16:35 ID:yLIIIbHt]
>>434
横レスだが、たぶんこんなかんじじゃないの

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は役に立たないかな?使ったことないけど

445 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 22:41:12 ID:qgsN6nSc]
>>444
意図してたのはちょっと違った
enum StatusSet{
JUMP,
WALK,
DASH,
ATTACK,
};

bool stat[5];
if (stat[JUMP]) { 〜〜 }

という。
#まあjumpとかwalkは色々やるべきなのでintで管理すべきだが……

446 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 22:49:37 ID:ulJ3MFDL]
>>444-445
ありがとん

447 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 23:18:29 ID:4nYhycH7]
ID:+lDteCCNみたいなオナニーはブログででもやってくれ

448 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 23:28:38 ID:/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のようなロートルな話は意味がないと思う。


449 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 23:30:56 ID:+lDteCCN]
なんかコンパイラを優秀な最適化屋と思ってるのがいるが、

logとビットシフトでは10秒も差がある。

450 名前:名前は開発中のものです。 mailto:sage [2010/01/01(金) 23:57:47 ID:1cbp2whq]
言ってることの半分もわからないけど
DXライブラリと無関係なのはわかる

451 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 00:16:20 ID:ek4oo2Ge]
まあこいつプログラム板ゲ製板どこにでも湧くキチガイなんだけどな

452 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 00:26:34 ID:08xjavwk]
どうせたいがい描画がボトルネックになるから細かいことを気にしてもほとんど意味がない

453 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 00:27:36 ID:HeY6umvi]
>logとビットシフトでは10秒も差がある。



454 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 00:33:31 ID:08xjavwk]
実際に表に出てくるパフォーマンスっていうのは「積み重ね」じゃないからな
細かいことはIOや描画の桁違いのコストで吹き飛ぶ

455 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 00:36:42 ID:txdXna1V]
コミケ終わったとたん速度はえ〜〜〜w
>>405
ありがとです
行表示できました
まだ、便利な機能があればおしえてほしいです。

456 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 11:44:35 ID:Ab6bZvqB]
>logとビットシフトでは10秒も差がある。

10秒って・・・・・・Z80とかクロック4Mhzの時代の話ですか?

457 名前:ひらしょ [2010/01/02(土) 13:50:19 ID:xqJ6LKWH]
流れさえぎってすまないが、ゲームプログラマになる前に云々の著者です。
シングルトンがああなのは、getInstanceの速度をあげるため。
if一回減らせる。描画APIラッパとかだとここ重要。
create二回で死ぬのも「二回呼んじゃダメ!」と言いながら
assertで死ぬわけで、意味のある死に方。
ゲームにおいては、
間違ったコードを書いても動き続けることは重要ではない。
間違った、あるいは非効率なコードを書いたら
すぐわかるようにしておいて、出荷までに直すべき。

458 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 14:03:41 ID:+OdFeBMV]
平山さん?SE-GA-♪

459 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 14:09:07 ID:X1WEcwoJ]
うわ、こんなスレまで見てんのかよ
老いぼれセガ社員必死だな
Seleneスレ荒したのお前だろ

460 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 14:09:36 ID:7cOQTtto]
>>459
Selene作者帰れよ

461 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 14:38:27 ID:Y2eIfDvE]
ここは有名人の集うインターネッツですね

462 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 14:41:47 ID:+OdFeBMV]
証拠うpまだー?

463 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 15:39:32 ID:HeY6umvi]
>>457>>390の書き込みに対してか

>>390はassertが何のためにあるのかも知らないただのプログラム初心者だな
スレ違いでチラシの裏にでも書くような内容を堂々と書くくらいだしな

>>459
Seleneの現行スレ、過去スレ見たけど全然荒れてないぞ
あと、お前はアンチSEGAのスレにでもいけ



464 名前:名前は開発中のものです。 mailto:sage [2010/01/02(土) 18:47:34 ID:US5QyJsT]
3.01きたな

465 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 09:52:26 ID:uXTT7Kpp]
>>457 ゲームならその仕様で良いだろうね。
”ゲームプログラマになった後の〜”の執筆もよろしくお願いします

466 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 11:10:30 ID:WXd0Gz3I]
ちょっと相談なのですが、座標はfloat型で取得していて、
マップは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);



467 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 11:12:21 ID:WXd0Gz3I]
float df = GameFrame::IdouHosei(4);
if(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);

こんな感じにすると若干思っているのとずれるんですよね…。
当たり判定なので左上の座標と右下の座標を取得するところまでは考えたのですが、
どのようにしたら実情にあったマップとのあたり判定になると思いますか?

468 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 11:25:02 ID:CHMCqqiY]
とりあえず見難いから->使っとけよ

移動させてから戻すんじゃなくて、二次元配列のマップチップなら移動先が0かどうか判定するほうがいいんじゃね

469 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 11:26:09 ID:mNxKxxAQ]
>>467
>こんな感じにすると若干思っているのとずれるんですよね…。
ちょっと分かりづらいので、何が原因でどういう風にずれるのか詳しく教えて。

470 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 11:44:39 ID:WXd0Gz3I]
>>469
うまく言えないのですが、ぶつかるべきところでぶつからないで食い込んで止まったりする、という感じでしょうか・・・。
あと、通行可のはずのところに入れなかったり。
マップに入れるところ、入れないところを作りたいのですが。


471 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 11:52:19 ID:v00n4e/G]


何でもそうだが、

条件判定は少なければ少ないほどよい。
っていうか現場でifififififififififififififififif重ねる奴は怒られる。

switch-caseで済む場合もあれば
ビットシフトで済む場合もある

俺はswitch-case大嫌い
下に来るまでクロックを食いながら来るからだ
だから個人的にはビット演算以外認めない
ビット演算なら、立てておけば何が来ても一瞬だからだ

472 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 12:06:18 ID:v00n4e/G]
ビット演算が嫌いだったり何らかの理由でどうしてもswitch-caseにしなければならないのなら
ステータスに数字を割り振って、その値が指すものに直に飛ばしてもよい

擬似テーブル方式だな
内心嫌だった

とにかく、ifififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififififif重ねるのは見た目にもよくないし
実行速度的にも良くないので絶対に改めるべきだ。
単純なswitch-caseも絶対に避けるべきだ。10項目あったら10項目めに来るまで最低11クロックかかる。
11クロックもあったらシェーダを3回も回せる。
じつにもったいない話だ。

473 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 12:07:15 ID:aWVerO1p]
まず

x=x1/32;
y=y1/32;

x=x1/20;
y=y1/15;

じゃないか?

その上でマップに当たった場合、
ギリギリまでキャラクタを移動させる処理が足りない。
それをやらないと、キャラクタがブルブル震える。

あと変数の名前をもうちょっと考えてやろうな。
配列の引数に渡すセル番号の値がキャラ座標と同じx,yはひどい。
規格が違う。



474 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 12:10:36 ID:CHMCqqiY]
とりあえずマップが格子状ならキャラクターのx,yも同じ値で管理すべき
実際の位置は表示部分で考えるか、滑らかな動きがいいなら別途キャラクター表示x,yを用意して補正してやる

475 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 12:15:25 ID:mNxKxxAQ]
>ちょっと相談なのですが
という言い回しだったので「アルゴリズムを提案してほしい」ということかと思ったのに、実は「バグを見つけて下さい」ということだったとは・・・
>>473で解決だな。

476 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 13:43:46 ID:+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] をチェックしてやらんといかん
他も変えるべき個所はあるがとりあえずここまで


477 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 13:47:15 ID:+Y7mHkgr]
間違えたw
>map[y1][x1], map[y1][x2], map[y2][x1], map[y2][x2] をチェックしてやらんといかん
はなかったことね
取りあえず4隅をチェックするということ

478 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 14:02:44 ID:+Y7mHkgr]
あとね、ID:WXd0Gz3I のことやろうとするとね、結構大変だから、俺もやったけど
引き返すなら今のうちかも、特に初心者は
ある程度慣れた人ならできるだろうけど

俺の場合は下行くか上行くか左行くか右行くかによって場合わけで上の人が嫌いって言ってたswitch-caseでやったけど
まあ上手いことやればswitch-case使わなくてもできるんだろうけど
俺の場合は上行った場合は左上と右上の2隅チェック、
右行った場合は右上と右下の2隅チェック、以下略
ってやってったと思ったんだけど

479 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 14:31:11 ID:CHMCqqiY]
初心者が誤解するとアレだから一応言っておくけどswitch-caseは基本JMPだから。

480 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 15:24:02 ID:WXd0Gz3I]
あたり判定みたいに右下と左上のみの判定じゃ難しいみたいですね。
なんとなくそれっぽい動きができればそれでいいのですが…。
switch-caseも一度考えてみます。

481 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 16:42:55 ID:TuIYpr0P]
>>480
スレ斜め読みのおいらが答えると、まず、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割で処理していっても問題無い。)

めんどくさいんで、人の書いたモノの紹介で濁すけど、
今回は、基本ただの四角形と四角形の判定辺りで行ける。
marupeke296.com/COL_main.html
の その4 のはじめの所を読めば問題解決するだろう。



482 名前:名前は開発中のものです。 [2010/01/03(日) 18:04:43 ID:smx+9BoV]
宇宙船を舞台にしたFPSゲームを作ろうと思っています。
次のような要素を実現したいのですが・・・
@エイリアンを倒した数によって、ヒロインのおっぱいが大きくなる。
Aステージをクリアしたあと、ヒロインのおっぱいを揉める。
@に関しては、おっぱいの大きさごとのモデルを作るのではなく、DXライブラリの
プログラムで、おっぱいだけを大きくしたいです。
Aに関しては、プレイヤーの動きに応じてちゃんとおっぱいがもにもにするようにしたいです。
DXライブラリで可能でしょうか?

483 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 18:10:25 ID:Cn7qbODV]
3D?
おっぱい以前に,さすがにFPSならDXライブラリじゃなくてもっとちゃんとした3Dゲームエンジン使った方が結果的にずっと楽だよ



484 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 18:12:54 ID:FbdCmvgh]
        ,,,      ,,,,,,         : .と お 大 お エ
       _ = ~~ ``ヽ_,=''~´  ´~ヽ    :  は こ き .っ イ
    _= ~               ヽ   : 思 が く  ぱ リ
    ~=、    ミゞ、  , -彡     ヽ.  : わ ま .し. い ア
       ~=、、、Cl~evj <e~}6)_   、、、ミ : ん  し  よ を .ン
        ミ.~~ /', ゚ ;'7  ミ7ヾ~- 、  : か  い う    の
       ≡   (','゚, '.人  ゝ |  ヽ  : ね     な    命
        `=  `ー'   iノ'  | / |          ん    で
         ~ーノノノノノ'′               て



  _  ∩ピタ
(; ゚д゚)
し   |
|   |
し ⌒J



   ( ;´゚д゚)     ・・・・・・・・・
  c(,_U_U ガク



            ( ;´゚Д゚)   おっぱいは何のためにあるんだー
           c(,_U_U
 _,,..-―'"⌒"~⌒"~ ゙゙̄"'''ョ
゙~,,,....-=-‐√"゙゙T"~ ̄Y"゙=ミ
T  |   l,_,,/\ ,,/\

485 名前:名前は開発中のものです。 [2010/01/03(日) 20:05:43 ID:wq7ATXDp]
>>482
3Dメッシュの1部分の頂点座標を変更することが出来れば可能ではないだろうか
DXLibではメッシュの中の1点の頂点情報を変更する関数が見当たりませんでした
直DirectXではLockVertexBufferで頂点情報を抜き出し、一部変更してからUnlockすれば書き換えできる
その他知る限りだとDarkBasicのSET VERTEXDATAがそれらしき機能かもしれない
自分はボーンの使い方わかないので、頂点書き換え方式でキャラのモーション作ってます

486 名前:名前は開発中のものです。 mailto:sage [2010/01/03(日) 21:49:29 ID:v00n4e/G]
シェーダでやったほうが1000倍ラクだと言っておく

487 名前:名前は開発中のものです。 mailto:sage [2010/01/04(月) 00:50:49 ID:96m9JQJM]
おっぱいシェーダw

488 名前:名前は開発中のものです。 mailto:sage [2010/01/04(月) 08:25:51 ID:TtKqpyJC]
究極のおっぱいシェーダーをダウンロードできるところを教えてください
おっぱいはTonnyかべっかんこみたいなのが好みです

489 名前:名前は開発中のものです。 mailto:sage [2010/01/04(月) 11:15:32 ID:fBgUH+Pe]
makeしたら負けやと思う




490 名前:名前は開発中のものです。 [2010/01/04(月) 15:41:04 ID:7VFKyHz5]
>>486
HLSLで頂点シェーダやったけど、メッシュ全体の平行移動しかわからない
一部分の頂点座標を動かすってoffset引数使うとまでは調べられたが情報全然ありません
どうやってやるのでしょうか

491 名前:名前は開発中のものです。 mailto:sage [2010/01/04(月) 16:44:21 ID:R2vcIv7j]
スキニング

492 名前:名前は開発中のものです。 mailto:sage [2010/01/05(火) 23:31:28 ID:V0sHGwwt]
3Dゲーム作ってるんだけど、キャラクターモデルの大きさとかって影響あるの?
ビットマップと違って3Dはラスターデータだから、データの重さにはあまり影響ないように思うんだけど。
テクスチャの大きさが影響するとか?
もしそうなら、大体どれくらいの大きさのモデルが基準になるんだろう。

493 名前:名前は開発中のものです。 mailto:sage [2010/01/05(火) 23:58:55 ID:7uq6yiIC]
サンプルを参考にゲームを作り、1面、2面…とバラバラにcppを作ったのですが、
これを一つにまとめて、クリアしたら次の面にいくようにしたいのですが、どのような方法がありますか?



494 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 00:27:54 ID:lKDLfFv0]
>>492
ポリゴン数とテクスチャサイズはパフォーマンスに影響するよ。
市販のゲームを参考にすると良いと思う。
ttp://www.geocities.jp/gamerabbits/programing_08.htm

>>493
「#include」「extern」を使う。
ttp://www.geocities.jp/ky_webid/c/032.html

495 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 02:00:14 ID:odLPnjyO]
ポリゴン数の話でなく、オブジェクトのサイズの話の方なら
3DCGソフトによって座標系や単位もバラバラなので関係ないよ。
ただ作業上の手間はあるので、サイズは統一しておいた方が
良いとは思う。
Dxライブラリの場合は、メタセコに合わせているので市販の3DCG
ソフトから直接xで書き出した場合は、極小で表示されると思う。
3DCGソフト側で適正なサイズでモデリングするか、メタセコ経由
してサイズを調整するのが無難かも。

>>493
switchとかでもできるけど、シーン(面)ごとにクラスに分けてるなら
基底のクラス作ってそっから各面を派生させたほうが楽かも。
シーン遷移(シーケンス遷移)やstateパターンとかでググるといいかも。

496 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 02:15:00 ID:ngavL09N]
質問者のレベルを考えると

 if ( scene == SCENE_TITLE ) Title();
 else if ( scene == SCENE_PLAY ) Play();

でも良い気がした。

497 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 02:17:06 ID:BbbKJDe6]
関数ポインタなんてどですたい

498 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 02:41:18 ID:T+FI4egH]
モデルの大きさは1以下にしたほうがいいとか
どっかに書いてあった気がする

浮動少数点の精度がどうたらこうたらで

499 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 16:02:24 ID:AxwVnUF1]
void model_load( char *file,int zx, int zy){
〜略〜
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 が読み込めませんでした」とか怒られる
ちゃんとファイルを置く場所も間違ってないのに・・・

500 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 16:15:50 ID:Yz0j5Uar]
それはね、ほら、あれだよ

501 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 19:54:12 ID:+MjWEeUN]
ファイルを置く場所が間違ってないなら、そのファイルが問題なんじゃないだろうか。
試しにDxLibのサンプルのファイルに置き換えてみるとかどうだろう。

あと念のため、>>301-302も見てみてね。

502 名前:名前は開発中のものです。 mailto:sage [2010/01/06(水) 21:30:52 ID:AxwVnUF1]
・・・回答ありがとう。解決したよ・・・

たった今、もの凄い恥ずかしいミスをしている事に気づいた。ぅゎー

503 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 00:27:42 ID:YFEgAVA7]
うまくいかないのでやり方を教えてほしいのですが、

story.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に戻るようにしたいのですが、どうしたらいいですか?



504 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 01:03:02 ID:TMdG719d]
enum
{
  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
  }
}

505 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 01:04:01 ID:TMdG719d]
あ、キーを押した瞬間だけ検知するロジックが必要だな

506 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 01:10:32 ID:TMdG719d]
bool before_key_state = false;
bool 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
}

507 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 01:11:44 ID:TMdG719d]
こうか。。超適当
chk_key(){
  before_key_state = now_key_state;
  if(GetJoypadInputState() & PAD_INPUT){
    now_key_state = true;
  }
  else{
    now_key_state = false;
  }
}

508 名前:名前は開発中のものです。 [2010/01/07(木) 15:40:47 ID:4ItCtcBu]
上記のchk_key関数を作ってGameClear内に呼び出すようにしたのですが、
方法が悪いのか、やはりキーを押している間しか画像が表示されません。
現在このような形にしています。

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);
}

509 名前:名前は開発中のものです。 [2010/01/07(木) 15:43:45 ID:4ItCtcBu]
if(cstate == START){
以下を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;
}
}
というような形になっています。

510 名前:名前は開発中のものです。 [2010/01/07(木) 15:52:30 ID:4ItCtcBu]
キーを離すと「cstate = START」の状態に戻っていると思います。
if(key & PAD_INPUT_B){ }内の cstate++;の前後に
if(cstate == START){ を入れるというのも試してみたのですが、
やはりうまくいきません

511 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 16:22:43 ID:3PYGN21/]
そりゃ cstate はローカル変数だからな
それじゃあその関数呼ばれるたびに 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;

512 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 16:39:31 ID:4ItCtcBu]
ありがとうございます。
確かにintでは値の保持ができませんね…。気が付きませんでした。
静的変数にしなくてはいけなかったんですね。
あとキー入力の部分もありがとうございました。
考えていた通りに動かすことができました。

513 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 16:45:13 ID:tQIgGLUE]
DxlibをC#で使ってる解説サイトとかないかな?




514 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 17:40:30 ID:eYJAziPK]
>>513
C#版は一部の関数が使えないこと以外はC版と同じ。
readme.txtに書かれていること以上に解説することがないから解説サイトもないよ。

515 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 22:19:47 ID:TMdG719d]
static変数使うと初期化がうまくできなくなりがちなんだよなあ

516 名前:名前は開発中のものです。 mailto:sage [2010/01/07(木) 23:25:56 ID:eYJAziPK]
>>515
別に静的変数を使わなくても実装できるよ。
せっかく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)
{
// 何らかの処理
}

517 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 02:41:50 ID:8yWASrLd]
態々クラス化する程のことか
少なくとも手間は普通にコーディングした方が全然掛からないが

518 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 09:30:18 ID:TquDKlBD]
ならその方法で良いんじゃない?
クラス化はあくまで一例でしょ
君のいう普通がどんななのかは知らないけど

519 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 21:55:23 ID:G0v30nLn]
スクリーンのある位置のpixelが、
何色を表示しているかわかる方法ってありますか?

520 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 21:59:21 ID:UpbwAmjx]
ある

521 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 22:04:52 ID:3zMDBTld]
ある。

522 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 22:08:20 ID:G0v30nLn]
GetPixelですか?


523 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 22:11:52 ID:3zMDBTld]
なんでそれを聞く必要があるの?リファレンスにも書いてあるし自分で試すことも出来るのに



524 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 22:16:19 ID:5mIUw3Vj]
>>523
言いたいことは分かるけど、おまいさんに突っ込む資格は無いだろうw

525 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 22:23:08 ID:G0v30nLn]
>>520,521,523,524
なんとか出来そうになりました
ありがとうございます

526 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 23:05:49 ID:qPTthljo]
ワロタ

527 名前:名前は開発中のものです。 mailto:sage [2010/01/08(金) 23:08:41 ID:hMOVMPlC]
できそうってまだできてないのw

528 名前:名前は開発中のものです。 mailto:sage [2010/01/09(土) 10:14:37 ID:D2rGgWHr]
ストライクウィ○チーズ保管庫画像取得
maniax.dlsite.com/work/=/product_id/RJ057302.html
結構使える

529 名前:名前は開発中のものです。 mailto:sage [2010/01/09(土) 10:31:31 ID:KNCSUVMR]
>>528
wgetでおk

530 名前:名前は開発中のものです。 mailto:sage [2010/01/10(日) 04:28:31 ID:PNNRGsjZ]
ゲームプログラマになる前に覚えておきたい技術を買ったんだけど
難しすぎるだろこれ
DXライブラリのサイトのほうがどれだけわかりやすいか

これは勉強する本じゃなくて、もう理解してる人が確認する
ためのもんか?

531 名前:名前は開発中のものです。 mailto:sage [2010/01/10(日) 04:43:49 ID:ePiCCxYA]
少なくとも入門書レベルなら、他人に教えてあげられるくらいの実力は要ると思う。
それでもプロとしてみるなら初心者だろうね。

532 名前:名前は開発中のものです。 mailto:sage [2010/01/10(日) 04:58:47 ID:PNNRGsjZ]
何をやってるかはわかるんだけど、自分の力だけではコード書けない
結局サンプル見ながらそれを打ち込むだけ
こんなんじゃ意味ないでしょ?

買うのまだはやかったなー

533 名前:名前は開発中のものです。 mailto:sage [2010/01/10(日) 05:01:50 ID:ePiCCxYA]
とりあえず一番最初の倉庫番チャレンジしてみたらどう?
自分は昼から始めて夕方までかかった orz



534 名前:名前は開発中のものです。 mailto:sage [2010/01/10(日) 07:32:15 ID:JParRIfb]
>>532
最初は意味わかんなくて、できる人のソースをコピペ。
次に少しずつソースを読解できるようになり改造していく。
そしてやっと自力ですべて書けるようになる…のが
普通の流れだと思うよ。

ひらしょー本は、初心者に構造的に説明しようと誠実に書いて
くれている結果、冗長で読みにくくなった部分はあるとは思うけど
必要なことは抑えてある本だと思うので、まずは本に書いて
ある事が分かるように勉強していけばいいんじゃないかな。

何が分からないかにもよるし、教え方の手腕の問題もある
だろうけど、すぐに理解できちゃうような内容しか書いて
いない本だとお金出して買う価値もないと思うし、
ゲーム関連技術がもし簡単に書けちゃう内容だと、こんなに
解説本も出ないと思う。

535 名前:名前は開発中のものです。 mailto:sage [2010/01/10(日) 11:04:17 ID:Rc1hlYFq]
将来使うはずだと無理矢理クラスを使って書いてるけど
今のところ決定的にcに比べて便利だと思うところはないなぁ
確かに変数と関数を一塊にできるのは気持ちがいいのだが・・・






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<266KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef