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


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

DXライブラリ 総合スレッド 2008



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/

670 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 06:54:33 ID:P7f9XrLx]
>>668
非公開関数のリファレンスは書くつもりは無いのか
わざわざ用意した関数のリファレンスを書かないのは勿体無い気もするが
ヘッダ見たら色々あったけどコメントだけじゃ引数がわからないし、ソース読むしかないのね

>>669
そこ見て非公開関数の存在を知ったんだけど、他にも説明のある非公式のサイトとかないのかな?

671 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 06:58:59 ID:TAywFnWh]
引数の名前と型を見てなんとなく分かると思う。
わかんなかったのはMenu関係かな。
どれが便利な隠れ関数なのか人によってまちまちだからな〜。
全部教えるわけにはいかないので、その都度聞いてくれ。
あと、大概公式の掲示板を関数名で検索すると作者がサンプルコード書いてあるよ。

672 名前:名前は開発中のものです。 [2009/02/28(土) 07:00:08 ID:LqQy7pZD]
>>670
他のところは知らないかな
もし需要あるなら非公開関数ちょっと調べてリファレンスでも作ろうか?

673 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 07:01:10 ID:TAywFnWh]
>>672
俺からも ぜ ひ 頼 む

674 名前:名前は開発中のものです。 [2009/02/28(土) 07:06:17 ID:LqQy7pZD]
>>673
でも、正直DirectX使えばなんとでもなるから、わざわざ推奨されない非公式関数発掘して制約多い状態でDxLib使うより
その方が早い気もする
中見てないから分からないけど、ソースが綺麗だったらまだ救いようあるんだけどな……

675 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 07:19:28 ID:TAywFnWh]
DXライブラリ使ってるのに、その上でDirextX直叩きする酔狂は居ないと思う。
リファレンスもあったら便利だけど、目ぼしい関数はチェックしてるからなぁ。

676 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 07:27:18 ID:P7f9XrLx]
>>671
教えてもらえるなら助かるわ
といっても、そこそこ量があるので使えそうな関数を探すのが難しそうだがw

>>672
非公開関数をまとめてくれるのなら有難い

677 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 12:35:30 ID:1J8Bdlx6]
>>672
結構需要あると思うし、個人的にもすごくうれしい

678 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 17:39:28 ID:mz4DlK2y]
詳しい説明は無くてもかまわないからリストだけでもあれば重宝します



679 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 18:56:21 ID:JPI33j26]
>>666
ってことはDXライブラリでも極めれば市販ゲームレベルの作品が作れるって事だね

680 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 20:56:23 ID:GSZZUTVZ]
極端な話,DrawGraphさえあれば十分

681 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 21:06:52 ID:gSUwRndo]
画像ファイル一枚を分割してアニメーションさせるのと
全部別々のファイルを読み込んでアニメーションさせるのって負荷とか違うのかな?
後者の方がやりやすいんだがどうなんだろう

682 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 21:15:45 ID:GSZZUTVZ]
一度の画面表示に使用する画像の数はできるだけ減らした方が
テクスチャの切り替えが減って効率は良くなる

683 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 21:20:02 ID:gSUwRndo]
>>682
やっぱりそうなのか・・
パーツ分けがめんどくさいんだよなぁ

684 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 21:25:21 ID:GSZZUTVZ]
何のためにプログラミングやってんの
それこそ機械にやらせればいいでしょ

685 名前:名前は開発中のものです。 mailto:sage [2009/02/28(土) 23:32:58 ID:gSUwRndo]
>>684
フォトショで画像作ってるからPSDファイルなんだよね
ヘボプログラマーなんでPSDファイルを分割するプログラムは作れないです・・

686 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 01:19:31 ID:Q0b0e5s4]
使ったこと無いから知らないけどさ、フォトショってマクロみたいな機能無いの?

687 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 01:43:53 ID:gJBH+jz2]
>>686
あるよー
でもマクロするほどの作業量でもないので手動でやります

688 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 04:00:52 ID:4UMfyekW]
ん〜?
681と682の質疑応答の意味がよくわからん。

1ファイルを分割しようが、複数ファイルを読み込もうが使用する数は同じじゃないの?




689 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 04:46:48 ID:gjx3PjZU]
俺もわかんね。
同じじゃん。

どっちの方が管理が楽だろう?っていう人間の負荷の話ならともかく

690 名前:名前は開発中のものです。 [2009/03/01(日) 05:31:56 ID:idjBCaEs]
>>681-689

一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は一枚
複数の画像を読み込みそれぞれをハンドルを取得→PCが操作する画像は複数


負荷が多いのは勿論後者
大げさだけど
一枚100MBの画像を一枚開くのと
一枚10MBの画像を10枚開くの

どっちが早いか考えてみたら分かるんじゃないかな?


まあ、数十枚の画像なら気にする必要はないんだけどさ

容量的にも、バイナリで開けば分かるけど、一枚ごとに色々付加されるから
200kbの画像を2つに分けて保存しても合計で220kbくらいになっちゃう(ものによって違うかな)

691 名前:名前は開発中のものです。 [2009/03/01(日) 08:23:41 ID:idjBCaEs]
今非公開関数まとめてたんだけど、すごくわかりやすいからわざわざまとめるほどでもない気がしてきた
作者が公開してないんだから公開するのも何かな……
一応簡単に晒すけど……
使い方(引数)、いつ呼ぶのか(DxLib初期化前か後か)、返値……ここらへんが分かれば良いんだよね?
もしこの中で知りたいとか要望あるならHTMLにして、簡単なソースくらいくっつけてリファレンス化するよ


起動→終了で複数回DxLibを読み込まなければいけないとき(あるのか?)に使えそう
int DxLib_GlobalStructInitialize( void ) ;
// ライブラリの内部で使用している構造体をゼロ初期化して、DxLib_Init の前に行った設定を無効化する( DxLib_Init の前でのみ有効 )
int DxLib_IsInit( void ) ;
// ライブラリが初期化されているかどうかを取得する( 戻り値: TRUE=初期化されている FALSE=されていない )

ファイルを検索して取得ウマー
int FileRead_findFirst( const char *FilePath, FILEINFO *Buffer ) ;
// 指定のファイル又はフォルダの情報を取得し、ファイル検索ハンドルも作成する( 戻り値: -1=エラー -1以外=ファイル検索ハンドル )
int FileRead_findNext( int FindHandle, FILEINFO *Buffer ) ;
// 条件の合致する次のファイルの情報を取得する( 戻り値: -1=エラー 0=成功 )
int FileRead_findClose( int FindHandle ) ;
// ファイル検索ハンドルを閉じる( 戻り値: -1=エラー 0=成功 )

