DXライブラリ 総合スレッド その4
at GAMEDEV
1:名前は開発中のものです。
09/08/09 21:55:50 TrjuCGgx
Cを習得した程度のスキルでも、
GUIのゲームを比較的容易に作成する事を可能にする、
「DXライブラリ」に関するスレッドです。
DXライブラリに関するテクニックなどの情報交換などを行う事で、
多くのDXライブラリユーザのスキルの向上に役立てたら幸いです。
【公式】
URLリンク(homepage2.nifty.com)
【過去スレ】
DXライブラリ 総合スレッド
スレリンク(gamedev板)
DXライブラリ 総合スレッド 2008
スレリンク(gamedev板)
DXライブラリ 総合スレッド その3
スレリンク(gamedev板)
2:名前は開発中のものです。
09/08/09 21:59:02 9DTU34Ts
>>1乙
3:名前は開発中のものです。
09/08/09 23:44:46 yLk0K061
戻15/990:名前は開発中のものです。[sage]
2009/03/31(火) 18:20:23 ID:3yX1QyX+
116 名前: 名前は開発中のものです。 Mail: sage 投稿日: 2009/02/07(土) 16:18:41 ID: Pn1Dl7Zh
アフォBlog C言語勉強したけどゲーム作れないぞコラって人向けに
URLリンク(afoafodayo.blog84.fc2.com)
やっとみつけた
はてなブックマークの検索性の悪さは異常・・・
--- 以下スレ情報 ---
DXライブラリ 総合スレッド その3 (990)
スレリンク(gamedev板)
4:名前は開発中のものです。
09/08/10 01:28:46 x4cP5rNi
クラスで挫折した
5:名前は開発中のものです。
09/08/10 01:37:49 bFMOlul4
もうクラスなしじゃ生きていけない
6:名前は開発中のものです。
09/08/10 01:51:32 QAwN9V2J
ライブラリと関係ない話をすんなとは言わねーが、C言語そのものを使い慣れてない
レベルの質問は勘弁してくれ
ここはC言語初心者質問スレじゃねーから
7:名前は開発中のものです。
09/08/10 07:42:59 61l6TBny
>>4
もっと頑張れよ
俺も1回挫折して再度勉強し直したけど使える道具が増えていろいろ記述が楽になったから
ちゃんと苦労なりの見返りはあると思うよ
8:名前は開発中のものです。
09/08/10 08:38:41 ejPisMfv
4じゃないけど、俺もクラスはよくわからん。
というかなぜそういう事をする必要があるのか、
ゲーム製作においてどういうメリットがあるのか、
どういうときに使うと便利なのか、
が解らないから、なかなか頭に入らない。
9:名前は開発中のものです。
09/08/10 08:59:13 QAwN9V2J
・リソース解放処理をデストラクタに書くと楽
・何個も実体を作るような構造体を扱う場合、構造体へのポインタを関数に渡すよりも、
勝手に*thisを作って内部的に同じことをしてくれるクラスの方が楽
10:名前は開発中のものです。
09/08/10 09:05:04 bFMOlul4
>>8
俺もポインタとか必要になるまでよくわからなかったし、
必要になれば覚えるもんだよ
「あ! 今やりたいことコレ使えばできるじゃん!!」
って気づいた時の喜びといったらもうね
11:名前は開発中のものです。
09/08/10 10:16:45 EzwBEj6R
フンドルワラタ
12:名前は開発中のものです。
09/08/10 10:52:15 QAwN9V2J
フンドレの人はマジでC言語初心者スレとか探した方がいいな
13:名前は開発中のものです。
09/08/10 10:58:48 HlYTjnic
自動リソース管理
ポリモーフィズム
これだけでも覚える価値あり
ポリモーフィズムはすごいゲームと相性いいしね
14:名前は開発中のものです。
09/08/10 12:31:05 xD0qaraW
>>10
分かる分かるw 俺もまさにそうだ。
きっかけはリプレイ機能付けたいな、だったかしら
15:名前は開発中のものです。
09/08/10 15:24:33 Ug4ZM9mI
俺もクラスよく分からんのだが
STGの弾作るときに便利だと聞いた
今から弾処理だから勉強してみる予定
16:名前は開発中のものです。
09/08/10 16:52:41 QAwN9V2J
structとclassは全く同じ。classはデフォがprivateになっただけの構造体。
メンバ関数は、隠れ引数として構造体へのポインタ*thisがこっそり付いただけ。つまり、
以下の二つは大体同じ意味のコード。
// Cっぽい版
struct vector2d {
float x, y;
};
inline void rotate_vector2d(vector2d *this, float theta) {
vector2d old = *this;
this->x = old.x * cosf(theta) - old.y * sinf(theta);
this->y = old.x * sinf(theta) + old.y * cosf(theta);
}
// C++版
struct vector2d {
float x, y;
void rotate(float theta) { // vector2d *this は隠れ引数として勝手に入る
vector2d old = *this;
x = old.x * cos(theta) - old.y * sin(theta); // メンバ変数アクセスは勝手にthis->が入る
y = old.x * sin(theta) + old.y * cos(theta);
}
};
仮想関数は、派生クラスの仮想関数へのポインタ一覧vtblが隠れグローバル定数として
用意されてて、派生クラスの実体にはvtblへのポインタであるvptrが隠れメンバ定数と
してくっついてる。で、仮想関数を呼ぶ時はvptrを通して参照する。
thisと違って、vtblやvptrには普通は触れない。触る必要も無いし。
クラスの仕組みはこんなもん。あとは使い方次第。
コンストラクタには変な仕様が色々くっついてるから覚えた方がいいけどな。
17:名前は開発中のものです。
09/08/10 16:55:28 ++6V/igm
うまく使えば
new Bullet(
this, // 親は自分で
RAD(270), //270度方向に
10, //1フレーム10pixelで動く
GROUP_FRIEND //味方の弾
); //を作るよ!
ってできて楽しいだけ。
18:名前は開発中のものです。
09/08/10 17:08:08 jE6nNtzy
こういうの見せられると、
「俺って実はプログラム全然できてないんじゃないか」
と思うなぁ。
一応ゲームはできてるんだけどねw
19:名前は開発中のものです。
09/08/10 17:16:17 QAwN9V2J
完成品が一つも出てこないよりはいいんじゃね?
20:名前は開発中のものです。
09/08/10 17:28:46 ++6V/igm
DxArchiveのソース見てたら単にファイル格納&暗号化じゃなくて圧縮&暗号化だったんだな
各APIでも読み込めるしかなり使いやすいな
21:名前は開発中のものです。
09/08/10 18:10:02 91ixwnBP
DxArchiveのエンコードとデコードをプログラムからやる方法教えてください
22:名前は開発中のものです。
09/08/10 18:22:48 g7oYbweh
つ URLリンク(homepage2.nifty.com)
23:名前は開発中のものです。
09/08/11 00:22:51 y+GUJ2eW
クラスが便利なことを実感するのは2個目のゲームを作るときだと思う俺ガイル
自分でつくったものをブラックボックス的に使いまわせるってすごい便利
24:名前は開発中のものです。
09/08/11 00:36:49 ubRnnBVT
必要性を感じないなら無理にクラスを使う必要はない。
重要なのはクラスを使うことではなく分かりやすいプログラムを書くこと。
分かりやすいプログラムを追及していくとおのずとオブジェクト指向/クラスへと向かっていく。
25:名前は開発中のものです。
09/08/11 01:14:30 F+5v/k7H
ちゃんと最後に かもしれない とつけてくださいね
26:名前は開発中のものです。
09/08/11 02:11:06 L7W3nnsg
なんだそりゃ
どうしても抽象化できない病気とかならともかく
27:名前は開発中のものです。
09/08/11 02:47:06 E0sSKTbh
クラス勉強したいなー
ってことで俺は今、クラス化している。
それくらいの動機でもいいよね?
28:名前は開発中のものです。
09/08/11 02:56:03 hi68lz2+
いいんじゃないかな<動機
便利な使い方が分かると、楽しくなってくる、、、と思う
29:名前は開発中のものです。
09/08/11 03:53:37 Ev9Wt5wN
>>22
たとえばオリジナルのセーブデータをDxArchiveで暗号化して保存することってできますか?
30:名前は開発中のものです。
09/08/11 04:21:17 E0sSKTbh
>>29
ソースが公開されているように見えるが
31:名前は開発中のものです。
09/08/11 09:51:42 kbSEr/35
ファイル分割して関数書いて、で綺麗に片付くならそれでいい。
クラスに包む方が綺麗に片付くところは、クラスを使えばもっといい。
使い分けが適切ならさらにいい。
32:名前は開発中のものです。
09/08/11 12:46:59 88dfSPXH
同じようなゲーム作りたくないから
クラスが役に立ったことはほとんど無いな
描画系関数はかなり再利用するから
ファイル分割して綺麗に関数をまとめた分にはかなり役に立つ
33:名前は開発中のものです。
09/08/11 13:15:45 jm9PqIPM
たとえばどんな関数をつかいまわすの?
34:名前は開発中のものです。
09/08/11 13:25:12 bYgbIZyE
モザイクかけたりボカシかけたりシャープにしたり
ノイズ入れたり回転させたりセピアにしたり
35:名前は開発中のものです。
09/08/11 13:36:49 jm9PqIPM
よくわからないけどそういうのって関数一つにできるもんなの?
Mozaiku(x1,y1,x2,y2)みたいに?
36:名前は開発中のものです。
09/08/11 13:38:13 88dfSPXH
うん
37:名前は開発中のものです。
09/08/11 13:48:11 jm9PqIPM
いったいどうやって?画面情報を取得して、CPUのほうで計算して上から貼付けたりするの?
38:名前は開発中のものです。
09/08/11 13:49:48 88dfSPXH
うん
39:名前は開発中のものです。
09/08/12 13:04:35 /zSclh+b
シーンをクラス化する利点がよくわからなくて
switch文で頑張る俺
40:名前は開発中のものです。
09/08/12 14:01:46 3OGNII1m
if-eilse if-elseでもswitchでも関数ポインタテーブルでも仮想関数でも普通に書ける上で
switchが総合的に見て一番いい状況だからswitchで頑張る、ならそれでいい
41:名前は開発中のものです。
09/08/13 01:13:11 u+NBJI2f
組み方によっては、シーンを追加するたびにシーン管理のコードを変更しなきゃならないからなあ。
せっかくライブラリっぽくしたのに、いちいち弄らされるのは面倒だ。
そこがクリア出来るなら何でもいい。
42:名前は開発中のものです。
09/08/13 02:32:38 tx0/U4pP
キャラクタを白く点滅フラッシュさせるためには
それ用にマスク画像を用意しないとできないかな?
43:名前は開発中のものです。
09/08/13 02:49:29 wLlGHcGf
少なくとも俺は、同じ事をしようとした時、それしか解決策を思いつかなかった。
44:名前は開発中のものです。
09/08/13 03:37:12 uVGvNX64
SetDrawBrightで輝度値設定してやるとか
45:名前は開発中のものです。
09/08/13 03:54:30 wLlGHcGf
いや、SetDrawBrightだと最高100%までしか輝度あげられなくて、
その100%ってのは、画像そのまんま表示って事なのよ。
つまりSetDrawBrightは暗くはできても明るくはできない。
46:名前は開発中のものです。
09/08/13 04:13:42 uVGvNX64
SetDrawBright(0,0,0);//暗く
SetDrawBlendMode(DX_BLENDMODE_INVSRC);//反転
とするのはどうかな
47:名前は開発中のものです。
09/08/13 07:09:05 fyRM2WT2
それだけZバッファを適用して、きつくした白いフォグを適用させるって冗談みたいな方法もあるぞw
48:名前は開発中のものです。
09/08/13 09:08:42 hlVZHvkF
武器とか魔法のデータってどうやって管理してる?
やっぱり大本のクラスを作って継承させる感じ?
DBとかでもりもり書いたほうが楽そうではあるんだけれど
49:名前は開発中のものです。
09/08/13 10:27:48 ymWx9+cu
>> 42
パレット操作
50:名前は開発中のものです。
09/08/13 11:29:30 FIgxQyht
そういやパレット操作の命令が追加されたんだっけ。
それを使って白い画像を作って、グラフィックハンドルまで用意しておけばできるはずだな……。
51:名前は開発中のものです。
09/08/13 13:06:09 8SGCfcLw
>>48
struct(構造体)を持つSTLのリストを作って、そこで管理
新しく何かを手に入れたならば、リストに新しい構造体を埋める
代入する値は手打ち、つまり長々と代入文を書く。DB化してもよいが労力は大差ない
これは仲間キャラクターや戦闘の管理に向いているだろう
もう1つは数値をひとつ代入するリストを作って
そこに例えば武器ナンバー001番って値を入れて
必要な時に武器の威力や効果をまとめた関数を読み出す
この方法は数値が絶対に変わらない武器や道具の管理に向いている
最後に、bool型のスイッチを作って、Trueなら入手した、と考える方法
この方法は魔法やイベントフラグなど、数値も数も考えない物の管理に向いている
52:名前は開発中のものです。
09/08/13 22:01:59 hlVZHvkF
>>51
ありがとう
2つ目のパターンがいいのかな
どうも膨大になっちゃってたからいろいろ試してみる
ありがとう
53:名前は開発中のものです。
09/08/13 22:09:12 LkhPG9Xp
構造体の代入じゃ駄目なのかそれ
54:名前は開発中のものです。
09/08/13 23:45:36 u+NBJI2f
テンプレで、名前や数字を変えるだけで何とかなるものと、それだけでは表現できないものと、両方がある。
武器や魔法は前者であることが多いと思う。
ダメージなどが違うだけでアルゴリズムは変わらない。回復/支援魔法なども入れても数パターンで済む。
TRPG的な魔法とかはコンピュータゲームじゃ作りにくいだろうし。
逆に、イベントなどは後者で作られる。
クラスの継承なり、関数ポインタなり、外部スクリプトなりで、イベントごとにまるっと別の処理になるだろう。
ただしその場合でも、共通データを格納する部分は、武器や魔法と同じようなテンプレ処理を利用することになるかも。
55: ◆GRGSIBERIA
09/08/14 00:12:28 FT3Wa2QE
>>51
戦闘で魔法を使うんならその方法でいいだろうけど、
呼び出すときに関数ポインタ使わなきゃならんから面倒くさくね?
データ的には安上がりでいいんだろうけど、可読性考えると怖いなあ……。
56: ◆GRGSIBERIA
09/08/14 00:19:13 FT3Wa2QE
ごめんなさい。
二番目の話です。
57:名前は開発中のものです。
09/08/14 00:50:19 E9/t+ChI
基本基本クラスで例外は派生クラスでいいんじゃね
58:名前は開発中のものです。
09/08/14 01:01:23 Bq2DtYMd
まあ別に仕事でプログラムする以外だったら好きなようにすればいいんじゃね
59:名前は開発中のものです。
09/08/14 15:49:45 X3RFlmNR
dxライブラリがSetDrawScreenで使っているバックバッファに
dxライブラリを介さずに絵を書き加えてやる方法はないもんかな・・・
それができるだけで結構3D表示させられそうなんだが
60:名前は開発中のものです。
09/08/14 16:36:31 zyAixWsB
>>59
俺の場合3Dは行列系関数とDrawPolygon3Dで間に合ってるけど、
それって裏画面にDirectXで描画するってこと?
61:名前は開発中のものです。
09/08/14 16:39:24 yqfw1t8Z
うん
62:名前は開発中のものです。
09/08/14 16:42:41 X3RFlmNR
>>60
そそ。それでxファイルにして読み込んだ
ちょっと複雑な形を描きたいのさ
ちなみに直接表に描かせたら
最前面にチラつきながら描かれた。当たり前だが
63:名前は開発中のものです。
09/08/14 16:44:04 gSsKeH9y
DX3D持ってたらそれ使うのもいいかも
使ったこと無いから分からんが
64:名前は開発中のものです。
09/08/14 16:45:05 nG17WJCb
3Dを扱うのだったら、 DarkGDKがお勧め
使い勝手は、DXライブラリとほとんど同じ。
DarkGDK
URLリンク(wiki.game-develop.com)
DarkGDKの3Dデモ
URLリンク(gamdev3.hp.infoseek.co.jp)
65:名前は開発中のものです。
09/08/14 16:57:46 zyAixWsB
DXライブラリの内部構造についてだったら公式で質問するのがいいかも
関係ないけど俺は自前でmqoファイルを読み込んでDrawPolygon3Dで表示させてる
アニメーションさせないならこっちのほうが簡単な可能性も。
66:名前は開発中のものです。
09/08/14 17:20:43 X3RFlmNR
>>63-65
ありがと
せっかく用意されてるんだからDrawPolygon3Dでやるのが一番かねえ
半日ぶんの作業ムダ\(^o^)/になるけどさ・・・
67:名前は開発中のものです。
09/08/14 18:06:22 3WJxATTy
そこまでやるならDirectXで全部やる手も有力じゃね
68:名前は開発中のものです。
09/08/14 21:00:47 29Ur8y7j
DXライブラリの3Dが弱いってのは周知といえば周知だからなあ
なんともいえない感じ
自分もひとつ聞いていいかな
DrawFormatStringToHandleで文字出すときに文章列を垂直に描画する方法ってないものか
縦書きではなくあくまで横書きの文章を90度倒した感じでだしたいのだけれどどうだろう?
いまは画像ファイルに書き起こしたものをスタブで表示してるんだがそれにも限界があるなあと思って聞いてみた
69:名前は開発中のものです。
09/08/14 23:59:27 zyAixWsB
>>69
つDrawFormatVStringToHandle
多分コレ
70:名前は開発中のものです。
09/08/15 00:06:33 6Y2Lsqny
ありがてえありがてえ
ヘッダ読んだらほんとにあったよ
やっぱ一度読むべきかなあ
ともあれサンクス
71:名前は開発中のものです。
09/08/15 00:06:58 /+RAh+Ze
感動した
72:名前は開発中のものです。
09/08/15 04:30:18 0tJ1Sg/h
ヘッダ読むとドキュメント化されてないすげえ関数いっぱい紛れてるから一度は読むべきだよな
73:名前は開発中のものです。
09/08/15 05:38:43 0FgKCDOQ
でも公開されてないって事は動作保証もされてないんでしょ?
ちょっと使うには不安だなぁ。
自分だけで楽しむモノを作るのならともかく。
74:名前は開発中のものです。
09/08/15 09:50:43 0tJ1Sg/h
フリーのライブラリで動作保証www
75:名前は開発中のものです。
09/08/15 10:23:55 ZOL661pL
フリーのライブラリに過度なサポートを求めるのもアレだと思うけど、
管理人はちゃんとリファレンスに載ってない関数も仕様のうちに含めてやってくれてるよ
自分で動作確認したり、ヘッダ読んだだけで用途が分かる人なら使っても問題無し。
76:名前は開発中のものです。
09/08/15 12:54:50 KTR4wq9i
DrawFormatStringをオーバーロードしてキャストによる警告を防ぎたいんだけど
どうやってオーバーロードすればいいんでしょうか
, ... ) ; ←最後のコレのせいでうまくいかない
77:66
09/08/15 22:42:39 eXbOcFmf
ところでDXlibとは別口で用意させたバックバッファを適当なサーフェイスに写し取って、
CreateGraphFromMemでハンドル取らせてDrawGraph、というのもやってみたが
やっぱりうまくいかなかった
というかエラー直していく気力が尽きた
78:名前は開発中のものです。
09/08/15 23:30:18 vKUvgt96
>>76
こういうことだろうか
int DrawFormatString(double x, double y, int Color, const char *FormatString, ...)
{
char buf[1024];
va_list args;
va_start(args, FormatString);
vsprintf(buf, FormatString, args);
va_end(args);
return DrawString((int)x, (int)y, buf, Color);
}
79:名前は開発中のものです。
09/08/15 23:45:00 KTR4wq9i
>>78
こんな方法が…ってよくわかってないけど
vsprintf→vsprintf_s で警告が全部消えてくれました
ありがとうございました
80:名前は開発中のものです。
09/08/16 11:37:57 tL1KdmQ7
3Dで描画した画面にエフェクトをかけたいんだけど、
裏画面の内容をテクスチャにコピーするか、
テクスチャにZバッファを使って3D描画させる方法は無いものだろうか……
81:名前は開発中のものです。
09/08/16 16:11:57 9Wblhgl3
>>80
ライブラリ使わない方がいいんじゃね?
専門書買ってDirectXを直接叩いた方が早いと思う
ぶっちゃけゲーム性に影響出るような話じゃないし、うじうじ悩むくらいなら仕様にした方が
82:名前は開発中のものです。
09/08/16 16:52:25 tL1KdmQ7
>>81
やっぱりDXライブラリじゃ無理かなー
DXライブラリだけでここまで出来るんだぜ!ってのを示すのが
ゲームのコンセプトの一つだったりするんで、このまま頑張ろうと思う
83:名前は開発中のものです。
09/08/16 17:17:23 DZlUccKL
PlayMovieで動画再生できるのにサンプルプログラムのDrawGraphを使った方法では動画再生できませんどうなっていますか
84:名前は開発中のものです。
09/08/16 23:45:33 DZlUccKL
ちなみに音は再生されます。原因が分かる方いらっしゃいますでしょうか。
85:名前は開発中のものです。
09/08/16 23:52:04 axVCKY3T
必要なコーデックがインストールされてないとか
86:名前は開発中のものです。
09/08/18 08:42:08 RhXPi4iH
一切WaitTimerとかのウェイト系入れなくても60FPSで動いてるように見えるんだけどどこかで自動的に止まってるの?
止まってるとしたら完全に頼り切っていいのかな?環境によってはウェイト入らない・・・なんてことないよね?
87:名前は開発中のものです。
09/08/18 09:43:47 5Sn+aO70
画面の裏ページを表ページに反映するのに
ウエイトかかってると思うの
88:名前は開発中のものです。
09/08/18 09:55:18 sXr4stcl
環境によってはFPSが変わると思うの
89:名前は開発中のものです。
09/08/18 11:33:49 00xLRELk
>>86
ScreenFlip使ってるんでしょ。デフォルトだと垂直同期信号待ちしてるから
多くの場合は60FPSで固定されるよ。(環境によっては無視される)
↓の命令でFALSEにしてみればノーウェイトで動くと思う。
宣言 int SetWaitVSyncFlag( int Flag ) ;
概略 ScreenFlip関数 実行時にCRTの垂直同期信号待ちをするかのフラグセット
引数 Flag : CRTの垂直同期信号を待つか否かを決めるフラグ情報
TRUE : 待つ(デフォルト)
FALSE : 待たない
戻り値 0:成功
−1:エラー発生
解説 ScreenFlip関数の実行時にCRTの垂直同期信号を待つか、を 決めるフラグを設定する関数です。
基本的に待ったほうが画面の ちらつきが減り綺麗に表示されます。
この関数は垂直同期信号の意味を理解していて、その上で状態を 変更したい方だけが使用してください。
恐らく普通は変更する必要は ないと思います。
90:名前は開発中のものです。
09/08/18 13:21:27 zmoiJH/s
簡単だし必要な基礎知識だから、まずはティアリングとかvsyncとかでぐぐれ。
で、ScreenFlipはデフォでvsyncを取るんだが、その時に単純に待機するんで、60Hzの
リフレッシュレートのモニタで垂直帰線を待つ環境だと「たまたまいい具合に」60Hzで
動作するタイマーのような副作用が出る。だが、あくまでも偶然の副作用。120Hzの
CRTモニタなんかだと多分倍速ゲー。ライブラリの中身は見てないんで分からんけど、
DirectX9のPresentなんかだと描画領域が全部隠れたらノーウェイトになる。
まぁ、副作用に期待すんな、真面目に書け、ってこと。
余談だが、最近はもうほとんどvsync無視の流れ。洋ゲは元々vsync無視路線だったし、
Vista以降はOS側がティアリングの面倒も見てるっぽいんで。
だが、2Dゲーならvsyncは当分入れた方がいいだろうな。
91:名前は開発中のものです。
09/08/18 13:26:04 HFc5HuZS
>>90
つまり「タイマー書け」ということだな
把握した
92:名前は開発中のものです。
09/08/19 21:48:34 HjcmZFcs
スレリンク(tech板:940番)
の質問をここでしても良いでしょうか?
93:名前は開発中のものです。
09/08/19 21:58:48 0Pez5CCG
>>92
見てきた
int clsDx( void );の部分をclsDx();にすればおk
94:名前は開発中のものです。
09/08/19 22:11:53 HjcmZFcs
>>93
ありがとうございます!
95:名前は開発中のものです。
09/08/19 22:52:27 lo8N+aSi
まぁDirectXスレよりここで質問する方が正しいっちゃ正しいんだが…
ぶっちゃけ>>6だな
96:名前は開発中のものです。
09/08/19 22:54:13 MeZHtU7e
こまけぇこたぁ(ry
97:名前は開発中のものです。
09/08/20 12:27:11 /tnemE9L
こんにちは
DrawGraphなどの描画先を画面ではなく画像データにしたいのですができませんよね?
どうしてますか?
98:97
09/08/20 12:42:59 /tnemE9L
画像データというか画面以外のサーフェスに描画したいということです
99:名前は開発中のものです。
09/08/20 13:16:31 YSyk4xXm
なるほど
100:名前は開発中のものです。
09/08/20 13:35:57 nEJMnXXK
>>98
MakeGraphとかで作ったテクスチャに描画するのなら、
SetDrawScreenでDX_SCREEN_BACKの代わりにグラフィックハンドルを指定すればできる
そういうことじゃないのならわかんないや
101:97
09/08/20 13:58:30 /tnemE9L
>>100
できました!
ありがとうございました
102:名前は開発中のものです。
09/08/20 17:07:09 0+koOsTw
DrawGraphなどで有効になる透過色を白色にできないでしょうか?
103:名前は開発中のものです。
09/08/20 17:20:54 yefoTBGX
>>102
SetTransColor( r, g, b ) で透過色設定出来るよ
104:名前は開発中のものです。
09/08/20 17:22:51 0+koOsTw
ありがとうございます
105:名前は開発中のものです。
09/08/21 22:44:36 a6lala98
SetDrawScreenってふつうのグラフィックハンドルも指定できるのか・・・
どこで知ったんだ?実験の賜物とか?
106:名前は開発中のものです。
09/08/21 22:50:03 U8PTrxx1
最初のスレの頃にはもう発見されてたような……
107:名前は開発中のものです。
09/08/21 22:53:25 U8PTrxx1
あ、最初に描画可能なグラフィックを作るフラグをオンにする必要があるのを忘れてた……
>>101は大丈夫だっただろうか
108:名前は開発中のものです。
09/08/21 23:02:23 6L4KzEGj
105のおかげで100の意味が初めて理解できた。
何を言ってるんだろうと思ってた。
ありがとう100と105。
109:名前は開発中のものです。
09/08/21 23:16:16 6oCpfJQO
俺も初めて知った
110:名前は開発中のものです。
09/08/21 23:20:00 oiLCSSry
初めて知った
感動した
111:名前は開発中のものです。
09/08/22 04:26:19 4ewWT7wa
SetDrawScreen という関数に画像ハンドルを渡すことで
レンダリングターゲットを変更することが出来ます。
ただ、どんな画像ハンドルでも良いと言うわけではなくて、
レンダリングターゲットにすることが出来る画像ハンドルである必要があります。
レンダリングターゲットにすることができる画像ハンドルを作成する為には、
レンダリングターゲットにすることができる画像ハンドルを作成するかどうかを
設定する関数 SetDrawValidGraphCreateFlag に TRUE を渡して呼び出した後、
MakeGraph 関数で画像ハンドルを作成します。
int SubScreen;
SetDrawValidGraphCreateFlag( TRUE );
SubScreen = MakeGraph( 640, 480 );
SetDrawValidGraphCreateFlag( FALSE );
こうして作成した画像ハンドルは SetDrawScreen で描画先とすることが出来ます。
SetDrawScreen( SubScreen );
普通の画像として描画することも出来ます。
DrawGraph( 0, 0, SubScreen, TRUE );
ただ、この機能は他の機能に比べて正常に動作するグラフィックチップの
敷居が高いので、余りお勧めできません。
(ソフトウエアレンダリングモードでしたら確実に動作しますが)
112:名前は開発中のものです。
09/08/22 09:14:50 4ewWT7wa
透過も使いたい場合
URLリンク(hpcgi2.nifty.com)
113:名前は開発中のものです。
09/08/22 11:24:00 4ewWT7wa
うちのPCじゃ透過できなかったorz
114:名前は開発中のものです。
09/08/22 14:54:20 qJPnhRZH
ひとの形をしていなかったッ
115:名前は開発中のものです。
09/08/23 16:41:05 S7Qhx8zZ
製作中のゲームのメモリ使用量が300MBと半端ないんだが…。
どういう所を削ってけばいいんだろう。
それと、DXで製作されたソフトは内容にもよるだろうけど、
どのくらいの使用量が打倒?
116:名前は開発中のものです。
09/08/23 16:47:53 GkvvlwQe
画像や音楽データのフォーマット変換
117:名前は開発中のものです。
09/08/23 16:48:57 GkvvlwQe
実行中にメモリ使用量が除所に増えていくようならメモリリークの可能性がある
118:名前は開発中のものです。
09/08/23 16:50:31 GkvvlwQe
あとは、リソースは使いたいときだけオープンして使い終わったら開放するとか
119:名前は開発中のものです。
09/08/23 20:32:02 GokZTUUA
俺のパソコンだけかも試練が、
↑キーまたは↓キーを押している間、文字キーは1個しか入力できないの?
←キーまたは→キーを押している間は文字キーを2個入力できるのに。
120:名前は開発中のものです。
09/08/23 20:35:50 GokZTUUA
ゲームのボタン配置変えたら解決した。
X → S
Z → A
121:名前は開発中のものです。
09/08/23 20:38:29 omMMPR8c
現在のPCの仕様だから問題ない
同時押しできるキーがある程度決まってるんで、
動的なゲームだとパッド対応にしないと辛かったりする
122:名前は開発中のものです。
09/08/23 20:54:06 BIZKogr3
今のPCゲーは1G2G推奨があるから300M使ったぐらい問題ないだろう
123:名前は開発中のものです。
09/08/23 21:30:33 f9+n1yyL
>>122
それで収まってるならいいけどリークしてる場合1G超えちゃったりするから
124:名前は開発中のものです。
09/08/23 23:57:34 fzVvbF1D
>>119
キーボードは一部のキー(Shiftなど)を除いて、同時押し出来るように作られてないからな。
>>121
PCの仕様というか、キーボードの仕様だな。
しかも物理的な回路レベルでの話だから、プログラムで解決できる問題じゃない。
125:名前は開発中のものです。
09/08/24 03:15:56 04E2ZlIh
いいキーボードを使えば回避できるらしいというのを聞いた頃がある
マジ?
126:名前は開発中のものです。
09/08/24 03:20:12 I4p4xHvy
全てのキーの同時押しに対応しているキーボードもある
127:名前は開発中のものです。
09/08/24 03:34:59 NKOKVJpx
>同時押しが出来ない
コスト削減のためらしいしね。
128:名前は開発中のものです。
09/08/24 08:14:30 D9SJqUdL
パソコンによってはできない組み合わせで押すと本体から電子音がでるよね
129:名前は開発中のものです。
09/08/24 15:39:22 fDqh5B1I
Nキーロールオーバーでぐぐれ
130:名前は開発中のものです。
09/08/24 16:16:31 wBD0oA5j
画像描画するときに画面の外に描画しようとしたらスキップみたいな親切なことはライブラリのほうではやってもらえない?
自分で計算しないとだめかな
131:名前は開発中のものです。
09/08/24 17:05:40 m/vASYf5
>>130
自分で計算っていっても難しいことじゃなくない?
画面サイズの最大値か0を超えようとしたら画像に合わせて処理すればいいだけだし
132:名前は開発中のものです。
09/08/24 17:16:05 2t9nwqgt
描画範囲を指定すると、そこからはみ出したら自動的に描画スキップしてくれてるんだぜ!
指定しなかった場合でも描画先の画面はみ出したらスキップされたような……
画面内に1000回描画→凄く処理落ち
画面外に1000回描画→処理落ちなし
ってことから推測しただけだけど
133:名前は開発中のものです。
09/08/24 18:28:42 2+sT6dWW
俺は画面の内外で当たり判定の有無も変えるようにしてるから
結局判定は自前でやってる。
単純な矩形なら簡単だけど、回転ありにしたらちょっと面倒なんだよね。
まぁ最大半径求めて大雑把に判定させるだけだけど。
134:名前は開発中のものです。
09/08/25 22:51:52 YgczeX4M
ウィンドウのサイズを変更できるようにしたいと思います
それで例えば画面いっぱいに一枚絵表示したいときは、
画像をウィンドウサイズにあわせて縮小、みたいなことを全ての場面でしなくてはならないのでしょうか?
135:名前は開発中のものです。
09/08/25 23:01:16 DAVmGBeA
つ[マニュアル]
136:名前は開発中のものです。
09/08/26 00:37:14 fiAN9ZAo
135凄いな。
134の言いたい事理解できるんだ……俺は無理だった。
137:名前は開発中のものです。
09/08/26 04:38:25 sFUkJOAt
>>134
コンパイルして実行すりゃすぐわかることを何故聞く。
138:名前は開発中のものです。
09/08/26 18:36:58 qUt4mYH3
>>137
いちいち手間かけなくても画面をストレッチできるように指定できるかどうかを
聞きたかったんだと思うよ
わかりにくいけど
139:名前は開発中のものです。
09/08/26 20:19:51 vFoh53HS
最初から解像度大きめに作っておいて、SetWindowSizeExtendRateで調節がベターか?
140:名前は開発中のものです。
09/08/27 00:07:53 T/6Db6QY
mp3で四曲合計16Mほどロードしたらメモリー消費量が300Mになったんだけどこんなもんかな?
141:名前は開発中のものです。
09/08/27 00:13:07 7m3osaFh
>>140
多分そんなもん
ついでにいうと、特にメモリ内にロードしなくちゃいけない理由がない限りは
ストリーム再生したほうがいいと思うよ
142:名前は開発中のものです。
09/08/27 00:18:39 PkUzIv2U
関数一覧とか見てニヤニヤするのは俺だけじゃないはず
使いこなしきれてないけどなwww
143:名前は開発中のものです。
09/08/27 00:25:58 QySx8uSH
なんで四曲合計16Mほどなのに300Mになってしまうのん?
144:名前は開発中のものです。
09/08/27 00:28:36 T/6Db6QY
そんなもんですかサンクス
PlayMusicだとループ先頭がセットできないようなんでSoundのほう使ってます
145:名前は開発中のものです。
09/08/27 00:29:55 v/FuG6jC
>>143
詳しくないがよくわからんが
jpegとかpngだって展開したら結局BMPと同等らしいからMP3もwav並になるとか?
146:名前は開発中のものです。
09/08/27 00:36:54 gFnYY/qu
>>143
そこいら周りは、良くわからんがWMPでMP3を再生すると結構消費するな。
BGMとかは、気をつけた方が良いんだな。
147:名前は開発中のものです。
09/08/27 01:05:35 cHVgGeXQ
つSetCreateSoundDataType
URLリンク(homepage2.nifty.com)
148:名前は開発中のものです。
09/08/27 01:22:42 cJyiTera
つまり圧縮された音楽ファイルは読み込み時にデフォルトでwavファイル並の量のメモリ展開がされてるわけだな・・・
149:名前は開発中のものです。
09/08/27 12:24:29 K7QbDWYZ
Dxライブラリで原点の設定を変えることは出来るでしょうか?
WINAPIの関数でSetViewportOrgEx( HDC, X,Y ,NULL)?
と言うのがあるらしいのですが、
もしかしてライブラリ中身をいじらないと無理?
150:名前は開発中のものです。
09/08/28 08:35:35 kw3b0sCg
>>149
3Dでならビューポート行列をセットする関数があるからそれでできる
2Dなら自前でなんとかするしかない
151:名前は開発中のものです。
09/08/28 13:39:24 NuR4qvr2
>>150
ググッててその単語何度か見た気がする・・・・・・。
自前で作ってみるよ。何事も挑戦だよな
152:名前は開発中のものです。
09/08/28 14:02:58 KkzSCV0k
ちょうど自分も同じ問題にぶつかったぜ
絶対座標と、スクリーンの原点を決めれば描画時にxyからスクリーン原点の座標引くだけで行けるぽい
153:名前は開発中のものです。
09/08/28 14:21:28 QSUjzmlq
原点の設定を変えてどんなことができるようになるんだ?
154:名前は開発中のものです。
09/08/28 14:49:51 m1jmte75
楽できる
155:名前は開発中のものです。
09/08/28 16:32:56 MVZ2y/yX
>>152
それ以外に方法があるのか知りたい
156:名前は開発中のものです。
09/08/28 21:30:24 NuR4qvr2
いま「弾幕」って本のライブラリをいじってたんだけど。
Dxライブラリを使いながら座標変換の部分だけ取り出したくて、
描画処理関係のソースを必死に読んで組み込んでみたら、
まったく座標が関係なかったんだが・・・・・・。
具体的にどうすればよいの?(つかれた声で)
157:名前は開発中のものです。
09/08/28 21:34:49 KG8AvTh+
具体的にどうしたいいの?(つかれた声で)
158:名前は開発中のものです。
09/08/28 21:35:29 KG8AvTh+
コピペミスったし
159:名前は開発中のものです。
09/08/28 21:39:25 4C/GS6Sj
かっこわりぃw
160:名前は開発中のものです。
09/08/28 21:48:28 NuR4qvr2
「弾幕」のサンプルでは、
.原点が画面の中心
.MaxX が1
.MaxY が1
.なのに画面サイズは普通
描画(X,Y)のXに+1しただけで画面端に行く
描画(X、Y) <= オメーはいったい何を基準に描画してんだよ?
って言う風な流れでソースを読み始めた。
でも、仮引数に
”コンストラクタ”CGraphics(HWND hwnd)<=なにこれ?っと思って
Dxライブラリのヘッダから
extern HWND GetMainWindowHandle( void ) ;
ってのを見つけて代入したんだけど。
思ったような効果が得られなくて orzしてたところ。
長文スマソ
161:名前は開発中のものです。
09/08/28 21:49:44 2g2Xw9AF
>>156
それは本気で訊いてるのか?
「弾幕」って本を誰もが知ってると思ってるのか?
「座標変換の部分のソース」とやらを俺たちが知ってるとでも思ってるのか?
お前さんがどのようにそれを組み込んだか俺たちが知ってるとでも思ってるのか?
お前さんがなにをしようとしてたのか俺たちが知ってるとでも思ってるのか?
「まったく座標が関係なかった」ってのがどういう状況だったのか俺たちにわかるとでも思ってるのか?
162:すいませんでしたぁぁぁぁぁ!!!
09/08/28 21:56:09 NuR4qvr2
ニホンゴ勉強してきまーす
163:名前は開発中のものです。
09/08/28 22:25:50 v4qfe6aQ
>>139
に誰か突っ込んでやれよ
164:名前は開発中のものです。
09/08/29 02:38:28 uZ03ORl6
また水平思考ゲームか…
165:名前は開発中のものです。
09/08/29 02:43:33 oQAm69KI
原点座標の水平移動!
166:名前は開発中のものです。
09/08/29 03:19:38 wEbz732B
関係ないけど「弾幕」って本面白そうだなw
アマゾンのレビュー見る限り弾幕作るのにはあまり約にたたなそうだが
167:名前は開発中のものです。
09/08/29 03:29:47 GQMCE92i
それの一つ前のSTGプログラミングって本持ってるけど
これも結構良い感じよ
読んでて「なるほどこういう風に考えるのか」ってテクがぎっしり
ちと難しいけど
168:名前は開発中のものです。
09/08/29 10:47:45 eAXf2/jo
vS2008のC++で開発しています。
DXライブラリでループ中のデバッグってどうやるんでしょうか?
F11のステップインで始めてもウィンドウが見えないし、
ウォッチ式も
CXX0017エラーです:シンボル"pon"が見つかりません
とエラーが出ます。
169:168
09/08/29 10:49:29 eAXf2/jo
すいません日本語おかしかったです二行目訂正します。
DXライブラリのProcessMessage関数、ClearDrawScreen関数ScreenFlip関数を使用し、
ループさせているときのデバッグってどうやるんでしょうか?
170:名前は開発中のものです。
09/08/29 13:45:22 iB7bt5pR
エラーの原因臭い箇所にブレークポイントつけてF5でデバッグ開始、
そこからF10のステップオーバーで処理を追う。
デバッグなしで実行する場合は関数のエラー時にMessageWindowを呼ぶと分かりやすいよ。
171:名前は開発中のものです。
09/08/29 14:37:44 Dgspg8qU
つDrawFormatString
172:168
09/08/29 14:42:16 eAXf2/jo
>>170>>171
ありがとうございます
私も今はDrawFormatStringでウォッチウィンドウみたいなものを作ってます
173:名前は開発中のものです。
09/08/29 22:36:31 MCRpsmFK
SetTransColorの透過色設定 Windows7だとうまく透明化しない場合があるけど
その場合あらかじめbmpで保存してその後にbmp2pngなどのツール使ってpngつくったら
透明化できた
174:名前は開発中のものです。
09/08/29 22:54:27 fvZFlbGy
透過色指定は画像ロードの前に!
って、同じところで悩んでた覚えのある俺のソースにコメント入ってた。
175:名前は開発中のものです。
09/08/30 02:44:15 y9n97dOf
座標(0,0)のRGB値を透過色として指定したいとおもっているのですが、
座標(0,0)のRGB値を得るにはどうしたらいいですか。
176:名前は開発中のものです。
09/08/30 02:45:20 y9n97dOf
画像ファイルの、です。
177:名前は開発中のものです。
09/08/30 02:52:09 4ar2ylnT
これかなぁ
宣言 int GetPixelSoftImage( int SIHandle, int x, int y, int *r, int *g, int *b, int *a ) ;
概略 CPUで扱うイメージの指定座標の色を取得する(各色要素は0〜255)
引数 int SIHandle : ソフトウエアイメージハンドル
int x, int y : 色を取得する座標
int *r : 取得した色の赤成分を書き込む変数のアドレス
int *g : 取得した色の緑成分を書き込む変数のアドレス
int *b : 取得した色の青成分を書き込む変数のアドレス
int *a : 取得した色の透明度を書き込む変数のアドレス
戻り値 0:正常終了 −1:エラー
解説 LoadSoftImage 関数や、MakeARGB8ColorSoftImage 関数等で作成したソフトウエアイメージハンドルの指定の座標の色を取得します。
赤・緑・青・透明度各成分の値は0〜255です。透明情報の無い画像形式の場合の透明度は不定です。読み込み対象がパレット画像の場合は指定された座標のパレットの色が変数に代入されます。
178:名前は開発中のものです。
09/08/30 02:52:39 CiTH8nsL
LoadSoftImageしてGetPixelSoftImage
179:名前は開発中のものです。
09/08/30 02:58:52 y9n97dOf
すいません画像ファイルはリソースとして実行ファイルに埋め込んでいてLoadGraphToResourceで読み込むのでLoadSoftImageは使えないですどうしたらいいですか
180:名前は開発中のものです。
09/08/30 03:11:30 y9n97dOf
'GetPixelSoftImage': 識別子が見つかりませんでした
181:名無しさん@そうだ選挙に行こう
09/08/30 03:30:53 CiTH8nsL
リソースに埋め込むってことはライブラリからやれることを制限しちゃうのであんまり勧められてないと思うんだけど
こういう風にしたら無理やり取れるかな?
SetDrawValidGraphCreateFlag( TRUE );
SubScreen = MakeGraph( 1, 1 );
SetDrawValidGraphCreateFlag( FALSE );
SetDrawScreen( SubScreen );
DrawGraph( 0, 0, ResourceBMP, FALSE );
color = GetPixel( 0, 0 );
SetDrawScreen( DX_SCREEN_BACK );
DeleteGraph( SubScreen );
182:名無しさん@そうだ選挙に行こう
09/08/30 04:30:33 cI6gEy1Z
GetPixelじゃ駄目なん?
183:名無しさん@そうだ選挙に行こう
09/08/30 11:48:44 RtX14t/M
CUIからCUIの移行がわけわかめ
タイルベースのゲームなんだけどCUIでのあるFから次のFまでの間の補完の仕方がさっぱりだ
updateのほうも書き直さないとだめなのかなこれ
>>168
int main(void)にして標準出力するとゲーム画面のほかにコマンドプロンプトが開かれるからデバッグに使えそうな気がする
184:名無しさん@そうだ選挙に行こう
09/08/30 15:38:21 CRpFUzJB
CUIって聞いて何のことかサッパリな俺
185:名無しさん@そうだ選挙に行こう
09/08/30 15:55:39 WME/rg1R
CUIはわかるけど183が何を言ってるのかサッパリな俺 Fってなに?
186:名無しさん@そうだ選挙に行こう
09/08/30 17:20:24 wkJ8VIAR
FCUP
187:名前は開発中のものです。
09/08/31 17:09:24 j0BBlJ3J
巨乳プログラミングか
188:名前は開発中のものです。
09/08/31 19:40:48 HKlHFgLy
>>183
CUIからCUIの移行がわけわかめ → 説明するつもりが全く無い
タイルベースのゲーム → 2DドラクエやねとはくやCrawlの画面を想像させるがやはり何も特定できない
あるFから次のF → 「フレーム」だとわかるが
補完の仕方が → 補完てのが何か何を何で補完なのかこれも説明するつもりが無い
updateのほうも → cursesでいうところのrefresh()を想像させるが特定のプログラムを前提とした言い方なのにDXライブラリにおいての何かはわからない
キー待ちのルーチンは
ClearInputCharBuf() と GetInputCharWait()
でgetch()相当のものを作るとCUIのゲームを移植する助けになる
189:名前は開発中のものです。
09/08/31 19:54:39 j0BBlJ3J
なんだ>>183はただのカッコ付けたがりの初心者だったのか
190:名前は開発中のものです。
09/08/31 19:58:59 TnY2fXBk
>>189
そういう言い方もなんかかっこ悪いから止めといた方がいいよ。
191:名前は開発中のものです。
09/08/31 20:12:13 j0BBlJ3J
ごめんなさい
192:名前は開発中のものです。
09/08/31 20:20:05 gxnPvUD+
ローグみたいなマス目区切りのゲームで
ある枡からとなりの枡に歩かせるみたいな処理がわかんない
CUIだと移動前と移動後の座標に対応した位置に文字をプリントするだけだけど
GUIだと移動中も補完しないといけないけどそのうまいやりかたがわからない
キャラクターに整数のマス目座標だけじゃなくて実数の座標も持たせて
ゲームの1ステップの更新処理を書き直さないといけないのかな
193:名前は開発中のものです。
09/08/31 20:31:03 0NTvvGjW
そうですね
194:名前は開発中のものです。
09/08/31 20:39:29 j0BBlJ3J
>>192
更新処理はアニメーションの時間を挟むように書き直さないといけないと思う
実数の座標を持たせる方法もあるけど、移動前のマスの座標を記憶しておくだけでも大丈夫な気もする
あと、アニメーションが何フレーム目かを数えておく変数。
移動に30フレーム掛かるなら、移動アニメーション時のみ描画座標を
(float)( [移動後の描画座標] - [移動前の描画座標] ) / 30.0f * [フレーム数] + 移動前の描画座標
みたいにすると比較的楽に実装できるかもしれない
カッコつけ呼ばわりしてゴメンね
195:名前は開発中のものです。
09/08/31 20:39:54 CGTLvA+X
公式サンプルの4を見ればいいんじゃないかな。
URLリンク(homepage2.nifty.com)
196:名前は開発中のものです。
09/08/31 22:19:58 oBCh4ToJ
>>192
普通に座標で扱って、マス目の方をそれに合わせるのが楽だと思う。
1マスの大きさが32×32だとすると、
┌─┬─┐
│A │B │
├─┼─┤
│C │D │
└─┴─┘
Aの座標は (0*32.0*32)
Bの座標は (1*32.0*32)
Cの座標は (0*32.1*32)
Dの座標は (1*32.1*32)
ってなるからそれに合わせて停止させるなり、なんなりすればいいんじゃない。
197:名前は開発中のものです。
09/08/31 23:06:45 X2VhMns5
まずは途中のアニメのないバージョンを作ってから考えればいいんでないかい。
>>196
ごめん、正直それは無いかなと思った。
確かに描画処理は正直で分かりやすいが、それ以外の部分にしわ寄せが来ると思う。
198:名前は開発中のものです。
09/09/01 01:37:56 23qSxMZB
別に普通に座標で扱っても枡の座標なんて32で割ればいいだけじゃん
199:名前は開発中のものです。
09/09/01 02:31:19 8OtNRGcI
ゲームの内容が、描画の都合に合わせられるって問題じゃね?
200:名前は開発中のものです。
09/09/01 02:58:02 oEGjKhW3
どんな不都合があるのか全く想像できない。
逆にマス目優先にした方が不都合出る気がするのだが。
201:名前は開発中のものです。
09/09/01 04:49:18 23qSxMZB
まあローグライクやRPGのような非リアルタイプのゲームだと座標優先にする必要ないのかもね
基本マス目で取って移動時の描画の時だけその分ずらすなりすれば
202:名前は開発中のものです。
09/09/01 05:08:12 8OtNRGcI
>>201
そんな感じかな。
もちろんリアルタイムなゲームで、ゲーム的な座標と表示される座標を切り分けても良いと思うよ。
マップの拡大/縮小なんかも出来るようになるし。
格闘ゲームなんかに多いのかな?
2人の距離が近いと画面がズームインして、離れてるとズームアウトするような演出。
203:名前は開発中のものです。
09/09/01 10:51:04 nKmT4YF9
>それ以外の部分にしわ寄せが来ると思う。
>例えば、 ←ここが抜けてる
204:192
09/09/01 12:17:02 yHdt/VNY
レスdです
>>194,195あたりを参考にさせてもらいます
205:名前は開発中のものです。
09/09/01 13:52:42 8OtNRGcI
>>203
>202
206:197=205
09/09/01 14:35:15 8OtNRGcI
アンカーだけ貼るのも大人げないと思った。ごめん。
>>203
ローグあんまり詳しくないので、例えを将棋に変更させてくれ。そんなに変わらんと思うし。
基本となるのは、ゲームの処理部分と描画部分は可能な限り分けるべき、という考え方。
あくまで個人的な考え方なので、参考までに。
まず、今回の話でいうゲーム処理/描画優先というのは、例えば「歩」を一歩前に進める処理をした場合、
ゲーム優先: y -= 1;
描画優先: y -= SQUARE_WIDTH; //SQUARE_WIDTHは1マスの大きさ
のようなコードになることを指す。
将棋の場合は、実際には相対座標ではなく棋譜のようなデータをやり取りするような気もするけどね。
当然ながら、SQUARE_WIDTH というのは描画に必要な数字であって、将棋のルーチンには関係がない。
ゆえに、処理と描画の分割の原則に反する。
実際に作るところを想像してみれば分かると思うが、
コマを動かす、コマを取る、コマを使う…などと、あらゆる場面で SQUARE_WIDTH の値が必要になる。
それらを関数に切り分けたとしても、やっぱり SQUARE_WIDTH が要ることには変わりない。
となると、グローバル変数にするか、全ての処理関数に引数として渡すか、処理クラスのメンバ変数にするか…
みたいな話になってしまう。これはちょっと面倒くさい。
207:名前は開発中のものです。
09/09/01 14:52:19 8OtNRGcI
>206の続き
メリットはもう1つあって、演出の部分を独立して記述できるというのがある。
パッと思いつくのは、以下の2つ。
(1)コマを動かすアニメーション
(2)将棋盤やマスの外見(大きさや向きなど)
(1)については、コマを等速で動かす以外にも、
瞬間移動のような演出で移動したり、本当に将棋を打っているような動かし方(一旦コマを取ってから目的の位置に直接打つ)
なんて感じにもアレンジできる。
(2)について、将棋盤を拡大/縮小したり、回転させたり…ということ。
DXライブラリだと微妙だが、頑張れば3D表示にすることも出来るんじゃないかな。
将棋からは少し離れるが、>202に挙げた格闘ゲームのような場合だと、
画面のズーム具合によって当たり判定が変わってくるとか、あんまり考えたくないw
「描画優先」だと、これらの演出をやろうとしたら、処理ルーチンまで弄らなきゃならない。
プログラマが複数居る場合や、自分が昔作ったコードを再利用しよう!って時には非常に便利。
208:名前は開発中のものです。
09/09/01 15:13:02 nKmT4YF9
要するにアニメーション用のデータと関数を別に作れって事だよね?
209:名前は開発中のものです。
09/09/01 15:34:28 8OtNRGcI
うん。
210:名前は開発中のものです。
09/09/01 15:49:03 cIBqgsTF
結局どんな方法でもできちゃうから、人それぞれの実装になっちゃうんだよなぁ
こういうのは結構性格が出るもんだよね
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5337日前に更新/179 KB
担当:undef