1 :
1 ◆rJvM9yDA :
02/02/05 02:26 ID:cLLH4Y7u 言語問わず何でも教えあうスレッド。 例 ・DirectXで文字を表示させる際にアンチエイリアスをかけるには? ・Delphiで画面の最大化の方法は? ・VBでチョメチョメ出来るの? ・CDDAをデジタル再生する方法は? ・PCM音声を複数同時に再生する方法は?(DirectSound未使用) などなど
2 :
1 ◆rJvM9yDA :02/02/05 02:28 ID:cLLH4Y7u
ちなみに自分はDelphiとCをちょろっとしか出来ないので完全にフォロー出来ないです。 昔DirectXやってたけど忘れちゃったし・・
かえってDelphiだと難しそう。 というかPASCAL知らんし。 両方使える人にとって、PASCALとC言語ってどっちが使いやすいの?
1が教えて欲しいだけちゃうんかと。
>>3 慣れればCの方が楽。自由度高いので。
PASCALは言語としては洗練されてるので
教育用には適してるけど。
6 :
名前は開発中のものです。 :02/02/05 10:04 ID:Eig8ehal
winアプリの場合はDelphiの方がとっつきやすいかな。 Pascalが覚えやすいって言うよりボーランドソフトそのものが初心者にむいてる。 上級者にも十分使えるけど。 マイクロソフトの開発ソフトはわかりづらい。
7 :
名前は開発中のものです。 :02/02/05 12:16 ID:XPq7Zyqd
そうだったのか… C++Builder買っときゃ良かった。欝
8 :
名前は開発中のものです。 :02/02/05 12:37 ID:Eig8ehal
>>7 ビルダー6はフリーになるという噂だけど?
Linux版も出るし。
Delphi開発者を引っこ抜いて必死で作ったVisualStudio.netはいつ出るのかね?
ベータ2は相変わらず重いし、、
Tips: 開発がせっぱつまってても風呂は入れ。 周りの奴の指揮が下がるからな!
カイリクスはタダで使えるし、デルファイもそうだし、C++コンパイラもそうだし 信者増えるのではないかと期待 WINAPIがC++で書かれてるからパスカルは使い辛いかな、と思う API使わないんだったら、デルファイでいいかと
>>10 >API使わないんだったら、デルファイでいいかと
DelphiでもAPI使えるけど。
そもそもゲームってAPIに頼ることってあんまりないでしょ?
ShowMessageそのものがAPIだし。
12 :
名前は開発中のものです。 :02/02/05 15:22 ID:OEm3/ZAn
自分は1が言ってたDelphiでDirextX使用せずにフルスクリーンにする方法教えて欲しい。 解像度変更って言うの。 DelphiX使おうとしたけどDelphi6には未対応だし。 インストール方法ある?
13 :
:02/02/05 15:34 ID:???
Delphiは知らんけど、普通にChangeDisplaySettingsじゃダメなんだろうか・・・。
14 :
名前は開発中のものです。 :02/02/05 17:27 ID:3Rp/SBJl
>>13 ChangeDisplaySettingsxはアイコンバラバラにならない?
15 :
:02/02/05 17:39 ID:???
>>14 なるよ(;´Д`)。
でもDirectX使わずにフル画面にする方法って他に知らないしぃ。
昔書いた物。捨てていくので、ツッコミ不可。 アイコンはバラバラにならない…ハズ { ディスプレイのセッティングを変更するクラス } unit Dspsting; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TDisplaySettings = class(TObject) private dvmdOrig, dvmdRequest: TDEVMODE; modifyFlag: Boolean; public constructor Create; destructor Destroy; override; procedure ReturnSettings; { 設定を元に戻す } procedure ChangeSettings(w, h: DWORD); end; implementation constructor TDisplaySettings.Create; var h: HDC; begin inherited Create; ZeroMemory(@dvmdOrig, sizeof(dvmdOrig)); dvmdOrig.dmSize:= sizeof(TDEVMODE); dvmdOrig.dmDriverExtra:= 0; dvmdOrig.dmFields:= DM_PELSWIDTH or DM_PELSHEIGHT; h:= GetDC(0); try dvmdOrig.dmPelsWidth:= GetDeviceCaps(h, HORZRES); dvmdOrig.dmPelsHeight:= GetDeviceCaps(h, VERTRES); dvmdOrig.dmBitsPerPel:= GetDeviceCaps(h, BITSPIXEL); dvmdOrig.dmDisplayFrequency:= GetDeviceCaps(h, VREFRESH); finally ReleaseDC(0, h); end; dvmdRequest:= dvmdOrig; modifyFlag:= FALSE; end;
17 :
名前は開発中のものです。 :02/02/05 17:42 ID:l1G62Jtu
destructor TDisplaySettings.Destroy; begin ReturnSettings; inherited Destroy; end; procedure TDisplaySettings.ReturnSettings; begin if modifyFlag = FALSE then Exit; if ChangeDisplaySettings(dvmdOrig, CDS_FULLSCREEN) <> DISP_CHANGE_SUCCESSFUL then begin MessageDlg('ディスプレイの設定変更に失敗しました', mtInformation, [mbOk], 0); end; modifyFlag:= FALSE; end; procedure TDisplaySettings.ChangeSettings(w, h: DWORD); begin dvmdRequest:= dvmdOrig; dvmdRequest.dmPelsWidth:= w; dvmdRequest.dmPelsHeight:= h; if ChangeDisplaySettings(dvmdRequest, CDS_FULLSCREEN) <> DISP_CHANGE_SUCCESSFUL then begin MessageDlg('ディスプレイの設定変更に失敗しました', mtInformation, [mbOk], 0); end; modifyFlag:= TRUE; end; end.
そういえばアイコンの位置を全部覚えといて後で復元するってツワモノがいたな
19 :
解像度変更 :02/02/05 18:44 ID:3Rp/SBJl
どこのサイトか忘れたけどだいぶ前に自分がメモ帳に残しておいたやつ。 海外のサイトだったと思う。 function SetFullscreenMode:Boolean; var DeviceMode : TDevMode; begin with DeviceMode do begin dmSize:=SizeOf(DeviceMode); dmBitsPerPel:=16; dmPelsWidth:=640; dmPelsHeight:=480; dmFields:=DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT; result:=False; if ChangeDisplaySettings(DeviceMode, CDS_TEST or CDS_FULLSCREEN) <> DISP_CHANGE_SUCCESSFUL then Exit; Result:=ChangeDisplaySettings(DeviceMode,CDS_FULLSCREEN) = DISP_CHANGE_SUCCESSFUL; end; end; procedure RestoreDefaultMode; var T : TDevMode absolute 0; begin ChangeDisplaySettings(T,CDS_FULLSCREEN); end; procedure TForm1.Button1Click(Sender: TObject); begin if setFullScreenMode then begin sleep(300); RestoreDefaultMode; end; end;
>12 マルチポストすんなヴォケ− ム板で3分後に同じ質問してたのもお前だな。
21 :
名前は開発中のものです。 :02/02/05 20:10 ID:BW15aMwX
>>12 >DelphiX使おうとしたけどDelphi6には未対応だし。
>インストール方法ある?
ある。
本家の掲示板みろ。
俺は動かしたぞ
WAVって複数鳴らすのってやっぱりDirectSoundしか無いのかな? DirectX使って無くても複数再生してるゲームとかあるけど。 音楽はMIDI 音声はCDDA 効果音はWAVってやるしか無いのか? MIDIとCDDA使いたくないし、、、
>>20 それをたまたま発見しただけで大騒ぎしてる厨房
ヽヽ / \ / ― -- 23=12デシタ -- − - − −‐− ――― ― ‐ − −− / \ − - - − ― - ― / | \ ― −− − − ― ― ..,,,,,,.............................................,,.., ― - ― (⌒;:) ‐ /'" "'ヽ. − ― ― /" | / "ヽ,('';:⌒⌒ヽ丶,.. i ○ | ̄ ̄ ̄/ ○ へ ;;:: 〕 (⌒::; ‐ ‐ - | i ..::/ 。 ;:::/ :: :: : ::⌒ ̄""⌒ヾ !. | :::::/| _ _。 ::::::::: /::: ; ": ̄ ::: :::::::::::) - ― ヽ lヽ__ノ丿 ,,..:;::::::::::/:'(: : : ;;:;: ⌒:;;⌒) \ し_/ .......::::::;;:;::::::/;:/:::: : :ノ;;:: :; : ....::::: ..... ::::ノ -  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄' ̄"" ̄" "  ̄ ̄ ̄"'""  ̄ ̄ ̄" '''' ̄'' ̄
>23 マジレスで回答した後にこういうのを見つけると、 少なくともいい気はしないでしょ?まぁ、ただの煽りチャンなんだろうけど。
age
>>19 のソースを使ってフルスクリーンを実現したのですが
フルスクリーンからウィンドウへの元に戻す方法がわかりません。
28 :
名前は開発中のものです。 :02/02/06 00:19 ID:WtK0cdVp
>>27 16のコードで行けるんじゃないの?
>>22 最近のサウンドカードは複数PCMストリーム再生サポートしてるから大抵大丈夫だとおもう。
どうやって同時再生するかはわからない。
自分はCDDAをデジタル再生する方法が知りたい
29 :
名前は開発中のものです。 :02/02/06 00:27 ID:sdOsCIHs
くちぱくをさせたいのだけど、どのくらいの感覚でぱくぱくさせれば 違和感かんじないの?
>>22 昔Wavemix.dllって無かったか?
確かDirectX出る前からWaveを複数鳴らすことは出来たと思う
急に口パクって言われても たぶんアドベンチャーゲームだろうとは思うけど。 根性有るなら 第一水準文字全部をindex持たせてそれに併せて「あいうえお」の口の動きを割り振ってみては? まあそこまでやらなくても普通にパクパクさせるだけでええでしょ
32 :
名前は開発中のものです。 :02/02/06 00:41 ID:sdOsCIHs
>第一水準文字全部をindex持たせてそれに併せて「あいうえお」の口の動きを割 >り振ってみては? それが一般的な方法なんですか 音声にあわせて 口を動かすのが普通だとおもっていました (母音を取得するのは難しくても、音量をみるとか・・・)
36 :
27 :02/02/06 01:59 ID:???
>>28 できれば
>>19 のコードでやりたいんです。
>>19 のコードで元にフルスクリーンは出来るんですが元に戻す方法がわかりません。
戻す場合はやっぱりフルスクリーン前の解像度、色数を覚えさせて置かなくちゃダメですか?
>>19 のコードはプログラムを終了すると勝手に解像度などが元に戻ってくれるんですが。
自分がやりたいのは任意に元に戻す方法ですけどね。
ここってDelphiだけじゃ無いよね?
PCMの複数再生って、単に足すだけでしょう。 クリップ(量子化ビット数をオーバーフローした)時の処理はよくわからないけど MMXが使えるなら、飽和加算で十分じゃないかな。 話題がずれていたらスマソ。
>38 ネタ?
>>38 黒い板を複数用意して幅を変えるんでも良いし
マスクをかけてテキトーに変化させるもよし。
まぁ、好きに作れってこった。
>>39 飽和加算だとだんだんと音がでかくなってくような…。アルファブレンドと同じでいいんでは?
なんか盛り上がんないね。
>>42 >アルファブレンドと同じでいいんでは?
いや、そんな簡単な物でもない気がするぞ。
ある音Aが -6dbの大きさでなっていたとする。
そこへ、別の音Bが -6dbで重なって鳴るとしたら?
飽和加算方式:A,Bの音量 それぞれ -6db
αブレンド方式:A,Bの音量 それぞれ -6dbの半分の音量 → -12dbずつ(合計すると -6db相当)
聴感上は、A,Bともに -6dbで聞こえる→飽和加算っぽい聞こえ方 のはずだ。
そもそも、別の音が重なるだけで、元の音量が小さくなるのは変じゃないか?
これ意外と面白いテーマかもしれないな。
ゲームサウンド
http://game.2ch.net/test/read.cgi/gamedev/1006770289/ こっちのスレにネタ振ってみるのも良いかもしれん。割と技術者なヤツ多いみたいだから。
>>22 自力でMixすればよし。
MODのプレイヤーを参考にするといいよ。
>>42 ?
なぜαブレンド?
>>44 どうなんだろうね。
何も考えずにDirectSoundで多重再生させてる場合はうまく鳴ってるけど、自前
でMIXさせる場合も全く減衰とか考えないでいいのかな?
飽和加算だと、同じ音を2つ同時に再生する場合に単純に倍の音量で…鳴らな
い? それはそれでいいのか…。
47 :
名前は開発中のものです。 :02/02/06 15:34 ID:E/JERrYQ
おさわりシステムみたいなの作りたい
48 :
44 :02/02/06 16:04 ID:???
>>46 俺も普段は DirectSoundのミキサーまかせなので、意識したことは無かったよ。
ちょっと面白いなと思って自分なりに考えてみた仮説。
自前ミキサーの精度を高くする → ミキサーのビット数を大きく持つ
このくらいしか思い浮かばなかった。
元の波形=16bit/出力のバッファ=16bitだからといって、内部ミキサーも16bit精度で
計算する必要は無いよな?。だから、いったん内部24bit程度のミキサーにレンダリング
してミキシングする。24bitバッファの上位16ビットを最終出力とする。
内部24bitだったら、16bit波形が 256個同時に発音されたとしてもクリップはしないよな。
ただし、元の16bit精度の音が、実質8bit程度の音になってしまうという諸刃の剣。
減衰する音なんかは、おそらくジリジリ言うのではないか?と。
オーディオ方面はちょっと疎いから、この程度が限界だわ。スマン。
あと、同じ音が完全に同タイミングで発音されたら、振幅2倍だから音量はでかくなる。
それはそれで正解だと思う・・・・・んだが、自信無し。
49 :
44 :02/02/06 16:07 ID:???
書き忘れ。 24bitバッファの上位16bitを有効とするんじゃなく、 対数カーブで16bitに畳み込むというのもアリかもしれん。 音が重なっても、大きく聞こえにくくなる・・・・ってな感じで。
50 :
46 :02/02/06 16:47 ID:???
>>48-49 そーするとさ、例えばSTGなんかでボスが弾を20個一斉に撃っちゃうと発射音量
が20倍、畳み込んだとしても数倍になっちゃわない? 飽和するまではいかない
としても。
最大音量がない現実で弾を同時に20発撃ったら聞こえる音量も20倍になるって
のはわかるんだけど、最大0dbって決まっている場合だとマズくない?
やっぱαブレンドじゃダメかなぁ(´Д`)。
51 :
46 :02/02/06 16:50 ID:???
書き込むを押した瞬間に「同じ音は同時に鳴らさないってことにすればいいじゃん」 ってことに気づいた俺は逝ってきます。
>>51 でもそれは根本の解決にはなってない。
波形合成のセオリーみたいなのキボンヌ。
波形合成は基本的に加算でしょ。
54 :
46 :02/02/06 17:14 ID:???
ソフト的にリミッターでもかませばいいんでないかい。 合成結果が一定以上になったら波形を潰す。
>>55 使えないプログラマは無視ということで。
↓次の意見どうぞ
飽和加算ではみ出た分をちょん切っちゃうのはディストーションだっけ。 全然違う音になっちゃうよ。
>>56-57 飽和演算するなぁ〜。ぶった切るのではなくて潰すの。
とりあえずリミッター&コンプレッサーの機能調べてみんさい。
餅は餅屋、オーディオについてはオーディオ畑を当たれ。
「ぶった切るのではなくて潰す」の意味がよくわかんないけど、上で言ってるように 対数カーブ使って飽和させればそれっぽくなんないか?
62 :
44 :02/02/06 18:53 ID:???
>>55 =
>>59 言いたいことは分かるよ。トータルリミッタかけろ!てことだろ?
でも、それだと飽和した「瞬間」に個々の絶対音量がガクッと下がるよな?
全体的にトレモロかかったたみいになって耳が疲れると思う。
それを緩やかに綺麗にやっているのが、L1とか T-Racksみたいなソフトだろ?
>>58 チョン切るのはディストーションで正解。
>>61 面白いページ紹介さんきゅ。
リニアでのリミット処理(しかも1段階)だと、音が「ポコポコ」してしまうんじゃないかな?
スレッショルドレベルをいくつか持たせて、なめらかに(気付かれないように)リミッティング
するのが理想だと思う。
その後いろいろ考えたんだが、24bitでのバッファリングは要らないな。
ゲームでの使用ならば、せいぜい20bit程度で充分だろう。
ビット数だけで見たら わずか16個の波形で飽和する計算だが、もともと波形は±0を基準として
プラス方向/マイナス方向に絶えず変化しているわけだし、常に最大音量で鳴っているわけ
でもないんだし、20bitだったとしてもクリップする瞬間というのは限りなく少ないと思われる。
(あくまでも机上論ではあるけど)。
あと、人間の耳は大きな音は小さく感じるような構造になっているから、もしかしたら
対数カーブでの畳み込みはいらないのかな?とも思ってみたり。
S/N比を稼ぎつつ、うまく合成するのって実は面白いかもな。
ていうか、オーディオは専門外なんだよー。詳しい人の降臨キボンヌ。
爆発音とかでかい効果音は、少々欠けても分からないし 重なっても濁るだけだから発音数制限しちゃってよさげ。 プライオリティ管理とか排他設定とかして、 リリース部分もちょん切りまくって。 (人間の脳ミソはほとんどアタック部だけで音を識別してるらしいから) 大抵のゲームはPCM数音ぶんあれば十分だと思ー。 んで念のためトータルリミッタかけて。この程度でいいんじゃないかな。
/⌒゛~ ̄ ̄ ̄\ / ____|\__\ |_| ⌒ ⌒ | ̄ |∴ (・) (・) | (6 つ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ___ | < 僕は間違ってなんかいないよ \ \_/ / \_____________ \___/ _〃`ヽ 〈_ γ´⌒´-−ヾvーヽ⌒ヽ /⌒ ィ `i´ ); `ヽ / ノ^ 、_____¥____人 | ! ,,,ノ爻\_ _人 ノr;^ > ) ( <_ \ヘ、,, __,+、__rノ/ / ヽ_ \ )ゝ、__,+、_ア〃 / ヽ、___ ヽ.=┬─┬〈 ソ、 〈J .〉、| 喧.|, |ヽ-´ /"" | 嘩 .|: | レ :| 屋 | リ / ノ|__| | | ,, ソ ヽ ) .,ゝ ) イ ヽ ノ y `レl 〈´ リ / ノ | | l / l;; | 〉 〈 〉 | / ::| (_ヽ \、 (。mnノヽソ ̄ ̄`ヽnm
66 :
名前は開発中のものです。 :03/06/23 12:45 ID:U4PDbY2F
保守
性欲処理の仕方を教えてください
68 :
名前は開発中のものです。 :03/06/24 00:35 ID:WoG6/bAT
69 :
_ :03/06/24 03:35 ID:deNElQKK
戦術シミュレーションに戦略シミュレーション、経営シミュレーションに果ては恋愛シミュレーションまでシミュレーションゲーム入るしなあ。 ゲム屋の棚ジャンルで「シミュレーション」ってーとジャンル判別不能なゲームの巣窟になってる悪寒。 個人的には戦術シミュレーションと戦略シミュレーションとストラテジーゲームの違いを誰かに説明してもらいたいトコロ。
でっていう
72 :
名前は開発中のものです。 :2006/03/21(火) 23:59:54 ID:GeiIfGcA
73 :
名前は開発中のものです。 :2006/03/25(土) 01:53:09 ID:GIL13nPj
74 :
名前は開発中のものです。 :2006/03/27(月) 00:50:10 ID:B8JlTO4B
言語問わず繰り返しのループカウンタを イクリメントでなくデクリメントを使ったほうが パソコンには自然で、速いって本当ですか? 画像処理の本で読みました。
75 :
名前は開発中のものです。 :2006/03/27(月) 00:58:58 ID:B8JlTO4B
インクリメント・・・
76 :
名前は開発中のものです。 :2006/03/27(月) 03:07:44 ID:2Wu42uv/
77 :
名前は開発中のものです。 :2006/03/27(月) 07:05:50 ID:tzJbai3b
>>74 なんか数値比較の中でも0との比較は特別高速に処理されるとか
いう記事が携帯アプリの本に載ってたのを読んだことある。
組み込み系ソフトで使う小技らしい。PC用アプリでは気にする必要もないと思うけど。
戦術シミュレーション=将棋 戦略シミュレーション=碁 ストラテジーゲーム =マーヂゃン
>>74 配列を逆から処理するとキャッシュが利きにくくなるんで
アホなやつが鵜呑みにして遅いプログラムを書いてしまう。
素直に書いとけ。
>>74 一応減算が減るのでアセンブラとかでは割と気にしてた
その本も間違ってはいないけど、どうでもいい話
>>74 カウンタレジスタをデクリメントしてくとゼロフラグを利用できるって話だ。
コンパイラが馬鹿だったりCPUによっても意味なしのことがある。
それと変数が多い関数でコードが複雑過ぎてもダメ。
逆にコンパイラが賢ければ勝手にやるから拘る必要はない。
プログラマがヘボだったら他の部分でボトルネック作ってるハズだから気にすんな。
シューティングゲームにリプレイ機能をつけようと思っているのですが アイテムや敵の動きなどに乱数を使っているためうまく行きません。 そこで自分で乱数を作ろうと思うのですがムラがでたりしてなかなかうまく行きません 使う変数はキー操作のリプレイのなかに自動的に埋め込まれてほしいので ゲーム開始からの時間、各キーを押していた合計時間、スコア、自機座標、現在の敵弾数 などでなんとかしようと思っています。 誰か作ったことのある人いませんかァ いたら使った計算方法を教えてください
>82 srand(3)
>>82 精度を気にしないのであれば、線形合同法あたりを。
精度気にするなら、MTあたりを
でも、面倒なので、ライブラリの乱数を使うが。
リプレイするときもk、シード保存しといて、設定するだけだし。
俺の低能な頭脳では理解不能なので 乱数全部保存することにしました
最初にsrand()でシードを設定すれば、 以降のrand()の値は同じパターンだと思うのだが… ライブラリによって変化する可能性が無いとは言い切れないので、 自前の乱数関数にするに越した事は無い。 俺は(A*前回の値+C)%Mでやってて無問題。 (地形を生成しているが、今のところ同じ地形になってるw) AとCによっては上手く行かない事があるので多少要試行錯誤。 少なくともAは奇数にしないとまずい。Mは2の16乗にしてる。
ゲームで使うメニューってどう作ってる? ぱっと考えても ・縦、横方向の他にも、色々な方向にカーソルを動かさなければならない場合がある ・項目によっては左右キーで設定を変えたりする ・項目によって、決定した際に別ウィンドウを開いて そちらに一旦フォーカスを移す必要がある ・その別ウィンドウで項目を選ぶorキャンセルしたら、一つ前のウィンドウに戻る必要がある ・項目ごとにカーソル合わせたら出てくる簡易ヘルプ とかがあって、どう作れば良いのかサッパリ。 誰か助けて下さいorz
そりゃあんたメニューを階層で管理するのですよ メニュー1 └メニュー2 └メニュー3 とあったら、 メニュー1の親メニューはnull、子メニューはメニュー2 メニュー2の親メニューはメニュー1、子メニューはメニュー3 メニュー3の親メニューはメニュー2、子メニューはnull みたくポインタを持つと「一つ前のウィンドウに」ってのがわかりやすくなる タスクっぽいね
90 :
名前は開発中のものです。 :2007/08/05(日) 18:10:53 ID:quBxFBZu
>>88 標準のメニューストリップとかのコンポーネントを使えば
普通に入力していくだけで管理できます
後々、手すきの時にゲームとマッチするインターフェイスに差し替えるのが
吉ではないでしょうか
あ
t
hoshu