ウィンドウから情報を引っ張り出す系の関数
int GetWindowCRect( RECT *RectBuf ) ;
// ウインドウのクライアント領域を取得する→描画領域ね
int GetActiveFlag( void ) ;
// ソフトがアクティブかどうかを取得する→現在アクティブかどうかを調べる。-1が非アクティブ、0がアクティブとかだと思う(未確認)
HWND GetMainWindowHandle( void ) ;
// メインウインドウのハンドルを取得する→分かる人のために
int GetNoActiveState( int ResetFlag = TRUE ) ;
// 非アクティブになり、処理が一時停止していたかどうかを取得する(引数 ResetFlag=TRUE:状態をリセット FALSE:状態をリセットしない 戻り値: 0=一時停止はしていない 1=一時停止していた )
int GetMouseDispFlag( void ) ;
// マウスを表示するかどうかのフラグを取得する

692 名前:名前は開発中のものです。 [2009/03/01(日) 08:24:40 ID:idjBCaEs]
int GetMouseDispFlag( void ) ;
// マウスを表示するかどうかのフラグを取得する
int GetWindowCloseFlag( void ) ;
// ウインドウを閉じようとしているかの情報を得る→本当に終了しますか?とか確認を表示するのに使えそう
int GetWindowUserCloseFlag( int StateResetFlag = FALSE ) ;
//×ボタンが押されたかどうかを調べる
int SetDoubleStartValidFlag( int Flag ) ;
// 2重起動を許すかどうかのフラグをセットする←複数起動させてもいいゲームならここを変更

マルチタスクのゲーム作りたいならここらへんが役に立ちそう
int AddMessageTakeOverWindow( HWND Window ) ;
// メッセージ処理をDXライブラリに肩代わりしてもらうウインドウを追加する
int SubMessageTakeOverWindow( HWND Window ) ;
// メッセージ処理をDXライブラリに肩代わりしてもらうウインドウを減らす

軽くみた感じ使えそうなのはこのあたりかな?

693 名前:名前は開発中のものです。 [2009/03/01(日) 08:37:37 ID:idjBCaEs]
int SetWindowInitPosition( int x , int y ) ;
// ウインドウの初期位置を設定する
int SetNotWinFlag( int Flag ) ;
// DXライブラリのウインドウ関連の機能を使用しないフラグ←これめちゃくちゃ便利でふいた
int SetWindowUserCloseEnableFlag( int Flag ) ;
// メインウインドウの×ボタンを押した時にライブラリが自動的にウインドウを閉じるかどうかのフラグをセットする←上記のGetWindowCloseFlagと組み合わせると幸せ
int SetDXArchiveExtension( const char *Extension = NULL ) ;
// 検索するDXアーカイブファイルの拡張子を変更する
int SetBackgroundColor( int Red, int Green, int Blue ) ;
// メインウインドウのバックグラウンドカラーを設定する←初期背景色は黒(#000000)
int SetDragFileValidFlag( int Flag ) ;

ドラッグ&ドロップかんれん
// ファイルのドラッグ&ドロップ機能を有効にするかどうかのフラグをセットする
int GetDragFilePath( char *FilePathBuffer ) ;
// ドラッグ&ドロップされたファイル名を取得する( -1:取得できなかった 0:取得できた )
int GetDragFileNum( void ) ;
// ドラッグ&ドロップされたファイルの数を取得する

めんどくさいから、存在だけ書くけど
他にも、ツールバーにボタンを追加する関数とか
ショートカットキーを追加する関数とか(←いくらでも代用可能だから使わない方がいいかも)
メニューを作成する関数とか
キー入力中、マウスを点滅させる関数とか

ここらへんは人によってピンポイントに使えそうな関数ばっかだから、あんまりリファレンス化しても需要無い気がする
一応応用テクニックとして、HSPからDXライブラリを呼ぶ方法とかだったら需要ある?
あるなら書こうかな

吉里吉里やNscから呼ぶことも出来そうだけど本体いじらなきゃ駄目っぽくてめんどくさい

694 名前:名前は開発中のものです。 [2009/03/01(日) 08:44:55 ID:idjBCaEs]
たとえば、×ボタンで終了確認を出したいときとかは

〜略〜

SetWindowUserCloseEnableFlag( FALSE ); //×ボタンで自動終了しない

while(ProcessMessage()==1)//だっけ?
{

ClsScreen();
game();
ScreenFlip();

if(GetWindowUserCloseFlag()==-1)//×ボタンが押されたら
{
if(MessageBox(NULL,"終了しますか?","終了確認",MBYESNO)==IDYES) //YES,NOでYESが押されたら
break;
}

}

〜略〜

こんな感じにすればできる(と思う)
組み合わせだからなあ……リファレンス作るより小技をいくつか乗せた方が良いのかな?

695 名前:名前は開発中のものです。 [2009/03/01(日) 08:45:28 ID:idjBCaEs]
……朝から何やってんだ俺
悲しくなってきたから寝る

696 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 09:26:49 ID:k4cT38FB]
おつかれさまです。ごゆっくりお休みくださいな。
リファレンスも欲しいけど、小技のほうがうれしいかも。

697 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 09:55:31 ID:gjx3PjZU]
>>690
最初のファイル読み込みはともかく
ハンドルに分けて使う段になったらどっちも同じじゃね?

×一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は一枚
○一枚の画像を読み込み複数に分けハンドルを取得→PCが操作する画像は複数

>>691

698 名前:名前は開発中のものです。 [2009/03/01(日) 10:04:25 ID:idjBCaEs]
ああ、駄目だ
>>694だと×ボタンが押された時点でキューが送られちゃってるからDXライブラリの内部の構造的に終了確認はできない(終了確認が無限に出続ける)
「終了します」って有無を言わさぬ表示なら出来るけどね

中身見てるけど、終了キューを解除する関数は見あたらないし

独自に一度キューを取得して、ProcessMessageに投げる前に解除しちゃえば良いんだろうけど、そんなことすると初心者でも使えるって良点があじゃぱー


>>696
どんな小技が良いかな?
さっきあげた関数は単体で使えると思うし
今ソース見ながら色々いじってたけど
それ以上のことやろうと思うと色々内部的に引っかかることに気付いた

>>697
もう一度よーく読んでほしい



699 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 10:54:11 ID:gjx3PjZU]
>>698
ごめん。
よく読んだ上で書いたけどわからない。
理解力なくてすまん。きっと俺が間違っている。
が、これは瑣末な問題なので暇なときにでも考えておくとして…

>>693
>一応応用テクニックとして、HSPからDXライブラリを呼ぶ方法とかだったら需要ある?

これ興味あるかな。

