09/03/01 10:04:25 idjBCaEs
ああ、駄目だ
>>694だと×ボタンが押された時点でキューが送られちゃってるからDXライブラリの内部の構造的に終了確認はできない(終了確認が無限に出続ける)
「終了します」って有無を言わさぬ表示なら出来るけどね
中身見てるけど、終了キューを解除する関数は見あたらないし
独自に一度キューを取得して、ProcessMessageに投げる前に解除しちゃえば良いんだろうけど、そんなことすると初心者でも使えるって良点があじゃぱー
>>696
どんな小技が良いかな?
さっきあげた関数は単体で使えると思うし
今ソース見ながら色々いじってたけど
それ以上のことやろうと思うと色々内部的に引っかかることに気付いた
>>697
もう一度よーく読んでほしい
699:名前は開発中のものです。
09/03/01 10:54:11 gjx3PjZU
>>698
ごめん。
よく読んだ上で書いたけどわからない。
理解力なくてすまん。きっと俺が間違っている。
が、これは瑣末な問題なので暇なときにでも考えておくとして…
>>693
>一応応用テクニックとして、HSPからDXライブラリを呼ぶ方法とかだったら需要ある?
これ興味あるかな。
700:名前は開発中のものです。
09/03/01 11:24:01 oPHW1ePY
>>697
ハンドル分けたらだめ
一つのハンドルから転送元の領域を指定して描画するんだよ
同じテクスチャを連続して使うときは切り替えが行われないからその分効率が良くなる
701:名前は開発中のものです。
09/03/01 11:38:25 ey11ozVK
質問掲示板の検索を使おう
>>698
URLリンク(hpcgi2.nifty.com)
>>699
ここのNo.4に書いてある高速描画云々のところ読めば分かる
URLリンク(hpcgi2.nifty.com)
読みこみ速度は同じだけど描画速度は
一枚の画像を読み込み複数に分けハンドルを取得 > 複数の画像を読み込みそれぞれをハンドルを取得
702:名前は開発中のものです。
09/03/01 11:39:47 a7Bg5ATd
HSPなんぞ使うなよ
703:名前は開発中のものです。
09/03/01 11:44:24 oPHW1ePY
なるほどLoadDivGraphでもいいのか
704:名前は開発中のものです。
09/03/01 13:22:39 gjx3PjZU
>>700
なるほど
理解した㌧クス
>>701
読んでみる
>>702
今更HSP使う気はないけどやり方にはちょっと興味が
705:名前は開発中のものです。
09/03/01 13:39:31 9rIzOA3I
>>691-694
乙
前にHSPから使ったりしてたけど、わざわざHSPから呼び出す必要があまり無いような気がしたのでVC導入したな
706:名前は開発中のものです。
09/03/01 14:11:25 idjBCaEs
>>701
なるほど
StateResetFlagは初期値FALSEになってるやつか、完全に見落としてたアリガトウ
>>702
HSP使うメリットってなんだろう、(うろ覚えだけど)3D処理が簡単なDLLかなんかがあったよね?
でも、それ使うなら最初からHSP使えばいいし……
自分から言っといてなんだがメリット見えないやごめんw
DXライブラリの可能性を追求しようと思ってドラッグ&ドロップで画像表示するアプリ作ろうと思ったらこんなに時間かかっちゃったよ
やっぱりアプリ系はおとなしくWINAPI使うに限るorz
URLリンク(www3.uploader.jp)
ふ、と思ったんだけどこのスレ結構知識ある人多いしうpロダでも用意しとけばサンプル集みたいなの作れるしいいんじゃね?
人のソース見れるってのは、(俺含め)初心者にはとてもありがたいんだよね
707:名前は開発中のものです。
09/03/01 14:27:12 ZNmLTGrU
ソースうpは恥ずかしい…
708:名前は開発中のものです。
09/03/01 14:51:26 lYNtcth6
自分の全裸うpするようなもん
709:名前は開発中のものです。
09/03/01 15:45:22 z/eFYQPp
俺のは絶対人に見せられないソースだと自覚している。
一応動いているが、初心者どころの問題じゃない。
710:名前は開発中のものです。
09/03/01 16:15:26 xm1UJhmc
ソースは出来るだけ人に見せたほうがいいよ。
指摘されればどこが良くて悪いのかが分かって次に必ず生かせる。
リアル知人じゃなくて2chで晒すのがいいかはよくわからんが・・・
うpするのとは話がちょっと違うけどここでも読んでみるといい
URLリンク(www.kojima-cci.or.jp)
711:名前は開発中のものです。
09/03/01 16:37:16 g9LGhZvF
専ロダほしいな・・・
712:名前は開発中のものです。
09/03/01 16:45:33 c9LYSV+3
ドット絵でbmpで保存して使うのと
きれいに書いたpngだとぜんぜん解像度違うような気がして変になっちまった。
ドット絵の設定ミス?それともpngにそろえるべきかな。。
713:名前は開発中のものです。
09/03/01 18:31:12 a1nbTQe/
ドット絵だからドットが見えるんじゃないのか??
714:名前は開発中のものです。
09/03/01 23:17:37 2a8K6SCC
爆発のエフェクトなどを作成する際に
グラデーションの画像を極座標変換?して
円形の画像を作成しているのだけれど、
これが何をやっているのかよくわからん。
715:名前は開発中のものです。
09/03/01 23:25:10 oPHW1ePY
つ高校数学の教科書
716:名前は開発中のものです。
09/03/01 23:54:03 A8mpIuw8
数学Cあたりだっけ
717:名前は開発中のものです。
09/03/02 00:15:56 ziDQhibJ
そういえば洞窟物語もDXライブラリ使ってるんだね
718:名前は開発中のものです。
09/03/02 00:35:55 hEBh+N4j
公式掲示板か
多分違うと思うぞ
Pixel氏が以前DirectX2だか3だかを使って作ったって言ってたし
何か勘違いしてああ答えたか、若しくは今作ってるゲームにDXライブラリを使ってるんだろう
719:名前は開発中のものです。
09/03/02 01:43:24 3riYRQc6
ウィンドウサイズのデフォルトは640*480だけど、これの変更はできる?
フルスクリーンにしないといけないから制約はあると思うけど
720:名前は開発中のものです。
09/03/02 01:47:07 7FxY5OR7
Dxライブラリのファイルにデフォルトのサイズがディファインされてたから
あれいじればできるんじゃね?
721:名前は開発中のものです。
09/03/02 01:52:06 x0I/gxMT
>>719
SetGraphMode( 800 , 600 , 32 ); で800*600になる
722:名前は開発中のものです。
09/03/02 02:06:23 3riYRQc6
>>720
ライブラリ書き換えるのはアウトだろ常識的に考えて……
そのせいでいつどこでバグが起こるかわからぬ
>>721
サンクス
画面モードの変更で解像度が変えれるとは、単語検索で見つからないわけだ
723:名前は開発中のものです。
09/03/02 02:13:56 PBT6djln
リファレンス大した量じゃないんだから
一覧を一通り目を通せば済むだろ。
724:名前は開発中のものです。
09/03/02 06:43:49 +ax8ZdoD
おれなんかどんなことができるんだろうと、わくわくしながら
上から下まで読むんだけどなぁ・・・
725:名前は開発中のものです。
09/03/02 08:17:17 vDZSfAmr
>>718
でも文字表示とかDXライブラリっぽいよな
726:名前は開発中のものです。
09/03/02 11:57:41 6eQe3/TV
>別にDXライブラリに限らないけど、DXライブラリを知った時も
リファレンスをさらさらっと流して、「これなら俺にも使えるんじゃないかな?」と思って
使い始めたな。
別に覚えなくても、一度目を通しておけば、
後になって「こういう事がしたいけど、それっぽい命令あったよな……」って
探しやすくなるしな。
727:名前は開発中のものです。
09/03/02 20:14:38 hc/QEiU+
アレだけ分かりやすくて運営管理もアレだけちゃんとしてるなんて今まで見たことないよな。
DirectXでゲームを作るっていうジャンルに関して革命的だし、最早XNAなんかも超えてると言っても過言ではない。
728:名前は開発中のものです。
09/03/02 20:18:02 qXNeI5og
ハンドルが全部intなのだけはどうかと
729:名前は開発中のものです。
09/03/02 21:13:54 Rv93cI1M
ほんとだよな。ちゃんと符号無しにしてくれないと。
730:名前は開発中のものです。
09/03/02 21:38:18 3lZqI4Au
>>729
そこじゃねーだろwww
731:名前は開発中のものです。
09/03/02 21:42:53 3lZqI4Au
typedefしなかったのは多分初心者への配慮だろうね
732:名前は開発中のものです。
09/03/02 22:25:14 ziDQhibJ
画像をプログラムで制御(回転など)して動いてみせるのと
一枚一枚画像を作ってパラパラ漫画みたいにアニメーションさせるのとどっちが負荷低いかな
733:名前は開発中のものです。
09/03/02 22:54:20 qXNeI5og
パラパラ漫画方式の画像が一枚の画像にまとめてあるなら
原理的に変わらないはず
734:名前は開発中のものです。
09/03/02 22:57:12 qXNeI5og
いや画像がまとめてあるかどうかはこの場合関係ないか
まあ変わらん
735:名前は開発中のものです。
09/03/03 01:09:39 vuUaUlBc
その二つは比較すべきものじゃない気もするがw
回転ありの描画命令よりは回転なしの方が負荷は軽いだろうけど、
大した差じゃないみたいだし、好きにしていいんじゃないかな。
736:名前は開発中のものです。
09/03/03 02:53:14 l+63ggMa
画面上の殆どのパーツが回ってるぜ!とか
512x512のパーツが回ってるぜ!とか
回転角度に応じて256パターンの画像を用意しました!
みたいな変なことやってなきゃ大丈夫だろう
737:名前は開発中のものです。
09/03/03 03:53:26 wZU6jxH0
メモリに優しいのがプログラムで制御かな。後者はあまりオススメできない。
パラパラ漫画が全部VRAMに乗るとは限らないし、
1フレーム1枚のように別テクスチャ作るのであればさらに重くなる。
1枚でまとめる場合も、作成できるテクスチャサイズ制限があるハードウェアが過去にあり、
(Voodoo時代ではテクスチャサイズが256*256が最大であった)
そのような場合、DXライブラリではテクスチャ分割が行われるので、
大きなテクスチャを作るとパフォーマンスが犠牲になります。
なので、回転・反転・拡大縮小などといった
Direct3Dによるハードウェア支援で記述できる内容であるのなら、前者の方がパフォーマンスがよくなります。
ちなみに後者で実装するのであれば、テクスチャのサイズは正方形が望ましいですよ。
738:名前は開発中のものです。
09/03/03 04:22:48 l+63ggMa
ただし、斜め向きとかにした場合、
最初から画像を用意しておいた方が綺麗に見えることは多々あるな。
プレイヤーキャラの画像など、
重要そうな部分だけパターンを用意しておくのも悪くない。
739:名前は開発中のものです。
09/03/03 09:38:20 HSt7mZci
>>737
>正方形
一辺の長さが2の倍数の正方形ね
740:名前は開発中のものです。
09/03/03 14:11:43 lmHLCC6G
>>739
> 2の倍数
2の累乗ね
741:名前は開発中のものです。
09/03/04 10:39:32 IqyXTxRb
ん……?
グラフィックハンドルがintって事は、持てるグラフィックハンドルの最大数は約32000って事?
742:名前は開発中のものです。
09/03/04 10:43:25 OmVViNLo
いやintは2*(10^9)くらいまで
その前にメモリがなくなるだろうけど
743:名前は開発中のものです。
09/03/04 16:29:04 aWTUpMQ1
東方の弾幕とかって1つ1つの弾にハンドラ持たせてるの?
744:名前は開発中のものです。
09/03/04 17:38:35 IqyXTxRb
>>742
intってそんなに長かったっけ?
>>743
ちゃんと1つずつID割り振って読み込んでるみたい。
745:名前は開発中のものです。
09/03/04 18:29:44 Q764ubCY
32bit機での
符号無しintは2^32
符号ありintは2^31(符号に1bit使用)
プログラミングしてるなら知ってて当然だろ…
746:名前は開発中のものです。
09/03/04 18:29:46 zCrgAKk6
>>744
おまえさんのいってるのは short int
747:名前は開発中のものです。
09/03/04 19:26:33 IqyXTxRb
なるほど……
なんで勘違いしてたんだろう……
748:名前は開発中のものです。
09/03/05 00:07:34 aVo6G4mJ
>>743
何を言ってるんだ?
東方はDXライブラリ使ってないぞ
749:名前は開発中のものです。
09/03/05 10:15:06 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:名前は開発中のものです。
09/03/05 10:26:43 ddVb/3t1
>747
旧VBのIntegerが16bitなのと混ざってない?
>745
ハードは関係ない。コンパイラが決定する。
16bitアプリを32bitハードやOSで走らせても
intが勝手に32bitになったりしない。
処理系にあわせて決定するのが自然なだけ。
751:名前は開発中のものです。
09/03/05 11:04:56 B3wyDoGN
>>749
はい? え?
back.bmp を透過処理なしで描いた上に、char.png を透過処理ありで描いたらそりゃちゃんと透過処理されるだろうけど
char.png を透過処理ありで描いた上に、back.bmp を透過処理なしで描いたらそりゃ上書きされるだけだと思うんだが……。
752:名前は開発中のものです。
09/03/05 12:34:23 +9ctDc2h
>>750
あー、昔に見た資料がかなり古いものだったから間違って覚えてたのかも
753:名前は開発中のものです。
09/03/06 21:17:00 pmzRauOh
ある画像だけの透過と、透過の度合いを設定することはできますか?
リファレンス見る限り見当たらないのですが
754:名前は開発中のものです。
09/03/06 21:34:26 +Tdk650S
その画像を描画する前にSetDrawBlendMode
透過の度合いはPal引数
クラス使って透過率とグラフィックハンドルをまとめて管理するようにするといい
755:名前は開発中のものです。
09/03/06 21:46:01 pmzRauOh
>>754
即レスありがとう^^
うまくできました!!
756:名前は開発中のものです。
09/03/06 23:45:45 HF/v1JaI
DXライブラリ3Dの開発引き継いでる奴いないの?
757:名前は開発中のものです。
09/03/07 00:24:08 3MouTLA1
2Dゲームでも背景は3Dにしたい・・・
本家DXライブラリにテクスチャ付モデルとフォグ表示機能だけあれば最高なんだが
758:名前は開発中のものです。
09/03/07 01:56:55 JfYg6t6e
シューティングの背景用にDXライブラリで自前の簡易モデルを描画する仕組みを組んだけど、
意外と簡単に組めたよ。
ポリゴン事に情報を配列に落として、座標を変換してVERTEX配列に入れてから描画。
フォグは出来なかったから単色背景+奥の頂点を透過で誤魔化してる。
759:名前は開発中のものです。
09/03/07 07:03:57 pCqKP5AO
クラスのコンストラクタでLoadGraphするとハンドルが取得できてないみたいだけど
仕様ですか?
他で初期化するから別に問題ないけど。
760:名前は開発中のものです。
09/03/07 08:46:35 9xqjyk6r
そのコンストラクタを呼ぶタイミングがまずいだけだろ
でもLoadGraphみたいな失敗しやすいものをコンストラクタで使うのはあまり好ましくない
761:名前は開発中のものです。
09/03/07 13:25:49 d6ZakwC3
C++のコンストラクタはオブジェクトが出来上がる前の不安定な状態だからメソッド呼んだりはしない方がいいよ。
762:名前は開発中のものです。
09/03/07 20:23:03 83odH6gl
それ俺がよくやった失敗だけどLoadGraphするまえにDxLib_Initやってないんじゃまいか
763:名前は開発中のものです。
09/03/08 01:02:04 sz9LKWkI
>>761
んなこたないw
764:名前は開発中のものです。
09/03/08 01:07:09 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:名前は開発中のものです。
09/03/08 02:05:16 Os5GQobq
>>764
今PC故障中で携帯から書き込んでるので、一週間後位になるけど……
龍神録プログラミングの館に似たような内容の講座があったので、
それを参考にした方が早いかも?
自分のソースと比べた所、アルゴリズムは大差なかったし
766:名前は開発中のものです。
09/03/08 03:07:46 PA5CtbPk
>>760
>>762
それだわ。
メインループの外だったよ。
767:名前は開発中のものです。
09/03/08 07:29:17 CGpW+st2
>>763
そうなの?
憂鬱本かなにかにコンストラクタで複雑な処理はやめたほうがいいって
書いてあったから信じてたよ。
768:名前は開発中のものです。
09/03/08 11:20:16 lUOcnlf/
使うほうが失敗したときに面倒でしょ、コンストラクタだと
769:名前は開発中のものです。
09/03/08 11:49:19 8uH2yrBU
例外処理を全面的に取り入れてるならコンストラクタで失敗してもおk
失敗したら絶対に例外を投げること
そうでなければダメ
770:名前は開発中のものです。
09/03/08 13:15:29 sz9LKWkI
>>767
言語仕様的にはまったく問題ない
>768が言ってるように、
その本には別の理由でやめたほうがいいって言ってるんだと思うよ
ただし、staticなインスタンスは例外で
この場合、mainが呼ばれる前のスタートアップルーチンで
インスタンスが生成されるのでコンストラクタでは
初期化以外のことをやるとまずい
771:名前は開発中のものです。
09/03/08 15:28:40 Os5GQobq
東方の新作が発表される度に自作のゲームとシステムが被っててヘコむ……
772:名前は開発中のものです。
09/03/08 15:35:38 26PtmX+G
>771
それを気にしてたら、世の中作品なんて生まれない。
大丈夫、何ら問題ない。思う存分やれ。キミは盗作じゃない。
……自分のやりたいことを、他の人が作ったのでそれで満足しちゃったなら知らんw
(こっちもよくある話だけどな!)
773:名前は開発中のものです。
09/03/08 17:25:05 tah76f/h
弾幕シューは東方だけじゃないしね
774:761
09/03/08 18:12:09 pjH2xL1q
>>770
俺も>>767のように憂鬱本で読んで信じてきたんだけど、後学のために教えて欲しい。
まず憂鬱本にはこんな風に書いてある。
・コンストラクタやデストラクタはあまり難しい処理をするのは考え物。
1・返り値を持つことが出来ない。
2・インスタンスが完全な状態ではない。
3・外部変数としてクラスインスタンスがある場合、コンストラクタやデストラクタはmain()の走る前、後になる。
>>770さんが言っているのは3の場合で、この本によると
「ポインタとして宣言しておきmain()が走った後でその中でnewする」
という解決策が書いてある。
で、問題の2にははっきりと
「コンストラクタ、デストラクタが走っているときは、インスタンスは完全な状態ではない」
と書いてあり、
「実は内部的にはそのインスタンスの使用するメモリの取得/解放とそれに伴う複雑な作業も行っている」
「インスタンス自体がまだ生成途中であり、内部的にはまだ不安定な状態」
と書いてあります。
問題点は、
「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
との事です。
C#なんかではコンストラクタでのメソッドの呼び出しなども保障されてますが、C++では言語使用的には保障されていない、と解釈したのですがここらへんどうなんでしょうか?
775:名前は開発中のものです。
09/03/08 19:09:05 CrTNgcou
この際、本家DXライブラリにDXライブラリ3Dを機能統合してしまっても良いんじゃないか?
今どき2Dだけじゃなぁ
776:名前は開発中のものです。
09/03/08 19:25:34 tHlNETTL
>>775
いや、意味が分らん。
碌にDirectXすら使えない人間が3Dに手をだしてどうしたいんだ?
むしろ、本家は本家であの程度でまとまってるからこそ良いライブラリだろ。
もっと色々とやりたかったら海外の3Dライブラリをあさればいい。高機能の多いぞ。
(まぁ、普通に日本語対応がメンドイけど。)
777:名前は開発中のものです。
09/03/08 19:52:53 CrTNgcou
っていうか、DXライブラリ3Dの開発を継続してほしいJEXさん
778:名前は開発中のものです。
09/03/08 23:53:47 Os5GQobq
>>772,773
弾幕毎に名前付けてるから、気を付けないとまんまになっちゃうんだよね
もう開き直っちゃおうかな……
779:名前は開発中のものです。
09/03/09 00:24:37 y+3gsDNg
どうせやるなら「白い弾幕くん」くらい自由度上げてみたらどうだ
780:名前は開発中のものです。
09/03/09 05:38:20 xYWyf4vJ
縦弾幕だったらどうやったって東方っぽいって言われるのがオチだから、
変なこと気にせず好きにやっちゃえYO!
781:名前は開発中のものです。
09/03/09 13:06:42 Ge4atQjd
東方のオマージュである、と明記しちゃえば変な因縁はつけられなくなると思う
782:名前は開発中のものです。
09/03/09 13:28:18 1MIteGpr
自分で考えて実装した者に対して
なんという屈辱を。
783:名前は開発中のものです。
09/03/09 14:58:21 Yq7DJGmB
パクってないんなら堂々としてればいいじゃない
ここで愚痴る前にちゃっちゃと完成させて
もう東方に先を越されないようにすればいいじゃない
784:名前は開発中のものです。
09/03/09 15:06:44 mr6tRDyA
先を越されたから愚痴ってるんだと思うがのw
785:名前は開発中のものです。
09/03/09 15:12:00 anLE8kz6
新しいの出るごとに被るというと
低速移動時に敵を貫通するとかボム使うとパワーが減るとかその辺りか?
786:名前は開発中のものです。
09/03/09 15:54:45 z4EGzSSU
別に愚痴のつもりじゃありませんでした
こうやって悩むのもゲーム制作の楽しさの一つなので……
気分を害されたのならすいません
>>785
点レートアイテムとか、特殊アイテムを取るとボーナス敵が出る点が……
787:名前は開発中のものです。
09/03/09 17:01:47 GzA1DnX1
どんなシューティングでもお前。。。
788:名前は開発中のものです。
09/03/09 18:04:17 dWRPooR0
Q.○○のパクリですか?
A1.はい、参考にしました。
→盗作イクナイ! 俺の好きな○○を汚すな! ○○の公式サイトのBBSに通報(?)書き込み
A2.いいえ、オリジナルです。似ているのは偶然でしょう。
→嘘を言うな、正直に言えよ
A3.いいえ、○○ではなく△△のパクりです。
→そんなん知らねーよ! △△も○○のパクりだな!
実際にあるから困る。
789:名前は開発中のものです。
09/03/09 18:28:11 aHHsyNV0
結論:気にせず作れ
作ることにも価値がある
790:名前は開発中のものです。
09/03/09 18:40:02 6kYj4gTE
>>788 どっちかと言うと、この手の奴で、実際にパックたりしてなかったら、
何も答えないのがベスト。ただただ、事務的返しで流すべし。
あと、>>786みたいのは 東方以前からあるのばっかじゃねぇかよwww
それこそ、ファミコン全盛の時代(のアーケード)から・・・・
「今更それを先を越されたとかwww」
と言われるのが落ちじゃね?
791:名前は開発中のものです。
09/03/09 18:51:35 z4EGzSSU
んー、今更だけど自分で気にしすぎだった気がしてきた
前作が東方をリスペクトしたものだったので、今回も素直に断り書きを入れてみます
792:名前は開発中のものです。
09/03/09 19:02:29 dWRPooR0
パロディにまで昇華させてしまうという手もあるな。
793:名前は開発中のものです。
09/03/09 21:33:00 Zw6a9bk0
URLリンク(siv.creation.googlepages.com)
知ってるとは思うがこれにはずっと期待してる
794:名前は開発中のものです。
09/03/09 22:34:04 GzA1DnX1
押しっぱをできなくするようにしたいけど
char a[256]
GetHitKeyStateAll(char *a)
つかうとうまくできねぇ。。
ポインタをctrcmpやるのはおかしいの?
それとも配列に入ってるのがおかしいの?
俺の頭がおかしいの?
795:名前は開発中のものです。
09/03/09 23:19:34 2qC8QqlY
>>774
遅レスだがコンストラクタについて幾つか書きます。
さすがに長文書いてコメントが無いのは可哀想だったから。
昔の言語仕様ではコンストラクタではインスタンスの生成途中であるから複雑な処理を書かないようにしていた。これは慣習・慣例の部類の話。
コンパイラの亜種が多くて、C++の仕様外の範疇での動作はどのようになっているのか分からない時代だったからという背景もある。
自分はコンストラクタに初期化処理を噛ませる横着な書き方をしていたときに先輩に指摘された事は、1,2,3以外にも、、、
・クラス設計者とクラス利用者は同じでない
⇒利用者がstaticで外部変数なインスタンスを生成するかもしれないから、
mainよりも先に呼ばれる処理に複雑な記述を置くべきでない。
つまり、利用者の立場になって明示的に初期化処理を宣言するべき。(手を抜くな)
・戻り値を持たない件に関して、例外処理を使うのは怠惰な手段である。
⇒try-catchを用いるのは、デバッグの最終手段である。(例外処理はネストできない為)
例外処理は一般的にコンパイラの最適化の阻害となり遅くなる要因となる。(ジャンプテーブルを生成する為)
つまり、保持値チェックにはassert使えというお話。
⇒メモリ確保に失敗する危険性をもっと認識するべき
特定のハードウェアを対象にする場合、大概は独自のメモリアロケーター(dlmalloc等)を実装していることが多く、
new失敗の可能性(インスタンス生成失敗)は大いにある。
とのことでした。
>問題点は、
>「このような状態で他のクラスのインスタンスのメンバ関数を読んだりすると巡り巡ってまだ生成途中の自分自身のメンバ関数が呼ばれるかもしれないから」
>との事です。
これには同意です。
だから「コンストラクタに記述するのはせいぜいメンバ変数に対して初期値の代入ぐらい」に留めている人が大半で自分もそうしています。
いや~、バグの無いプログラムって難しいですね。
796:名前は開発中のものです。
09/03/09 23:31:07 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:名前は開発中のものです。
09/03/09 23:31:59 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:名前は開発中のものです。
09/03/09 23:42:23 YtHLVg0L
推しっぱをできないようにするなんて
int pushOK = 0;
とか用意しといて
if (a[チェックしたいキー] && pushOK) {押したときの処理}
if (!a[チェックしたいキー]) pushOK = 1;
とかやればいいじゃない
(※厳密な文法に突っ込むのなしね、あと変数名が良くないことにもね)
799:名前は開発中のものです。
09/03/09 23:49:28 GzA1DnX1
あぁ。詳しくなくてすまん。ありがとう。
でも、なんとか、動作はしたぜ。
800:名前は開発中のものです。
09/03/10 00:11:41 Y5ijcxK4
LoadSoftImage()でPNG-8のパレットが取得も設定もできん…。
パレットはBMPしか有効じゃないんか。
透過色設定とパレット変更を同時にしようと思うと、PNG-8がベストな選択だったんだけど、
さてどうするべか……。
801:名前は開発中のものです。
09/03/10 00:43:20 liOB0hIm
どっかの時点でBMPに変換されるんだろうけど
その時点じゃまだなんだろうかね。
てかそんな命令あったのか……。
802:名前は開発中のものです。
09/03/10 01:39:41 Y5ijcxK4
PNGについてはlibpng使ってるっぽいからなぁ。
パレット変えられないのは困ったぜ。
803:名前は開発中のものです。
09/03/10 02:42:45 f5O5uX62
libpngって最近脆弱性が発見されたよね
804:名前は開発中のものです。
09/03/10 05:14:32 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:名前は開発中のものです。
09/03/10 05:17:44 Y5ijcxK4
あ、一個p++抜けてた。
でも、伝えたいことは伝わったはず。
806:名前は開発中のものです。
09/03/10 05:52:02 6T+yw6I/
フェードイン?
807:名前は開発中のものです。
09/03/10 06:29:38 Y5ijcxK4
そうですね、指定色へのフェードイン・フェードアウトという感じです。
SetDrawBright()では黒フェードが出来ますが、それの多色化&抜き色対応版です。
808:名前は開発中のものです。
09/03/10 09:58:02 1/mzBUbU
2パターンだけ作って重ねてアルファを変えていくのが効率いいんじゃないかな
809:名前は開発中のものです。
09/03/10 11:39:59 xhsEfov4
>>793
ゲームパッドがX-BOX専用コントローラーしか使えないとか論外すぎる。
810:名前は開発中のものです。
09/03/10 15:29:37 AMym+srg
>>809
つ URLリンク(www.4gamer.net)
811:名前は開発中のものです。
09/03/10 16:10:09 qoncgAvF
使う側ならともかく、作って配布する側ならそれは解決にならんでしょ。
まあ自分で対応のパッド追加できると思うけどな。
812:名前は開発中のものです。
09/03/10 16:12:21 xhsEfov4
>>810
いや、そういう問題では・・
813:名前は開発中のものです。
09/03/10 21:25:09 LXtgug0h
>>809
やっぱり白黒2値のパターンが別途居るようですよね……。
PNG使ってるのに、わざわざマスク画像が必要なのがめんどくさいと敬遠しているんですよ。
814:名前は開発中のものです。
09/03/11 00:49:09 SDHRypL0
あれGraphLockって関数がいつのまにか消えたのか、と思って検索したら出た
URLリンク(hpcgi2.nifty.com)
>GraphLock は現在のPC環境に適していないので非公開関数にすることにしました
これってどういう意味なの?非対応な環境が多いの?詳しい人教えて
一応コピペ
宣言 int GraphLock( int GrHandle , int *PitchBuf , void **DataPointBuf ) ;
概略 グラフィックメモリ領域のロック
引数 GrHandle : ロックするグラフィックのハンドル(または画面の識別子)
PitchBuf : ロックするグラフィックの1ライン辺りのバイト数を保存する変数へのポインタ
DataPointBuf :グラフィックデータのあるメモリへのアドレスを保存するポインタへのポインタ
戻り値 0:成功 -1:エラー発生
宣言 int GraphUnLock( int GrHandle ) ;
概略 グラフィックメモリ領域のロック解除
引数 GrHandle : ロックしたグラフィックのハンドル(または画面の識別子)
戻り値 0:成功 -1:エラー発生
815:名前は開発中のものです。
09/03/11 12:48:22 4qWzS982
>>814
対応してないとかじゃなくて、単に古くて多用されない技術だからじゃないかと無責任に予想
816:名前は開発中のものです。
09/03/11 23:25:34 tpGaQ5tp
使えたら部分的なぼかしとか波紋とか屈折描画とかできて表現の幅ひろがりまくりんぐなのに・・・
817:名前は開発中のものです。
09/03/11 23:28:32 jT1zwAC2
シェーダサポートフラグですね。わかります。
818:名前は開発中のものです。
09/03/12 00:06:32 5lgaab4l
>>816
いいなぁそういうの使ってみたい。
819:名前は開発中のものです。
09/03/12 14:35:44 hH9qj7K7
歪みはテクスチャに背景を描画→2Dポリゴンで挑戦中
820:名前は開発中のものです。
09/03/12 23:20:03 TV/Jr7F7
>>814からの流れに関連してるかわからないけど、
ちょっと前に気になった事があるので質問させてください
LoadGraph系統以外で作成したグラフィックハンドルから
グラフィックデータのメモリを参照し、編集する事ってできないんしょうか?
SoftImage系の関数で同じような事はできるみたいだけど、
これは画像ファイルから取得したもののみですよね。。
821:名前は開発中のものです。
09/03/13 00:27:53 CMJVUsQ6
>>820
MakeXXXColorSoftImageじゃあかんの?
822:名前は開発中のものです。
09/03/13 00:43:55 GbqqCgmR
Easy3D正式版きてるな
823:名前は開発中のものです。
09/03/13 01:09:59 H+Qfngp2
>>820
ありがとう、今気付いたんだけど先に用途を書くべきでした。
例えば>>816の波紋を実現しようと考えた時、
「このエフェクトをかける前までに描画された画面から
エフェクトをかけたい矩形のグラフィックを取得して、
これを元にピクセルを書き換える」
という処理を考えてみたんですが、GetPixelは重いようなので、
なら直接メモリを参照できないかと思った次第です。
MakeXXXColorSoftImageで作成するのはソフトグラフィックハンドルなので、
ここを描画先にしたりはできませんよね。。?
824:名前は開発中のものです。
09/03/13 01:19:10 H+Qfngp2
>>823
訂正:ソフトグラフィックハンドル->ソフトイメージハンドル
あと「描画先」と書いたのは、「DrawGraph等で描画できる描画先」という意味です。
直接グラフィックハンドルをソフトイメージハンドルに変換できる方法があればよいのですが。
そもそもこの考え方自体がアホなんでしょうか。。。
825:名前は開発中のものです。
09/03/13 03:43:56 CMJVUsQ6
>>824
画面全体にエフェクトを掛けたりするのに有ると便利だが、ちょっと調べてみたが出来ないっぽいね。
そもそもLoadGraphやMakeGraphはVRAMに転送した時点でPC環境に依った画像フォーマットに変換されちゃうから、
そこからソフトイメージハンドルを生成するとなると、コンバーター(デコーダ相当)が必要になる。
DXライブラリの作者としては手間が掛かるから、要望が無い限り実装を見送っていると予想している。
優しい作者さんなんで、要望送ってみてはどうかな?
現状で対応するとなると、どうしても遅くなるが、
画面サイズと同じ大きさにMakeGraphした裏画面領域をSetDrawScreenして、
一連の画像を転送し、GetPixcelとDrawPixcelするのがベストな選択かねぇ。
SaveDrawScreenを使ってbmp保存して、そこからSoftImageを作るという最終手段もある。(とても遅い)
826:名前は開発中のものです。
09/03/13 03:50:25 CMJVUsQ6
>>823
ああ。書いてておもったが、SaveDrawScreenがあるから、デコーダ処理は既に内部には出来てるのか。
作者に要望だすと、すぐに実装してくれると思うよ。
827:名前は開発中のものです。
09/03/13 04:00:17 HX55tf54
解説 グラフィックデータのあるメモリ領域には『ロック』をしなくては アクセスする事が出来ません。
細かい事は抜きにしてとにかくWindows 環境ではメモリの管理が厳重なので malloc関数 などで確保したメモリ 領域のように簡単にはアクセスは出来ないようになっています。だから 『ロック』という作業を行い直接アクセスできるようにします。
グフィック領域に直接アクセスする利点はDrawPixel や GetPixel 関数を使用するよりも処理が速い、等があります。
ロックの説明をはじめる前に注意なのですが、ロックを行った場合は 直接アクセスが終り次第直ちにロックを解除してください。
ロックを している最中にデバッグモードなどのブレークポイントを使ってプロ グラムを止めるとハングアップするので注意してください。
ロックを すると 『GraphUnLock』関数を使用してロックを解除しない限り DrawLineをはじめすべての描画関数が使用不可能になるので注意してください。
では話を元に戻します。
ロックをするにはまずロックをしたいグラフィックハンドル、または DX_SCREEN_FRONT , DX_SCREEN_BACK 識別子を使って画面をロックする 事も出来ます。
ロックが完了すると関数は PitchBuf に指定したポインタにロック したグラフィック領域の1ライン辺りのバイト数と、DataPointBuf で 指定したポインタにロックしたグラフィックへのアドレスが代入されます。
こうしてロックしたグラフィック領域にはめでたく直接アクセスが 出来るようになります。まず希望の座標(点)にアクセスするには 以下の式を用います
(グラフィック領域の先頭アドレス) +
(X座標値 × (グラフィックのカラービット数 ÷ 8)) +
(Y座標値 × 1ライン辺りのバイト数)
= 希望の座標のポインタ
828:名前は開発中のものです。
09/03/13 04:02:17 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:名前は開発中のものです。
09/03/13 04:05:06 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:名前は開発中のものです。
09/03/13 04:17:46 CMJVUsQ6
>>827
ありがとう。
GraphLock/Unlockなかなか便利だねぇ
ちょっと使ってみます
作者から非公開関数になった理由が知りたいとこだね
831:名前は開発中のものです。
09/03/13 10:15:03 H+Qfngp2
>>825-829
なるほど、そのためのGraphLock/UnLockだったのか。
あと非公開関数になっただけで使う事はできるんですね。
てっきり使用すらできなくなったものだとばかり思ってました。。。
とりあえずはこれで出来そうなので、デコード処理の要望の方は見送ろうかと思います。
お二方とも、ありがとうございました。