700 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 11:24:01 ID:oPHW1ePY]
>>697
ハンドル分けたらだめ
一つのハンドルから転送元の領域を指定して描画するんだよ
同じテクスチャを連続して使うときは切り替えが行われないからその分効率が良くなる

701 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 11:38:25 ID:ey11ozVK]
質問掲示板の検索を使おう

>>698
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1089

>>699
ここのNo.4に書いてある高速描画云々のところ読めば分かる
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1162
読みこみ速度は同じだけど描画速度は

一枚の画像を読み込み複数に分けハンドルを取得 > 複数の画像を読み込みそれぞれをハンドルを取得

702 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 11:39:47 ID:a7Bg5ATd]
HSPなんぞ使うなよ

703 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 11:44:24 ID:oPHW1ePY]
なるほどLoadDivGraphでもいいのか

704 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 13:22:39 ID:gjx3PjZU]
>>700
なるほど
理解したdクス

>>701
読んでみる

>>702
今更HSP使う気はないけどやり方にはちょっと興味が

705 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 13:39:31 ID:9rIzOA3I]
>>691-694


前にHSPから使ったりしてたけど、わざわざHSPから呼び出す必要があまり無いような気がしたのでVC導入したな

706 名前:名前は開発中のものです。 [2009/03/01(日) 14:11:25 ID:idjBCaEs]
>>701
なるほど
StateResetFlagは初期値FALSEになってるやつか、完全に見落としてたアリガトウ

>>702
HSP使うメリットってなんだろう、(うろ覚えだけど)3D処理が簡単なDLLかなんかがあったよね?
でも、それ使うなら最初からHSP使えばいいし……
自分から言っといてなんだがメリット見えないやごめんw


DXライブラリの可能性を追求しようと思ってドラッグ&ドロップで画像表示するアプリ作ろうと思ったらこんなに時間かかっちゃったよ
やっぱりアプリ系はおとなしくWINAPI使うに限るorz

www3.uploader.jp/t/nico/images/nico_uljp00021.zip


ふ、と思ったんだけどこのスレ結構知識ある人多いしうpロダでも用意しとけばサンプル集みたいなの作れるしいいんじゃね?
人のソース見れるってのは、(俺含め)初心者にはとてもありがたいんだよね

707 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 14:27:12 ID:ZNmLTGrU]
ソースうpは恥ずかしい…

708 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 14:51:26 ID:lYNtcth6]
自分の全裸うpするようなもん



709 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 15:45:22 ID:z/eFYQPp]
俺のは絶対人に見せられないソースだと自覚している。
一応動いているが、初心者どころの問題じゃない。

710 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 16:15:26 ID:xm1UJhmc]
ソースは出来るだけ人に見せたほうがいいよ。
指摘されればどこが良くて悪いのかが分かって次に必ず生かせる。
リアル知人じゃなくて2chで晒すのがいいかはよくわからんが・・・

うpするのとは話がちょっと違うけどここでも読んでみるといい
www.kojima-cci.or.jp/fuji/mybooks/cdiag/cdiag.0.6.html


711 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 16:37:16 ID:g9LGhZvF]
専ロダほしいな・・・

712 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 16:45:33 ID:c9LYSV+3]
ドット絵でbmpで保存して使うのと
きれいに書いたpngだとぜんぜん解像度違うような気がして変になっちまった。
ドット絵の設定ミス?それともpngにそろえるべきかな。。

713 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 18:31:12 ID:a1nbTQe/]
ドット絵だからドットが見えるんじゃないのか??

714 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 23:17:37 ID:2a8K6SCC]
爆発のエフェクトなどを作成する際に
グラデーションの画像を極座標変換?して
円形の画像を作成しているのだけれど、
これが何をやっているのかよくわからん。

715 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 23:25:10 ID:oPHW1ePY]
つ高校数学の教科書

716 名前:名前は開発中のものです。 mailto:sage [2009/03/01(日) 23:54:03 ID:A8mpIuw8]
数学Cあたりだっけ

717 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 00:15:56 ID:ziDQhibJ]
そういえば洞窟物語もDXライブラリ使ってるんだね


718 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 00:35:55 ID:hEBh+N4j]
公式掲示板か
多分違うと思うぞ
Pixel氏が以前DirectX2だか3だかを使って作ったって言ってたし
何か勘違いしてああ答えたか、若しくは今作ってるゲームにDXライブラリを使ってるんだろう



719 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 01:43:24 ID:3riYRQc6]
ウィンドウサイズのデフォルトは640*480だけど、これの変更はできる?
フルスクリーンにしないといけないから制約はあると思うけど

720 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 01:47:07 ID:7FxY5OR7]
Dxライブラリのファイルにデフォルトのサイズがディファインされてたから
あれいじればできるんじゃね?

721 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 01:52:06 ID:x0I/gxMT]
>>719
SetGraphMode( 800 , 600 , 32 ); で800*600になる

722 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 02:06:23 ID:3riYRQc6]
>>720
ライブラリ書き換えるのはアウトだろ常識的に考えて……
そのせいでいつどこでバグが起こるかわからぬ

>>721
サンクス
画面モードの変更で解像度が変えれるとは、単語検索で見つからないわけだ

723 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 02:13:56 ID:PBT6djln]
リファレンス大した量じゃないんだから
一覧を一通り目を通せば済むだろ。

724 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 06:43:49 ID:+ax8ZdoD]
おれなんかどんなことができるんだろうと、わくわくしながら
上から下まで読むんだけどなぁ・・・

725 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 08:17:17 ID:vDZSfAmr]
>>718
でも文字表示とかDXライブラリっぽいよな

726 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 11:57:41 ID:6eQe3/TV]
>別にDXライブラリに限らないけど、DXライブラリを知った時も
リファレンスをさらさらっと流して、「これなら俺にも使えるんじゃないかな?」と思って
使い始めたな。

別に覚えなくても、一度目を通しておけば、
後になって「こういう事がしたいけど、それっぽい命令あったよな……」って
探しやすくなるしな。

727 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 20:14:38 ID:hc/QEiU+]
アレだけ分かりやすくて運営管理もアレだけちゃんとしてるなんて今まで見たことないよな。
DirectXでゲームを作るっていうジャンルに関して革命的だし、最早XNAなんかも超えてると言っても過言ではない。

728 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 20:18:02 ID:qXNeI5og]
ハンドルが全部intなのだけはどうかと



729 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 21:13:54 ID:Rv93cI1M]
ほんとだよな。ちゃんと符号無しにしてくれないと。

730 名前:名前は開発中のものです。 [2009/03/02(月) 21:38:18 ID:3lZqI4Au]
>>729
そこじゃねーだろwww

731 名前:名前は開発中のものです。 [2009/03/02(月) 21:42:53 ID:3lZqI4Au]
typedefしなかったのは多分初心者への配慮だろうね

732 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 22:25:14 ID:ziDQhibJ]
画像をプログラムで制御(回転など)して動いてみせるのと
一枚一枚画像を作ってパラパラ漫画みたいにアニメーションさせるのとどっちが負荷低いかな

733 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 22:54:20 ID:qXNeI5og]
パラパラ漫画方式の画像が一枚の画像にまとめてあるなら
原理的に変わらないはず

734 名前:名前は開発中のものです。 mailto:sage [2009/03/02(月) 22:57:12 ID:qXNeI5og]
いや画像がまとめてあるかどうかはこの場合関係ないか
まあ変わらん

735 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 01:09:39 ID:vuUaUlBc]
その二つは比較すべきものじゃない気もするがw

回転ありの描画命令よりは回転なしの方が負荷は軽いだろうけど、
大した差じゃないみたいだし、好きにしていいんじゃないかな。

736 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 02:53:14 ID:l+63ggMa]
画面上の殆どのパーツが回ってるぜ!とか
512x512のパーツが回ってるぜ!とか
回転角度に応じて256パターンの画像を用意しました!
みたいな変なことやってなきゃ大丈夫だろう

737 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 03:53:26 ID:wZU6jxH0]
メモリに優しいのがプログラムで制御かな。後者はあまりオススメできない。

パラパラ漫画が全部VRAMに乗るとは限らないし、
1フレーム1枚のように別テクスチャ作るのであればさらに重くなる。
1枚でまとめる場合も、作成できるテクスチャサイズ制限があるハードウェアが過去にあり、
(Voodoo時代ではテクスチャサイズが256*256が最大であった)
そのような場合、DXライブラリではテクスチャ分割が行われるので、
大きなテクスチャを作るとパフォーマンスが犠牲になります。

なので、回転・反転・拡大縮小などといった
Direct3Dによるハードウェア支援で記述できる内容であるのなら、前者の方がパフォーマンスがよくなります。

ちなみに後者で実装するのであれば、テクスチャのサイズは正方形が望ましいですよ。

738 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 04:22:48 ID:l+63ggMa]
ただし、斜め向きとかにした場合、
最初から画像を用意しておいた方が綺麗に見えることは多々あるな。

プレイヤーキャラの画像など、
重要そうな部分だけパターンを用意しておくのも悪くない。



739 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 09:38:20 ID:HSt7mZci]
>>737
>正方形
一辺の長さが2の倍数の正方形ね

740 名前:名前は開発中のものです。 mailto:sage [2009/03/03(火) 14:11:43 ID:lmHLCC6G]
>>739
> 2の倍数
2の累乗ね


741 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 10:39:32 ID:IqyXTxRb]
ん……?
グラフィックハンドルがintって事は、持てるグラフィックハンドルの最大数は約32000って事?

742 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 10:43:25 ID:OmVViNLo]
いやintは2*(10^9)くらいまで
その前にメモリがなくなるだろうけど

743 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 16:29:04 ID:aWTUpMQ1]
東方の弾幕とかって1つ1つの弾にハンドラ持たせてるの?

744 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 17:38:35 ID:IqyXTxRb]
>>742
intってそんなに長かったっけ?

>>743
ちゃんと1つずつID割り振って読み込んでるみたい。

745 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 18:29:44 ID:Q764ubCY]
32bit機での
符号無しintは2^32
符号ありintは2^31(符号に1bit使用)

プログラミングしてるなら知ってて当然だろ…

746 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 18:29:46 ID:zCrgAKk6]
>>744
おまえさんのいってるのは short int

747 名前:名前は開発中のものです。 mailto:sage [2009/03/04(水) 19:26:33 ID:IqyXTxRb]
なるほど……
なんで勘違いしてたんだろう……

748 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 00:07:34 ID:aVo6G4mJ]
>>743
何を言ってるんだ?
東方はDXライブラリ使ってないぞ



749 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 10:15:06 ID:MO3/QFgO]
こんにちは^^
透過処理というのをしたんですけど
下記のコードだと正常に透過処理されます。
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;

しかし
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;
LoadGraphScreen( 0 , 0 , "back.bmp" , FALSE ) ;
とすると透過処理されません
なぜでしょうか?

750 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 10:26:43 ID:ddVb/3t1]
>747
旧VBのIntegerが16bitなのと混ざってない?

>745
ハードは関係ない。コンパイラが決定する。
16bitアプリを32bitハードやOSで走らせても
intが勝手に32bitになったりしない。

処理系にあわせて決定するのが自然なだけ。

751 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 11:04:56 ID:B3wyDoGN]
>>749

はい? え?

back.bmp を透過処理なしで描いた上に、char.png を透過処理ありで描いたらそりゃちゃんと透過処理されるだろうけど

char.png を透過処理ありで描いた上に、back.bmp を透過処理なしで描いたらそりゃ上書きされるだけだと思うんだが……。

752 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 12:34:23 ID:+9ctDc2h]
>>750
あー、昔に見た資料がかなり古いものだったから間違って覚えてたのかも

753 名前:名前は開発中のものです。 [2009/03/06(金) 21:17:00 ID:pmzRauOh]
ある画像だけの透過と、透過の度合いを設定することはできますか?
リファレンス見る限り見当たらないのですが

754 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 21:34:26 ID:+Tdk650S]
その画像を描画する前にSetDrawBlendMode
透過の度合いはPal引数
クラス使って透過率とグラフィックハンドルをまとめて管理するようにするといい

755 名前:名前は開発中のものです。 [2009/03/06(金) 21:46:01 ID:pmzRauOh]
>>754
即レスありがとう^^
うまくできました!!


756 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 23:45:45 ID:HF/v1JaI]
DXライブラリ3Dの開発引き継いでる奴いないの?

757 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 00:24:08 ID:3MouTLA1]
2Dゲームでも背景は3Dにしたい・・・
本家DXライブラリにテクスチャ付モデルとフォグ表示機能だけあれば最高なんだが

758 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 01:56:55 ID:JfYg6t6e]
シューティングの背景用にDXライブラリで自前の簡易モデルを描画する仕組みを組んだけど、
意外と簡単に組めたよ。
ポリゴン事に情報を配列に落として、座標を変換してVERTEX配列に入れてから描画。

フォグは出来なかったから単色背景+奥の頂点を透過で誤魔化してる。




759 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 07:03:57 ID:pCqKP5AO]
クラスのコンストラクタでLoadGraphするとハンドルが取得できてないみたいだけど
仕様ですか?
他で初期化するから別に問題ないけど。

760 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 08:46:35 ID:9xqjyk6r]
そのコンストラクタを呼ぶタイミングがまずいだけだろ
でもLoadGraphみたいな失敗しやすいものをコンストラクタで使うのはあまり好ましくない

761 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 13:25:49 ID:d6ZakwC3]
C++のコンストラクタはオブジェクトが出来上がる前の不安定な状態だからメソッド呼んだりはしない方がいいよ。

762 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 20:23:03 ID:83odH6gl]
それ俺がよくやった失敗だけどLoadGraphするまえにDxLib_Initやってないんじゃまいか

763 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 01:02:04 ID:sz9LKWkI]
>>761
んなこたないw

764 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 01:07:09 ID:PVP1w5NP]
>>758
           .r==x r==x
          /三/.|/三/ |
         (三(/(三(/_/
          l ̄¨'| ̄ ̄¨|
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;::::::::|:::::::::::::l
          l;{==}!::{==}:::l
         r|:::::::::::::::::::::::|
       _ノ  ̄`ー--、,;;l~ヽ
     ,∠==、ヽ `i'ー- .     l
    /    ヽ| 「`'ー、`ー、 .ノ
     l     ミ| /   `ー、ヽ
  /j     R|イ ー-ァ、.  Y゙ 
  { [`ュハハハr''~] ̄ ___ノ   ソースうpお願いします!!!!!!!!!!

765 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 02:05:16 ID:Os5GQobq]
>>764
今PC故障中で携帯から書き込んでるので、一週間後位になるけど……
龍神録プログラミングの館に似たような内容の講座があったので、
それを参考にした方が早いかも?

自分のソースと比べた所、アルゴリズムは大差なかったし

766 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 03:07:46 ID:PA5CtbPk]
>>760
>>762
それだわ。
メインループの外だったよ。

767 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 07:29:17 ID:CGpW+st2]
>>763
そうなの?
憂鬱本かなにかにコンストラクタで複雑な処理はやめたほうがいいって
書いてあったから信じてたよ。


768 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 11:20:16 ID:lUOcnlf/]
使うほうが失敗したときに面倒でしょ、コンストラクタだと



769 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 11:49:19 ID:8uH2yrBU]
例外処理を全面的に取り入れてるならコンストラクタで失敗してもおk
失敗したら絶対に例外を投げること
そうでなければダメ

770 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 13:15:29 ID:sz9LKWkI]
>>767
言語仕様的にはまったく問題ない
>768が言ってるように、
その本には別の理由でやめたほうがいいって言ってるんだと思うよ

ただし、staticなインスタンスは例外で
この場合、mainが呼ばれる前のスタートアップルーチンで
インスタンスが生成されるのでコンストラクタでは
初期化以外のことをやるとまずい


771 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 15:28:40 ID:Os5GQobq]
東方の新作が発表される度に自作のゲームとシステムが被っててヘコむ……

772 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 15:35:38 ID:26PtmX+G]
>771
それを気にしてたら、世の中作品なんて生まれない。
大丈夫、何ら問題ない。思う存分やれ。キミは盗作じゃない。

……自分のやりたいことを、他の人が作ったのでそれで満足しちゃったなら知らんw
(こっちもよくある話だけどな!)

773 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:25:05 ID:tah76f/h]
弾幕シューは東方だけじゃないしね

774 名前:761 mailto:sage [2009/03/08(日) 18:12:09 ID:pjH2xL1q]
>>770
俺も>>767のように憂鬱本で読んで信じてきたんだけど、後学のために教えて欲しい。
まず憂鬱本にはこんな風に書いてある。
・コンストラクタやデストラクタはあまり難しい処理をするのは考え物。
 1・返り値を持つことが出来ない。
 2・インスタンスが完全な状態ではない。
 3・外部変数としてクラスインスタンスがある場合、コンストラクタやデストラクタはmain()の走る前、後になる。

>>770さんが言っているのは3の場合で、この本によると
「ポインタとして宣言しておきmain()が走った後でその中でnewする」
という解決策が書いてある。
で、問題の2にははっきりと
「コンストラクタ、デストラクタが走っているときは、インスタンスは完全な状態ではない」
と書いてあり、
「実は内部的にはそのインスタンスの使用するメモリの取得/解放とそれに伴う複雑な作業も行っている」
「インスタンス自体がまだ生成途中であり、内部的にはまだ不安定な状態」
と書いてあります。
問題点は、
「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
との事です。
C#なんかではコンストラクタでのメソッドの呼び出しなども保障されてますが、C++では言語使用的には保障されていない、と解釈したのですがここらへんどうなんでしょうか?

775 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 19:09:05 ID:CrTNgcou]
この際、本家DXライブラリにDXライブラリ3Dを機能統合してしまっても良いんじゃないか?
今どき2Dだけじゃなぁ

776 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 19:25:34 ID:tHlNETTL]
>>775
いや、意味が分らん。
碌にDirectXすら使えない人間が3Dに手をだしてどうしたいんだ?

むしろ、本家は本家であの程度でまとまってるからこそ良いライブラリだろ。
もっと色々とやりたかったら海外の3Dライブラリをあさればいい。高機能の多いぞ。
(まぁ、普通に日本語対応がメンドイけど。)

777 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 19:52:53 ID:CrTNgcou]
っていうか、DXライブラリ3Dの開発を継続してほしいJEXさん

778 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 23:53:47 ID:Os5GQobq]
>>772,773
弾幕毎に名前付けてるから、気を付けないとまんまになっちゃうんだよね

もう開き直っちゃおうかな……



779 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 00:24:37 ID:y+3gsDNg]
どうせやるなら「白い弾幕くん」くらい自由度上げてみたらどうだ

780 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 05:38:20 ID:xYWyf4vJ]
縦弾幕だったらどうやったって東方っぽいって言われるのがオチだから、
変なこと気にせず好きにやっちゃえYO!

781 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:06:42 ID:Ge4atQjd]
東方のオマージュである、と明記しちゃえば変な因縁はつけられなくなると思う

782 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:28:18 ID:1MIteGpr]
自分で考えて実装した者に対して
なんという屈辱を。

783 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 14:58:21 ID:Yq7DJGmB]
パクってないんなら堂々としてればいいじゃない
ここで愚痴る前にちゃっちゃと完成させて
もう東方に先を越されないようにすればいいじゃない

784 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 15:06:44 ID:mr6tRDyA]
先を越されたから愚痴ってるんだと思うがのw

785 名前:名前は開発中のものです。 [2009/03/09(月) 15:12:00 ID:anLE8kz6]
新しいの出るごとに被るというと
低速移動時に敵を貫通するとかボム使うとパワーが減るとかその辺りか?

786 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 15:54:45 ID:z4EGzSSU]
別に愚痴のつもりじゃありませんでした
こうやって悩むのもゲーム制作の楽しさの一つなので……
気分を害されたのならすいません

>>785
点レートアイテムとか、特殊アイテムを取るとボーナス敵が出る点が……

787 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 17:01:47 ID:GzA1DnX1]
どんなシューティングでもお前。。。

788 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 18:04:17 ID:dWRPooR0]
Q.○○のパクリですか?


A1.はい、参考にしました。
 →盗作イクナイ! 俺の好きな○○を汚すな! ○○の公式サイトのBBSに通報(?)書き込み

A2.いいえ、オリジナルです。似ているのは偶然でしょう。
 →嘘を言うな、正直に言えよ

A3.いいえ、○○ではなく△△のパクりです。
 →そんなん知らねーよ! △△も○○のパクりだな!


実際にあるから困る。




789 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 18:28:11 ID:aHHsyNV0]
結論:気にせず作れ
作ることにも価値がある

790 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 18:40:02 ID:6kYj4gTE]
>>788 どっちかと言うと、この手の奴で、実際にパックたりしてなかったら、
何も答えないのがベスト。ただただ、事務的返しで流すべし。

あと、>>786みたいのは 東方以前からあるのばっかじゃねぇかよwww
それこそ、ファミコン全盛の時代(のアーケード)から・・・・
「今更それを先を越されたとかwww」
と言われるのが落ちじゃね?

791 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 18:51:35 ID:z4EGzSSU]
んー、今更だけど自分で気にしすぎだった気がしてきた
前作が東方をリスペクトしたものだったので、今回も素直に断り書きを入れてみます

792 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 19:02:29 ID:dWRPooR0]
パロディにまで昇華させてしまうという手もあるな。

793 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 21:33:00 ID:Zw6a9bk0]
siv.creation.googlepages.com/home
知ってるとは思うがこれにはずっと期待してる


794 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 22:34:04 ID:GzA1DnX1]
押しっぱをできなくするようにしたいけど
char a[256]
GetHitKeyStateAll(char *a)
つかうとうまくできねぇ。。

ポインタをctrcmpやるのはおかしいの?
それとも配列に入ってるのがおかしいの?
俺の頭がおかしいの?

795 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 23:19:34 ID:2qC8QqlY]
>>774
遅レスだがコンストラクタについて幾つか書きます。
さすがに長文書いてコメントが無いのは可哀想だったから。

昔の言語仕様ではコンストラクタではインスタンスの生成途中であるから複雑な処理を書かないようにしていた。これは慣習・慣例の部類の話。
コンパイラの亜種が多くて、C++の仕様外の範疇での動作はどのようになっているのか分からない時代だったからという背景もある。

自分はコンストラクタに初期化処理を噛ませる横着な書き方をしていたときに先輩に指摘された事は、1,2,3以外にも、、、

・クラス設計者とクラス利用者は同じでない
⇒利用者がstaticで外部変数なインスタンスを生成するかもしれないから、
 mainよりも先に呼ばれる処理に複雑な記述を置くべきでない。
 つまり、利用者の立場になって明示的に初期化処理を宣言するべき。(手を抜くな)

・戻り値を持たない件に関して、例外処理を使うのは怠惰な手段である。
⇒try-catchを用いるのは、デバッグの最終手段である。(例外処理はネストできない為)
 例外処理は一般的にコンパイラの最適化の阻害となり遅くなる要因となる。(ジャンプテーブルを生成する為)
 つまり、保持値チェックにはassert使えというお話。
⇒メモリ確保に失敗する危険性をもっと認識するべき
 特定のハードウェアを対象にする場合、大概は独自のメモリアロケーター(dlmalloc等)を実装していることが多く、
 new失敗の可能性(インスタンス生成失敗)は大いにある。
とのことでした。

>問題点は、
>「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
>との事です。
これには同意です。
だから「コンストラクタに記述するのはせいぜいメンバ変数に対して初期値の代入ぐらい」に留めている人が大半で自分もそうしています。

いや〜、バグの無いプログラムって難しいですね。

796 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 23:31:07 ID:2qC8QqlY]
>>794
上手くできないってどういう意味?
char m_cKey[2][256]; //キーバッファ
とでもして
毎フレーム
void GetAllState(){
memcpy(m_cKey[1],m_cKey[0],256);
::GetHitKeyStateAll(m_cKey[0]);
}
を呼んで、
int GetKeyPress(int KeyCode){return m_cKey[0][KeyCode];}//キーが押されているかどうか
int GetKeyDown(int KeyCode){return (m_cKey[0][KeyCode] && !m_cKey[1][KeyCode]);}//キーが押された瞬間
int GetKeyUp(int KeyCode){return (!m_cKey[0][KeyCode] && m_cKey[1][KeyCode]);}//キーが離された瞬間
とでもすればおk
前フレームとの差分で押された瞬間と話された瞬間を検出するべさ

797 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 23:31:59 ID:6kYj4gTE]
>>794 エスパーじゃないんで、
何をやって何ができないのかすら分らん。
とりあえず、×ctrcmp =>○strcmpだと過程しても検討範囲外。
ポインタの使い方とか、関数の使い方は大丈夫だと仮定してもだ・・・・。

そもそも、そのchar a[]が何を入れるか理解してるかい?
そいつらに入るのは、あるキーが押されてるかどうかのon offフラグであって、
押されてるキーがchar型として'o'みたいに入るわけじゃないぞ。

押しっぱなしは、基本的には、

char NowKey[256];
char OldKey[256];
// ....somewhere to initilaize Nowkey[] and OldKey[], to 0.

GetHitKeyStateAll( NowKey );//Now get putting on key
if( NowKey[ KEY_INPUT_Z ] == 1 )
{ if( OldKey[KEY_INPUT_Z] != 1 )
{ PutOnFUNCTION(); // only not on putting Z_KEY.
OldKey[KEY_INPUT_Z]=1;
}
//There is No doing on putting Z_KEY.
}
else
{
OldKey[KEY_INPUT_Z]= 0 ; //No to put Z_KEY, initialize OldKey[] to 0.
}

な感じに書く。

798 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 23:42:23 ID:YtHLVg0L]
推しっぱをできないようにするなんて
int pushOK = 0;
とか用意しといて

if (a[チェックしたいキー] && pushOK) {押したときの処理}
if (!a[チェックしたいキー]) pushOK = 1;

とかやればいいじゃない
(※厳密な文法に突っ込むのなしね、あと変数名が良くないことにもね)



799 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 23:49:28 ID:GzA1DnX1]
あぁ。詳しくなくてすまん。ありがとう。
でも、なんとか、動作はしたぜ。

800 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 00:11:41 ID:Y5ijcxK4]
LoadSoftImage()でPNG-8のパレットが取得も設定もできん…。
パレットはBMPしか有効じゃないんか。
透過色設定とパレット変更を同時にしようと思うと、PNG-8がベストな選択だったんだけど、
さてどうするべか……。


801 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 00:43:20 ID:liOB0hIm]
どっかの時点でBMPに変換されるんだろうけど
その時点じゃまだなんだろうかね。

てかそんな命令あったのか……。

802 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 01:39:41 ID:Y5ijcxK4]
PNGについてはlibpng使ってるっぽいからなぁ。
パレット変えられないのは困ったぜ。

803 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 02:42:45 ID:f5O5uX62]
libpngって最近脆弱性が発見されたよね

804 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 05:14:32 ID:Y5ijcxK4]
パレットアニメーション諦めて、アルファブレンディングで代用できるんかな……。

例えば、パレットアニメーションで
void PatteGradation(int red,int green,int blue,float ratio)
{
int new_red,new_green,new_blue;
int* p = m_pPalette; //元のパレット配列[3*256]
for (int i=0;i<256;++i)
{
new_red = *p + (int)((red - *p)*ratio);
p++;
new_green = *p + (int)((green - *p)*ratio);
p++;
new_blue = *p + (int)((blue - *p)*ratio);
SetPaletteSoftImage(m_nSoftHandle,i,new_red,new_green,new_blue,0);
}
}
という感じで指定の色(red,green,blue)にratioの比(0〜1.0)で近づくエフェクトを考えているんですが、
これと同じ機能をブレンドモードを変更することで代用可です?
上手い演算具合が見つからない。

805 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 05:17:44 ID:Y5ijcxK4]
あ、一個p++抜けてた。
でも、伝えたいことは伝わったはず。

806 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 05:52:02 ID:6T+yw6I/]
フェードイン?

807 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 06:29:38 ID:Y5ijcxK4]
そうですね、指定色へのフェードイン・フェードアウトという感じです。
SetDrawBright()では黒フェードが出来ますが、それの多色化&抜き色対応版です。

808 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 09:58:02 ID:1/mzBUbU]
2パターンだけ作って重ねてアルファを変えていくのが効率いいんじゃないかな



809 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 11:39:59 ID:xhsEfov4]
>>793
ゲームパッドがX-BOX専用コントローラーしか使えないとか論外すぎる。

810 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 15:29:37 ID:AMym+srg]
>>809 
 つ www.4gamer.net/games/027/G002741/20090227065/

811 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 16:10:09 ID:qoncgAvF]
使う側ならともかく、作って配布する側ならそれは解決にならんでしょ。
まあ自分で対応のパッド追加できると思うけどな。

812 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 16:12:21 ID:xhsEfov4]
>>810
いや、そういう問題では・・

813 名前:名前は開発中のものです。 mailto:sage [2009/03/10(火) 21:25:09 ID:LXtgug0h]
>>809
やっぱり白黒2値のパターンが別途居るようですよね……。
PNG使ってるのに、わざわざマスク画像が必要なのがめんどくさいと敬遠しているんですよ。

814 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 00:49:09 ID:SDHRypL0]
あれGraphLockって関数がいつのまにか消えたのか、と思って検索したら出た

hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1044
>GraphLock は現在のPC環境に適していないので非公開関数にすることにしました

これってどういう意味なの?非対応な環境が多いの?詳しい人教えて

一応コピペ
宣言       int GraphLock( int GrHandle , int *PitchBuf , void **DataPointBuf ) ;
概略      グラフィックメモリ領域のロック
引数       GrHandle   : ロックするグラフィックのハンドル(または画面の識別子)
PitchBuf   : ロックするグラフィックの1ライン辺りのバイト数を保存する変数へのポインタ
DataPointBuf :グラフィックデータのあるメモリへのアドレスを保存するポインタへのポインタ
戻り値     0:成功  −1:エラー発生

宣言    int GraphUnLock( int GrHandle ) ;
概略    グラフィックメモリ領域のロック解除
引数    GrHandle : ロックしたグラフィックのハンドル(または画面の識別子)
戻り値   0:成功  −1:エラー発生

815 名前:名前は開発中のものです。 [2009/03/11(水) 12:48:22 ID:4qWzS982]
>>814
対応してないとかじゃなくて、単に古くて多用されない技術だからじゃないかと無責任に予想

816 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 23:25:34 ID:tpGaQ5tp]
使えたら部分的なぼかしとか波紋とか屈折描画とかできて表現の幅ひろがりまくりんぐなのに・・・

817 名前:名前は開発中のものです。 mailto:sage [2009/03/11(水) 23:28:32 ID:jT1zwAC2]
シェーダサポートフラグですね。わかります。

818 名前:名前は開発中のものです。 mailto:sage [2009/03/12(木) 00:06:32 ID:5lgaab4l]
>>816
いいなぁそういうの使ってみたい。



819 名前:名前は開発中のものです。 mailto:sage [2009/03/12(木) 14:35:44 ID:hH9qj7K7]
歪みはテクスチャに背景を描画→2Dポリゴンで挑戦中

820 名前:名前は開発中のものです。 mailto:sage [2009/03/12(木) 23:20:03 ID:TV/Jr7F7]
>>814からの流れに関連してるかわからないけど、
ちょっと前に気になった事があるので質問させてください
LoadGraph系統以外で作成したグラフィックハンドルから
グラフィックデータのメモリを参照し、編集する事ってできないんしょうか?
SoftImage系の関数で同じような事はできるみたいだけど、
これは画像ファイルから取得したもののみですよね。。



821 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 00:27:53 ID:CMJVUsQ6]
>>820
MakeXXXColorSoftImageじゃあかんの?


822 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 00:43:55 ID:GbqqCgmR]
Easy3D正式版きてるな

823 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 01:09:59 ID:H+Qfngp2]
>>820
ありがとう、今気付いたんだけど先に用途を書くべきでした。
例えば>>816の波紋を実現しようと考えた時、
「このエフェクトをかける前までに描画された画面から
 エフェクトをかけたい矩形のグラフィックを取得して、
 これを元にピクセルを書き換える」
という処理を考えてみたんですが、GetPixelは重いようなので、
なら直接メモリを参照できないかと思った次第です。

MakeXXXColorSoftImageで作成するのはソフトグラフィックハンドルなので、
ここを描画先にしたりはできませんよね。。?

824 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 01:19:10 ID:H+Qfngp2]
>>823
訂正:ソフトグラフィックハンドル->ソフトイメージハンドル
あと「描画先」と書いたのは、「DrawGraph等で描画できる描画先」という意味です。
直接グラフィックハンドルをソフトイメージハンドルに変換できる方法があればよいのですが。
そもそもこの考え方自体がアホなんでしょうか。。。

825 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 03:43:56 ID:CMJVUsQ6]
>>824
画面全体にエフェクトを掛けたりするのに有ると便利だが、ちょっと調べてみたが出来ないっぽいね。

そもそもLoadGraphやMakeGraphはVRAMに転送した時点でPC環境に依った画像フォーマットに変換されちゃうから、
そこからソフトイメージハンドルを生成するとなると、コンバーター(デコーダ相当)が必要になる。
DXライブラリの作者としては手間が掛かるから、要望が無い限り実装を見送っていると予想している。
優しい作者さんなんで、要望送ってみてはどうかな?

現状で対応するとなると、どうしても遅くなるが、
画面サイズと同じ大きさにMakeGraphした裏画面領域をSetDrawScreenして、
一連の画像を転送し、GetPixcelとDrawPixcelするのがベストな選択かねぇ。

SaveDrawScreenを使ってbmp保存して、そこからSoftImageを作るという最終手段もある。(とても遅い)

826 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 03:50:25 ID:CMJVUsQ6]
>>823
ああ。書いてておもったが、SaveDrawScreenがあるから、デコーダ処理は既に内部には出来てるのか。
作者に要望だすと、すぐに実装してくれると思うよ。

827 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 04:00:17 ID:HX55tf54]
解説 グラフィックデータのあるメモリ領域には『ロック』をしなくては アクセスする事が出来ません。
細かい事は抜きにしてとにかくWindows 環境ではメモリの管理が厳重なので malloc関数 などで確保したメモリ 領域のように簡単にはアクセスは出来ないようになっています。だから 『ロック』という作業を行い直接アクセスできるようにします。
 グフィック領域に直接アクセスする利点はDrawPixel や GetPixel 関数を使用するよりも処理が速い、等があります。
 ロックの説明をはじめる前に注意なのですが、ロックを行った場合は 直接アクセスが終り次第直ちにロックを解除してください。
ロックを している最中にデバッグモードなどのブレークポイントを使ってプロ グラムを止めるとハングアップするので注意してください。
ロックを すると 『GraphUnLock』関数を使用してロックを解除しない限り DrawLineをはじめすべての描画関数が使用不可能になるので注意してください。
 では話を元に戻します。
 ロックをするにはまずロックをしたいグラフィックハンドル、または DX_SCREEN_FRONT , DX_SCREEN_BACK 識別子を使って画面をロックする 事も出来ます。
 ロックが完了すると関数は PitchBuf に指定したポインタにロック したグラフィック領域の1ライン辺りのバイト数と、DataPointBuf で 指定したポインタにロックしたグラフィックへのアドレスが代入されます。
 こうしてロックしたグラフィック領域にはめでたく直接アクセスが 出来るようになります。まず希望の座標(点)にアクセスするには 以下の式を用います

  (グラフィック領域の先頭アドレス) +
  (X座標値 × (グラフィックのカラービット数 ÷ 8)) +
  (Y座標値 × 1ライン辺りのバイト数)

  = 希望の座標のポインタ

828 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 04:02:17 ID:HX55tf54]
 この中の『グラフィック領域の先頭アドレス』と言うのは DataPointBuf から取得できる値、『1ライン辺りのバイト数』は PitchBuf から取得できる値
『グラフィックのカラービット数は』SetGraphMode関数 の 引数 ColorBitNum の値(デフォルトでは16です)となります。

 次に1ドット辺りのビット数はカラービット数と比例します、以下に カラービット数と一般のデータ型との比例関係を示します。
  8bitカラー     char 型と同サイズ
  16bitカラー    short 型と同サイズ
  32bitカラー    int 型と同サイズ
 もし16ビットカラーのグラフィックに1ドット分データのアクセスを するつもりで int 型変数で値を代入した場合は2ドット分描画してしまう ので注意してください。(アドレスの算出のときも同じです)
注 … グラフィックをロックする場合は SetUse3DFlag 関数で3D機能を使わない設定にしてからLoadGraph,MakeGraph等で作られたグラフィックでないとロックは失敗します。
例  128×128のグラフィックデータを作成し、座標( 24 , 11 )
  の点に色コード0を代入します。(16ビットカラー)
char *GraphData ;
short *DrawPoint ;
int Pitch , GHandle ;
// グラフィックの作成
GHandle = MakeGraph( 128 , 128 ) ;
// グラフィックのロック
GraphLock( GHandle , &Pitch , &GraphData ) ;
// 座標( 24 , 11 )のデータのアドレスを算出
DrawPoint = ( short * )( GraphData +
24 * ( 16 / 8 ) +
11 * Pitch ) ;
// 色コード0を代入します
*DrawPoint = 0 ;
// ロックを解除します
GraphUnLock( GHandle ) ;



829 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 04:05:06 ID:HX55tf54]
サンプル 表画面をロックして直接アクセスで画面にグラデーションを描きます
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
int i , j , k ;
int Pitch ;
short *DrawPoint , Cr ;
char *GraphData ;
if( DxLib_Init() == -1 ){return -1;}
// 表画面をロックします
GraphLock( DX_SCREEN_FRONT , &Pitch , ( void ** )&GraphData ) ;
// 画面にグラデーションを描きます
for( i = 0 ; i < 480 ; i ++ )
{
for( j = 0 ; j < 640 ; j ++ )
{
// 色の値を取得
k = 255 * i / 480 ;
Cr = ( short )GetColor( k , k , k ) ;
// 描画する座標のポインタを計算
DrawPoint = ( short * )( GraphData + j * ( 16 / 8 ) + i * Pitch ) ;
// グラフィックデータへの直接アクセスで点を描画
*DrawPoint = Cr ;
}
}
// 表画面のロックを解除(『GraphUnLock』使用)
GraphUnLock( DX_SCREEN_FRONT ) ;
// キーの入力待ち
WaitKey() ;
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}

830 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 04:17:46 ID:CMJVUsQ6]
>>827
ありがとう。
GraphLock/Unlockなかなか便利だねぇ
ちょっと使ってみます
作者から非公開関数になった理由が知りたいとこだね

831 名前:名前は開発中のものです。 mailto:sage [2009/03/13(金) 10:15:03 ID:H+Qfngp2]
>>825-829
なるほど、そのためのGraphLock/UnLockだったのか。
あと非公開関数になっただけで使う事はできるんですね。
てっきり使用すらできなくなったものだとばかり思ってました。。。
とりあえずはこれで出来そうなので、デコード処理の要望の方は見送ろうかと思います。
お二方とも、ありがとうございました。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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