◆ to fluit さん >ウィンドウモードで起動するようにしたらうまくできたようです。 >320*240*8モードのフルスクリーン対応していないパソコンも >あるのでしょうか・・・それとも何かうまくできる方法があるのでしょうか? 320x240 8bit をサポートしていない環境はあります。 確実に使えるディスプレイモードは640x480 8bitしかないと思ったほうが 良いと思います。これはちょっと言い過ぎかもしれませんが・・・ 以下の手順でTDXDrawコンポーネントのプロパティを設定すれば一応320x240に 対応していない環境でもフルスクリーンに出来ると思います。 1. AutoSizeプロパティをFalseに設定する。 2. SurfaceWidth プロパティに 320 を設定する。 3. SurfaceWidth プロパティに 240 を設定する。 4. Options プロパティの doStretch を True に設定する。 5. Options プロパティの doFlip を False に設定する。 ◆ to AQRS さん >IDirect3DDevice7のDrawIndexedPrimitiveVBなんですが >そこのパラメータのうちlpwIndicesがConstで定義されていますが、 >これはポインタを扱うものみたいなのでVarなんではないでしょうか? これは前にRIKIMARUさんがここで報告してくださったバグですね(^^; function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7; dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices: Word; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall; は正しくは function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7; dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall; でした。 >それと、ついでに確認ですがTDirectDrawSurfaceのDrawAlphaなどのメソッドは >ソフトウェアで合成しているんですよね? ソフトウェアで合成しています。 >それでも拡大した半透明合成などを行うと簡単にフレームレートが落ちるんで >これらの処理をDirectXのAPIでハードウェアで実行するようにはできないんですか? DirectDrawを使った描写では(定義されている定数を見ると)特殊描写は 半透明しかサポートされていないし、DirectX7 ではその機能はサポート していないようなので使えないと思ったほうがいいようです。 私はやっぱりD3D IMを使ったほうが良いと思います。 ◆ to 陸さん >ところで「 Delphi X 」のImageListのItem として使用している画像は、 >プログラムの設計時しか変更できないのでしょうか? DXDraw で使用して >いる最中に突然ファイルから読み込んでそれまでの画像とは違う画像を >使いたいのですが...... もちろん可能です。 ImageListのItemはTPictureCollectionItemオブジェクトなので TPictureCollectionItemのプロパテイを変更することで出来ます。 Itemを取得するにはTDXImageListコンポーネントのItemsプロパティを 使います。Itemの画像を変更するには ItemのPicture プロパティを使います。 以下のサンプルはImageListの一番目のItemの画像を変更します。 var Item: TPictureCollectionItem; begin Item := ImageList.Items[0]; // 画像を "c:\test.bmp" のファイルへ差し替える Item.Picture.LoadFromFile('c:\test.bmp'); // サーフェースを再構築することを忘れないでください。 // 忘れると画像の変更が反映されません。 Item.Restore; end;
先日質問を書き込みさせていただいたものですが、 ウィンドウモードで起動するようにしたらうまくできたようです。 320*240*8モードのフルスクリーン対応していないパソコンも あるのでしょうか・・・それとも何かうまくできる方法があるのでしょうか?
はじめまして DelphiXのDirectX7ベータ版を使ってみましたが、 バグかもしれないことを見つけたので報告します IDirect3DDevice7のDrawIndexedPrimitiveVBなんですが そこのパラメータのうちlpwIndicesがConstで定義されていますが、 これはポインタを扱うものみたいなのでVarなんではないでしょうか? IMを使うためにいろいろ実験していてどうもこれだけがうまく動かず、 varにするとうまくいくようになりました まだ、Direct3Dはいじり始めてそんなに時間がたってないので 勘違いしていたらすみません それと、ついでに確認ですがTDirectDrawSurfaceのDrawAlphaなどのメソッドは ソフトウェアで合成しているんですよね? この間作ったアプリが私のG200で高速に動き 友人のTNT2で異様に遅かったので最初原因がよくわからなかったんですが サーフェイスをSystemMemoryにとるようにしたら普通に動きました 多分私のG200ではVideoMemoryが足りなかったから 最初からSystemMemoryを使っていたんでしょうね それでも拡大した半透明合成などを行うと簡単にフレームレートが落ちるんで これらの処理をDirectXのAPIでハードウェアで実行するようにはできないんですか? 一応IMで少し試してみたんですが、減算合成だけがどうしてもうまくいかず そのまま使うしかないのかなという状況です 何か使用法で勘違いしているかもしれませんが 半透明や、加算減算を高速に実行する方法はないんでしょうか? ちなみにDelphiXはDirectX3のころから愛用しています すばらしいライブラリをありがとうございました
「 Delphi X 」、たいへんすばらしいとおもいます。 おかげで素人なのに プロフェッショナルな作品が作れそうです。 ところで「 Delphi X 」のImageListのItem として使用している画像は、 プログラムの設計時しか変更できないのでしょうか? DXDraw で使用して いる最中に突然ファイルから読み込んでそれまでの画像とは違う画像を 使いたいのですが...... もしよろしければご回答お願いします。
スプライトの件解決しました。初心者に付き合っていただきありがとうございました。 ぜんぜん気が付きませんでした。やっぱりそのまんまコピーはだめですね。 >MakeSprite2 メソッドで既にある >画像は追加しないようにするなどがあります とのことでしたが、ユーザが検索した画像の一覧を並べ、選択された映像を流す。 というソフトなので、同じ画像が何度使われるか分からないので。 TDXImageListのリストの中身もクリアしちゃうことにしました。 静的用と動的用でTDXImageListを2つ用意し動的用の方は SpriteEngine.Engine.Clear; のタイミングで DXImageList.Items.Clear; としてみました。 場面の切り替えでリソースが戻ってくるようになりました。 ありがとうございました。
はじめまして。 ヘルプファイルを作成したのですが Delphiとの関連付けの 方法がわかりません。 どなたか教えていただけないでしょうか。
ソースコードを見るとMakeSprite2メソッドが呼び出される度に TDXImageListコンポーネントに画像が追加されているようですね。 スプライトを削除するときにこの画像を削除していないとスプライトが 作成される度に画像が追加され続けてリソースを食いつぶしてしまいます。 解決策としては以下のコードのように MakeSprite2 メソッドで既にある 画像は追加しないようにするなどがあります。 それから蛇足かも知れませんがファイル名を指定するときはフルパスで 指定した方がいいです。カレントディレクトリが変わったときに 読めなくなります。 // 動作チェックしていません procedure TMainForm.MakeSprite2(ImgPath: String); var Src: TDIB; Item: TPictureCollectionItem; ImgIndex: Integer; begin Src:= TDIB.Create; try ImgIndex := ImgList.Items.IndexOf(ImgPath); if ImgIndex=-1 then begin { 画像をロード } Src.LoadFromFile(ImgPath); // 常にフルパスで読み出すバージョン // Src.LoadFromFile(ExtractFilePath(ParamStr(0)+ImgPath)); Item := TPictureCollectionItem.Create(ImgList.Items); Item.Name := ImgPath; Item.Picture.Graphic:= Src; Item.Transparent:=false; Item.Restore; end else begin { 画像は既にある } Item := ImgList.Items[ImgIndex]; end; finally Src.free; end; with TImageSprite.Create(SpriteEngine.Engine) do begin Image:= Item; X:= 100; Y:= 100; Z:= 7; Visible:= True; Width:= 320; Height:= 240; end; end;
私の作ったゲームで、うまく起動できない人がいるようです。 320*240の画面モードでフルスクリーン起動のゲームですが、 何か注意すべき点はあるのでしょうか? それとも相手のパソコンがDirectX6以降に対応していないという可能性が高いのでしょうか。 正常に起動できている人も多いのですので・・・http://nx.sakura.ne.jp/~fluit/
削除は問題なしということなのですが、以下のソースでもリソースがじわじわと減っていき ます。ソフトを終了するとどかっと帰ってきます。 スプライトの作成は過去ログを参考にして。 procedure TMForm.MakeSprite2(ImgPath: String); var Src: TDIB; Item: TPictureCollectionItem; begin Src:= TDIB.Create; try Src.LoadFromFile(ImgPath); Item := TPictureCollectionItem.Create(ImgList.Items); Item.Picture.Graphic:= Src; Item.Transparent:=false; Item.Restore; finally Src.free; end; with TImageSprite.Create(SpriteEngine.Engine) do begin Image:= Item; X:= 100; Y:= 100; Z:= 7; Visible:= True; Width:= 320; Height:= 240; end; end; という手続きを作って ボタンを2つ置いて procedure TMForm.Button1Click(Sender: TObject); begin SpriteEngine.Engine.Clear; MakeSprite2('title_2.bmp'); end; と procedure TMForm.Button2Click(Sender: TObject); begin SpriteEngine.Engine.Clear; MakeSprite2('title_3.bmp'); end; を交互にクリックして呼び出しています。 (ひょっとしてボタンとか乗っけたらまずいのでしょうか?) タイマーイベントは procedure TMForm.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin if not DXDraw1.CanDraw then exit; DXDraw1.Surface.Fill(0); SpriteEngine.Draw; DXDraw1.Flip; end; として見ました。 環境は、Win98、Delphi4Up3、DirectX7 DelphiX はInsideDelphiXに付いていたバージョンです。 一晩考えたんですが、ぜんぜん判りませんでした。 よろしくお願いします。
スプライトの全削除はそれで問題ないと思います。 としさんの作成されたスプライトクラスにはリソースを解放し忘れているなど 問題はないでしょうか? 問題がないのであればスプライト以外のところに原因があると思います。
はじめまして、 スプライトのあつかいで困っています。 50個くらいのスプライトを作って 全部削除 DXSpriteEngine.Engine.Clear; また50個くらいのスプライトを作って また全部削除 DXSpriteEngine.Engine.Clear; 要するに場面を切り替えてるんですけど。 これを繰り返すと、リソースがなくなって固まってしまいます。 スプライトの正しい消し方が分かりません、それとも、もともとスプライトの使い方が 間違っているのでしょうか?
よく考えると Direct3DInitializing 手続きの中でDirectX7モードを 使う必要がなかったので Direct3D7.EnumDevices(@EnumDeviceCallBack, rec) と (DDraw.IDraw7 as IDirect3D7).EnumDevices(@EnumDeviceCallBack, @rec) は削除することにしました。 しかし良く今まで無事に動いていたなと思います(^^; どうもありがとうございました。
おはようございます いつもお世話になります。 ベータ版なのでまだ修正されてないだけかもしれませんが一応報告しておきます。 Direct3DInitializing手続きの中で if Direct3D7<>nil then Direct3D7.EnumDevices(@EnumDeviceCallBack, rec) else Direct3D.EnumDevices(@EnumDeviceCallBack, rec); と if DDraw.IDDraw7<>nil then (DDraw.IDraw7 as IDirect3D7).EnumDevices(@EnumDeviceCallBack, @rec) else (DDraw.IDraw as IDirect3D).EnumDevices(@EnumDeviceCallBack, @rec); と同じEnumDeviceCallBackはまずいと思われます。 すでに InitializeDirect3D Direct3DInitializingと Direct3DInitializing7など作られるてるか他に上手な仕組みを作られてる ような気はしますが 一応報告しておきます。http://www.ifnet.or.jp/~rikimaru/
堀さんありがとうございました。 これでなんとかゲームが完成?できそうです。 まぁ、もうほとんど出来かけてるからにゃあ。 出来上がったらお教えします故。 んだらまたいつか。
以前アップしていたDirectX7版DelphiXを再アップしました。 http://www.yks.ne.jp/~hori/data/DelphiXforDX7-beta1.zip http://www.yks.ne.jp/~hori/data/DelphiXforDX7-beta1-English.zip
半透明処理なら最後にAlphaと付くメソッドで行うことが出来ます。 他にAdd(加算合成)系やSub(減算合成)系の描写関数もあります。 例:DrawAlpha, DrawRotateAlpha, DrawWaveXAlpha 例:DrawAdd, DrawRotateAdd, DrawWaveXAdd 例:DrawSub, DrawRotateSub, DrawWaveXSub Graphic\AlphaBlendingサンプルでも半透明が使われていますので それも参考になると思います。
すんません。書き方間違えました。 スプライトの透過処理って言うか半透明処理のことでした。 んで、できるのですか?スプライトの半透明処理
◆ to たけさん >移転されたのですね。 >余計なことですが、その意図は? トップにも書いてあるとおり、前使っていたサーバーは 夜間アクセスしにくくなるため移転しました。また容量が 足りなくなったせいでもあります(^^; >DirectX7対応のDelphiX再度アップお願いします。 あっそうでした(^^; アップしますね。 ◆ to 雑音 >移転したんですね^^ >これからもがむばってください。 どうもありがとうございます(^^ ◆ to 激侍さん >あのDelphiXでのスプライト表示って透過処理できないのですか? >透過処理はDrawRotateADD だけですか?みんな 透過処理が透明色抜き転送と言う意味であれば、Drawメソッドなどで 出来ます。 スプライト(TImageSprite)の場合は、TDXImageListコンポーネントの 中の該当する画像アイテムの Transparent プロパティを True にすることで 透過処理できるようになります。また TransparentColor プロパティで 透明色を設定することもできます。
移転されたのですね。 余計なことですが、その意図は? DirectX7対応のDelphiX再度アップお願いします。
移転したんですね^^ これからもがむばってください。
聞きたいのですが? あのDelphiXでのスプライト表示って透過処理できないのですか? 透過処理はDrawRotateADD だけですか?みんな
>DXInputでキーボードの入力を取得していますが複数キーを >同時に押していた場合にキーバッファに入力したキー情報が >残ったままになることがあります。 キーボードの複数のキー押しは、マシンの機種(PC/AT or PC98)によっては 数個までのキーしか認識できなかったと思いますので、それに関連する問題 ではないでしょうか。 > またDXDrawでディスプレイのリフレッシュ・レートを >設定する方法はあるでしょうか? リフレッシュレートの設定はDirectXの機能としては用意されていますが、 その機能が使える環境は滅多にない(皆無?)なので設定する方法は無いと 思っていいと思います。
はじめまして堀さん、そして皆さん。 DXInputとDXDrawについてお聞きしたいことがあります。 DXInputでキーボードの入力を取得していますが複数キーを 同時に押していた場合にキーバッファに入力したキー情報が 残ったままになることがあります。 ジョイパッドだともちろん問題ないのですが、どうにか バッファの内容をクリアする方法はないでしょうか? while PeekMessage(msg,0,WM_KEYDOWN,WM_KEYUP,PM_REMOVE) do ; とやってもダメのようです。 またDXDrawでディスプレイのリフレッシュ・レートを 設定する方法はあるでしょうか? 動作環境は以下の通りです。 *Win2K *Delphi4 Pro Update3 *Creative GeForce Win2Kで起こるDXInput.pasの問題は修正してあります。
ども、雑音です。 プロバイダの設定について、堀さんが示して下さった方法は、 利用可能なプロバイダの一覧を作成して、その中からTCP/IPと 一致するものをプロバイダに代入してるのかな? ありがたく利用させていただきます^^ 自分のIPについては、いろんなページを検索かけて方法を発見 しました。やはり、堀さんの言ってるような方法でした。 チャットは完成しましたので、今度はゲーム部分を作成します。 これが一番問題なんですけどね(^ー^;
DirectX7版のDelphiXはHPの容量が足りなくなった為削除しました。 >- D3DDevice*.CreateLight ni ha "TD3DLight" ga arimasu ga, TD3DLight2 de ha nai no desu ka...? >(TD3DLight2 ha motto ii desu ne ;)) D3DDevice* にはCreateLightメソッドがありませんのでご確認をお願いします。 "TD3DLight"で検索してみたのですがそれらしきものはありませんでした。 >- Anata no DelphiX7 Version (7.0a) no Direct3D Software mode ha DelphiX6.1 (6.1) Version yori >motto osoku desu. Onaji Source Code desukedo...! 普通、リファレンスラスタライザーは通常OFFにして置くものだとは思いますが 次期バージョンでは使用しないように変更します。 >- Voodoo2 wo tsukau to. Tatoeba, Original Resolution = 1024x768. FullScreen = 640x480. Watashi no >G400 wo tsukau to, DX.Width ha 640 ni narimasu, DX.Height ha 480 ni narimasu. Voodoo2 wo tsukau TDXInputコンポーネントのMouseプロパティを使ってマウスの座標を 自分で管理する方法はどうでしょうか? procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin DXInput1.Update; FMousePos.X := FMousePos.X + DXInput1.Mouse.X; FMousePos.Y := FMousePos.Y + DXInput1.Mouse.Y; end; #改行を入れていただけるとうれしいです(^^;
Hori-san, - D3DDevice*.CreateLight ni ha "TD3DLight" ga arimasu ga, TD3DLight2 de ha nai no desu ka...? (TD3DLight2 ha motto ii desu ne ;)) - Anata no DelphiX7 Version (7.0a) no Direct3D Software mode ha DelphiX6.1 (6.1) Version yori motto osoku desu. Onaji Source Code desukedo...! - Software Mode wo tsukattara, DelphiX ha Reference Rasterizer wo tsukatte imasu. (RGB Device wo tsukatte kudasai !)... Fix : "EnumDeviceCallback" no Source Code ni ha, kore wo : if CompareGUID(@lpGUID,@IID_IDirect3DRefDevice) then Exit; - Voodoo2 wo tsukau to. Tatoeba, Original Resolution = 1024x768. FullScreen = 640x480. Watashi no G400 wo tsukau to, DX.Width ha 640 ni narimasu, DX.Height ha 480 ni narimasu. Voodoo2 wo tsukau to, DX.Width ha 1024 ni narimasu, DX.Height ha 768 ni narimasu ! Shikashi, Voodoo2 wo tsukatte mo, DX.SurfaceWidth to DX.SurfaceHeight ha kekkou desu (640x480). Ima, SurfaceWidth to SurfaceHeight wo tsukatte imasu ga, Mouse Cursor ha 1024x768 Resolution wo tsukatte iru kara, hidari ni ugoite to mou gamen ni ha arawaremasen. Mou ichido, heta na nihongo ha gomen nasai.
◆ 雑音さん >TCPIPSetting.Enabledはもちろんtrueにしてました。 >でも、IPを聞いてくるのでいろいろイヂってみたところ、 >ダミーのIPをTCPIPSetting.HostNameに入れておくこと >で、聞いてこなくなりました<不思議な現象ですね Samples\Network\Chat2 サンプルはご覧になられたでしょうか? このサンプルならIPアドレスを入力すれば聞いてこないと思うのですが どうでしょうか? >ところで、DXPlayで自分や参加者のIPを取得することが >できるとうれしいんですが、できますでしょか? 自分のマシンのIPアドレスはWinSockを使うことで取得出来ると思います。 参加者のIPアドレスは…メッセージで参加者から送ってもらうぐらいしか 思いつかないです(^^; 自IPアドレスを取得するサンプルはこの掲示板の過去ログをWinSock で検索すれば見つかると思います。 >win2000でコンパイルするとき、win98では問題ないのに、unit >の名前を変更しないととおらないので。。。 どのようなコンパイルエラーが出ているのか分からないですが ユニット名が衝突していたりパスが通っていないことは無いでしょうか? >win2000でのプログラミングはいまいちわからないことだらけ >です。プロバイダの設定も、'DirectPlay に対する インターネット TCP/IP 接続' >で通らないし。。。 プロバイダの設定を文字列定数で直接指定すると環境に依存してしまいます。 同じTCP/IPでもプロバイダ名がDirectX のバージョンなどによって異なったり することがあります。 以下のサンプルのようにProvidersプロパティの値を使われた方が良いと思います。 uses DirectX; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin DXPlay1.ProviderName := ''; for i:=0 to DXPlay1.Providers.Count-1 do if CompareMem(PGUID(DXPlay1.Providers.Objects[i]), @DPSPGUID_TCPIP, SizeOf(TGUID)) then begin { これは TCP/IP プロトコル } DXPlay1.ProviderName := DXPlay1.Providers[i]; Break; end; DXPlay1.TCPIPSetting.Enabled := True; DXPlay1.TCPIPSetting.HostName := HostNameEdit.Text; { 192.168.1.2 などが入る } DXPlay1.Open2(... end; ◆ Naoki Hagaさん、RIKIMARU さん 次期バージョンで修正されると思います。 どうもありがとうございます(^^ ◆ Reinaldo Quaresma さん >Boku wa, burajiru jin desu kedo nihon go (gengogaku) o benkyosuru kara, >moshi Hori san wa eigo no honyaku iru, boku wa tetsudaimasu yo. とてもうれしいのですが、お気持ちだけ受け取りたいと思います(^^;
TCPIPSetting.Enabledはもちろんtrueにしてました。 でも、IPを聞いてくるのでいろいろイヂってみたところ、 ダミーのIPをTCPIPSetting.HostNameに入れておくこと で、聞いてこなくなりました<不思議な現象ですね ところで、DXPlayで自分や参加者のIPを取得することが できるとうれしいんですが、できますでしょか? さらに、ふと疑問に思ったことなんですが、unitの名前は (win98では)unit1、unit2とかしかできないんでしょうか? win2000でコンパイルするとき、win98では問題ないのに、unit の名前を変更しないととおらないので。。。 根本的に、ソースがおかしいのかも(w; win2000でのプログラミングはいまいちわからないことだらけ です。プロバイダの設定も、'DirectPlay に対する インターネット TCP/IP 接続' で通らないし。。。 以上、報告&質問でした。
RIKIMARU-san, ano Bug ha arimasu ne. Watashi no Game no naka ni DrawIndexedPrimitiveVB wo tsukatte imasu kara, mou shuuesei shimashita. Demo wasuremashita ^^; Sore ni, mou hitotsu no Bug ga arimasu : IDirectDrawSurface4 (DelphiX 6.1) no interface ni ha function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc; dwFlags: DWORD; hEvent: THandle): HResult; stdcall; ha hontou ni function Lock(lpDestRect: PRect; const lpDDSurfaceDesc: TDDSurfaceDesc2; dwFlags: DWORD; hEvent: THandle): HResult; stdcall; desu. IDirectDrawSurface7 ni mo arimasu. Watashi no nihongo ha mada heta desu ne. Gomen nasai. (Reinaldo-san, now I don't feel alone anymore in this page... ;-))
こんにちは いつもお世話になっております。 function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7; dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices: Word; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall; は function DrawIndexedPrimitiveVB(d3dptPrimitiveType: TD3DPrimitiveType; lpd3dVertexBuffer: IDirect3DVertexBuffer7; dwStartVertex: DWORD; dwNumVertices: DWORD; const lpwIndices; dwIndexCount: DWORD; dwFlags: DWORD): HResult; stdcall; ではないでしょうか。http://www.ifnet.or.jp/~rikimaru/
Hello Hori, Boku wa, burajiru jin desu kedo nihon go (gengogaku) o benkyosuru kara, moshi Hori san wa eigo no honyaku iru, boku wa tetsudaimasu yo.
It works !! ^___^ Arigatou, Hori-san :) Mou kekkou desu :) FlipToGDISurface no sei datta no desu ne ^_^;; DelphiX7 no eigoban mo arigatou :)
昨日公開したDelphiXの英語版です。 http://www.ingjapan.ne.jp/hori/data/DelphiXforDX7-beta1-English.zip ◆ RIKIMARU さん >どうもTD3DRenderStateTypeの >D3DRENDERSTATE_VERTEXBLEND, >D3DRENDERSTATE_CLIPPLANEENABLEが間違ってるようです。 >勘違いだったらすいません。 確かに間違っておりました。DirectX.pas にある --------------------------------------- D3DRENDERSTATE_EMISSIVEMATERIALSOURCE, D3DRENDERSTATE_VERTEXBLEND, --------------------------------------- の行を --------------------------------------- D3DRENDERSTATE_EMISSIVEMATERIALSOURCE, D3DRENDERSTATE_INVALID_149, D3DRENDERSTATE_INVALID_150, D3DRENDERSTATE_VERTEXBLEND, --------------------------------------- に置き換えて下さい(^^; ◆ Naoki Haga さん >SelectDriver wo kokoromite kudasai. Hardware wo shite mo, Software >de arawaremasu. Kaihou ga arimasu ka ? TDXDraw コンポーネントの Options プロパティの doFlip を True に設定すると どうでしょうか?
DirectX7版早速DLして有りがたく使わせてもらっております。 早速DX7ならではの機能のVertexBlendの実力を見てみようと いろいろやってみましたが うまくいきませんでした。 どうもTD3DRenderStateTypeの D3DRENDERSTATE_VERTEXBLEND, D3DRENDERSTATE_CLIPPLANEENABLEが間違ってるようです。 勘違いだったらすいません。 インターフェースが一新されたので古いインターフェイスはどうなる かなと思ってましたがDX7モードという形でで対応させたんですね。 DX7はインターフェイスがすっきりしていい感じです。 正式版楽しみにしてます。http://www.ifnet.or.jp/~rikimaru/
Hori-san, arigatou gozaimasu. Ano beta-ban ha kekkou desu ga, 3Dfx no Voodoo1/Voodoo2 wo tsukaeba mada bagu ga arimasu. SelectDriver wo kokoromite kudasai. Hardware wo shite mo, Software de arawaremasu. Kaihou ga arimasu ka ? –x‚³‚ñA‚ ‚肪‚Æ‚¤‚²‚´‚¢‚Ü‚·B ‚ ‚̃x[ƒ^”ł͌‹\‚Å‚·‚ªA3Dfx‚ÌVoodoo1/Voodoo2‚ðŽg‚¦‚΂܂¾ƒoƒO‚ª‚Ü‚½‚¢‚Ü‚·B SelectDriver‚ðŽŽ‚Ý‚Ä‰º‚³‚¢AHardware‚ðƒZƒŒƒNƒg‚µ‚Ä‚àASoftware‚ÅŒ»‚ê‚Ü‚·B‰ð•ú‚ª‚ ‚è‚Ü‚·‚©H
DELPHIのソース関連はデータドライブに保存していますので、ショート カットの作業フォルダは D:\PROJECT\DELPHIにしていますが、それでも デフォルトが DelphiX のインストールフォルダになってしまいます。 レジストリやDelphi/binの環境設定ファイルなどに、書き込まれている のではないかと、いろいろ検索しているのですが、該当するような項目 も見当たりませんし、とりあえず、DELPHI5 Patch を当ててみて、だめ なようなら Delphi を再インストールしようと思います。 NTでは使えないわけだし、2000の開発環境を構築したらまた使ってみる つもりです。 DirectX7 への対応期待しています。(大変でしょうが)
みなさん、こんにちは。 まだまだヘルプファイルなどが未完成ですが、DelphiX for DirectX7の ベータ版をアップしました。W2KにおけるTDXInputのバグなども修正されて います。 http://www.ingjapan.ne.jp/hori/data/DelphiXforDX7-beta1.zip ◆ fluit さん >Delphi+DelphiXで作った新作ゲームができました。 >タイピングのゲームです。 >単純な(プログラム&内容)ですが、割と楽しめるのではないかと思います。 >お暇でしたら挑戦してみて下さい。 早速楽しませていただきました(^^; 上級コースにも挑戦してみたのですがローマ字の入力方法が私の習慣と違っていて 間違いだらけでした。例えば jyo と zyo、fu と hu です(^^; ◆ 長崎さん >コンポーネントをアンインストールしても、Delphiのオプション >で、デスクトップ環境の保存を行わないようにしても直らないの >ですが何が原因なのでしょう。 おそらく Delphi が起動されたときのカレントディレクトリが なぜかDelphiXのフォルダになってしまっているみたいですね。 デフォルトフォルダは Delphi32.exe へのショートカットの作業フォルダ設定で 指定できるようなので、ショートカットがおかしくなっているとかありませんでしょうか? ◆ 雑音さん >ところで、dxplayのhostnameをちゃんと設定してopen2 >しても、接続先IPをきいてくるんですが、なぜでしょうか? TCPIPSetting.Enabled プロパティを True に設定されているでしょうか? Enabled プロパティを True に設定しないと TCPIPSetting プロパティは 使われません。
I want Delphi-X...
たしか、NTではINSTALLできないのでは?Windows2000を使えば 初めから、DirectX7が組み込まれているはずですが・・・ NT4.0ではDirectX3相当しか動かなかったと思います。 ある
Delphi+DelphiXで作った新作ゲームができました。 タイピングのゲームです。 単純な(プログラム&内容)ですが、割と楽しめるのではないかと思います。 お暇でしたら挑戦してみて下さい。 プログラムは、クラスとか関数を使ってません・・・ だらだらと作ってあります・・http://nx.sakura.ne.jp/~fluit/
Inside DelhiX の付属CDからコンポーネントをインストールした のですが、Delphiからファイルをオープンしようとすると、デフ ォルトのフォルダが、DelphiXをインストールしたフォルダに固定 されてしまいます。 コンポーネントをアンインストールしても、Delphiのオプション で、デスクトップ環境の保存を行わないようにしても直らないの ですが何が原因なのでしょう。 Delphi自体に、デフォルトフォルダを指定するような項目がある のでしょうか。 使用環境は Delphi5 Ent + WinNT4 Server です。 DirextXが使用できない NT に入れるなって?。だって入れたか ったんだもんね。
こんにちは、はじめまして! 僕は、Windows NT 4.0 sp3を使っていて最近delphi 5を購入したものです。 本屋を物色していたところInside Delphi Xなる本を見付け 「そうかーゲーム作りたいなー」の理由で購入、いざ、インストールしてみると DIRECT X7きちんとインストールできませんでした。Delphi Xはインストールできました。 うまく行ったかなと思ったのですが、この本についてあるサンプルはすべて アプリケーション開始時にDIRECT X6が必要のメッセージが出るばかりです。 どうやったら Windows NT4.0にDIRECT X6以降をインストールすれば良いのでしょうか? どうしたら良いか教えてください。
ども、雑音です。 下のカキコですが、どうもwin2000固有のエラー(?) だったみたいです。win98では、問題なくいきました。 ところで、dxplayのhostnameをちゃんと設定してopen2 しても、接続先IPをきいてくるんですが、なぜでしょうか? 同じような症状が出た人orわかる方、教えていただけないで しょうか? ちなみに、 main.dxplay.ProviderName:='DirectPlay に対する インターネット TCP/IP 接続'; main.dxplay.TCPIPSetting.hostname:=ip_edit.text; main.dxplay.Open2(false, 'host', name_edit.text); と記述しました。
はじめまして、雑音です。 DelphiXを使わせてもらおうと思うのですが、DirectXを 7.0にした後でした。 コンポのインストールはできましたが、一部のsampleが 動かないようです。 7.0でDelphiXを使っても、この程度のエラーで済むので しょうか?それとももっと致命的なエラーがひそんでい るんでしょうか? 現在はNETゲーの基本であるチャットを作ろうと思っ ているんですが、サンプルのチャットを終了すると、エ ラーが出るんですが(^ー^;
SourceフォルダにDelphiのパッケージファイルがあるので それをコンポネートのインストールから手動でやってみてはいかがでしょうか? DelphiX_for4.dpk のファイルですね。起動してからファイル>全て閉じる をやってからインストールした方が良いと思います。 それでわ失礼しました〜
噂のDelphiXを私も…とダウンロードさせていただいたのですが,インストーラが動きません。 起動はするのですが,ヘルプの組み込むかのオプションを選択した後ボタンを押して決定すると カーソルが砂時計に変わるのは良いのですが,そのまま静かになるので結局強制終了させる羽目になります。 (応答なしになっています) Delphi4Standardを使用していまして,圧縮ファイルの中身はC:\DelphiXフォルダに解凍 (勿論ディレクトリ付きです)した後インストーラをその中のBinフォルダから起動しました。 以上でもし「これがまずい」と気付かれる方がおられましたら,何卒対策を御教授願います。 またパッケージのインストールやコンパイルを使って手作業で導入する方法がありましたら 同様にお願いいたします。
どうも、はじめまして。 本屋でDelphiXを知って、自作のゲームを作るのにさっそく使わせてもらってます。 そこで、質問があります。 画面を実行中にフルスクリーンにするなどで、DXDrawを初期化する際にそのDXDrawを親とする DirectDrawSurfaceの内容が吹っ飛んでしまいます。 DXDrawのFainalize(スペルあってるかなぁ・・・)だかでDirectDrawSurfaceの内容を システムメモリに待避し、Intialize(これも自信ない)で復帰させるという方法を考えたの ですが、上手い待避方法が思いつきません。 初歩的な質問で恐縮ですが、どうか救いの手をお願いします。 TPictureCollectionItemを使わない方法が自分としてはありがたいです。
はじめまして!某所でDelphiXを知り使わせて貰いました。 とても素晴らしいコンポネートに感動させてもらいました。有り難うございます。 一つ気になったのですがTDXTimer.Intervalのヘルプで 「TDXTimer が1秒間に OnTimer イベントを発生させる回数を指定します。」 と有るのですが、実際Intervalプロパティは回数ではなくOnTimerイベントまでにミリ秒ではないのでしょうか? ひょっとして私の勘違いでしょうか? それでは失礼しました。
>テクスチャ付きなどのポリゴンを描写するdxrDrawPrimitive関数がありますが >あまり速くないしDirect3D全盛の時代ではあまり使い道が無いなぁと思います D3Dは互換性の問題があるので確実に描写したいときに役立つと思います。 リアルタイムでないときも役立つと思いますし。私にはソースコードを読むことが 勉強になります。腕がある人ならソースコードが提供されてるので拡張可能です。 DX7版、私には、バグ報告くらいしかできませんが、改めてがんばってください。http://www.ifnet.or.jp/~rikimaru/
DXRenderユニットはTDirectDrawSurface.DrawAlphaメソッドなどの特殊描写を 行うユニットです。非公開・非サポートな扱いなのでヘルプには載っていません。 テクスチャ付きなどのポリゴンを描写するdxrDrawPrimitive関数がありますが あまり速くないしDirect3D全盛の時代ではあまり使い道が無いなぁと思います。 ◆ Naoki Haga さん http://www.ingjapan.ne.jp/hori/data/980515.zip これはおっしゃるとおりDXRender.pasのdxrDrawPrimitive関数を使っています。 近いうちにソースコードをアップしてみますね(^^; ◆ RIKIMARU さん >InsideDelphiXという名前ですがPASCALユーザーだけでなく、ゲームの作りかたの入門書としてもお勧めの本だと思いました。 どうもありがとうございました〜。ふむふむ。そういう見方もあるんですね(^^; >あとDelphiXのDirectX7版をもし作られてるならばがんばってください。 はい、頑張りたいと思います。
Nanda kono file ? ^^; DXRender Software Engine no tsukau Torus de ha nai no desu ka ? @_@; Hori-san, Source Code wo okutte kudasai !! ^^;http://www.ingjapan.ne.jp/hori/data/980515.zip
InsideDelphiX遂に買いました。 ゲームをどうやって作ったら良いのかの入門的な内容はDelphiXを今から使い はじめる人や私を含め初心者の方には、最適だと思いました。 またDelphiXのリファレンスも載ってるいるのでDelphiXを使いこなしてる人で helpとソースだけでなく印刷されたものがほしい人にもお勧めです。 あとHelpより詳しく載ってるので買って損はないと思います。 残念だったのはDXrender.pasについて解説されているとうれしかったんですが それは欲張りすぎですね。実はこのユニット面白そうだったので読んでみたんですが 挫折していたもので。 InsideDelphiXという名前ですがPASCALユーザーだけでなく、ゲームの作りかたの入門書としてもお勧めの本だと思いました。 素晴らしい本をありがとうございます。 あとDelphiXのDirectX7版をもし作られてるならばがんばってください。 出たらGeforce買ってしまいそうで怖いですがDirectrX7版期待しています。http://www.ifnet.or.jp/~rikimaru/
Hori-san ! Minna ga DirectX 7.0 no DelphiX wo matte imasu yoo !! ^^; Sono ue, "DXRender" no source code ni ha, "dxrDrawPrimitive" to iu method ga arimasu. Nan no you desu ka ? Software Engine da to omoimasu. Dou iu tsukawaremasu ka ? Kono Code de ha arimasen... ^^; var TextureSurface, DestSurface: TDXR_Surface; RenderStates: TDXR_RenderStates; dxrDefRenderStates(RenderStates); if dxrDDSurfaceLock(Surf.ISurface, DestSurface then begin dxrDDSurfaceLock(TextureSurface as IDirectDrawSurface, TextureSurface); RenderStates.TextureList<0>.Surface:=@TextureSurface; dxrDrawPrimitive(DestSurface, RenderStates, DXR_PRIMITIVETYPE_TRIANGLELIST, @VertexList, 36); dxrDDSurfaceUnlock(SurfaceTexture as IDirectDrawSurface, TextureSurface); dxrDDSurfaceUnlock(Surf.ISurface, DestSurface); end;
RIKIMARU様、いつもいつもありがとうございます。 基本的なことをいろいろ教えていただき恐縮です。 いまいち、言葉の言い回しがわかりづらくて、いつも悩んでしまいます。 SDKを見ても同じような、似たような言葉が多く、悩んでいます。 今回の内容でかなり理解できました。 ありがとうございました。 もう少し頭をやわらかくして、SDK等を見たいと思います(^^;
テクスチャを2枚重ねたりするとき SetTextureStage(0,Tex1); SettextureStage(1,Tex2); として二つのUV座標をもつ頂点を使ってDrawprimitiveをよびだせば 一度の呼び出しでTex1とTex2を重ねることができます。 一度(シングル)で描画できるのでシングルパスと言います。 SetRenderState(ALPHABLENDENABLE,1)で2度以上描画して重ねる方法を 2度以上呼び出すのでマルチパスと言います。 シングルパスをするときのブレンド方法はSettextureStageStateの D3DTSS_COLOROPやD3DTSS_ALPHAOP,D3DTSS_COLORARG1..などで設定できます。 あと用語的に シングルパス-マルチテクスチャと マルチパス-シングルテクスチャ でなく マルチテクスチャ-シングルパスと マルチテクスチャ-マルチパスだと思います 速度はハードの支援があれば圧倒的にシングルパスで描画したほうが速いです。 DXSDKのライトマップ当たり参考になると思います。 SDKのサンプルの方が私の解説よりはるかに分かりやすいと思います。 自信が無い解説ですが、お役に立てれば幸いです。http://www.ifnet.or.jp/~rikimaru/
RIKIMARU様、いつもありがとうございます。 パスの設定って、 SetTextureStageState( 0,・・・・・・ 等の「0」のところでしょうか? ここで、Stage番号というか数字を変えればこれはマルチパスになるんでしょうか? マルチパスを使用すると遅くなるのでしょうか? シングルパス-マルチテクスチャ と マルチパス-シングルテクスチャ では、どちらが速いのでしょうか? 無知で申し訳ありません。よろしくお願いいたします。
説明不足でした。 シングルパスはマルチテクスチャにおけるシングルパスという意味で言いました。 Geforceは確か4枚までシングルパスで描画できるんですよね。 私が使ってるビデオカードはTNTです。シングルパスで2枚まで重ねられます。 takeさんが言われてるのは恐らくダブルバッファですよね。フルスクリーンモー ドならばFLIPは内部的には描画メモリのポインタ入れ替えみたいなものだけだと 思うので付加全くないと思います。WindowモードだとBltで転送してると思うの でそれだけ負荷はあると思います。ダブルバッファをしなければ早くなるかもし れませんがちらつきがでるのであまりつかえませんね。 勘違いしてる部分がありましたらご指摘お願いします。http://www.ifnet.or.jp/~rikimaru/
はじめまして,JIと申します。 フリーのDelphi MPEG-4 codecのソースコードまたは実行 ファイルを載っているWebページをご存知の方は教えて ください。お願いいたします。
RIKIMARU様、レスありがとうございます。 ちょっとシングルパスで気になったので...。 現在画面を切替えるとき、切替えられる古い画面と新しく表示する画面を別々でDrawPrimitive しています。これはシングルパスではないんですよね? この方法はやはり遅いのでしょうか? また、これをシングルパスで表現するとしたらどのような方法があるのでしょうか? ところで、RIKIMARU様はどのようなビデオボードをお使いでしょうか?
シングルパスでできるならばシングルパスで描画するといいと思います。 カクカクってのがもし早過ぎる場合WAITをいれるという方法で管理 してておこってるならば経過時間に応じて描画内容を反映させる方法を とれば少しは、改善されるかもしれません。 余談ですが 大きいテクスチャでそんなに遅くなるってのは本当かなと思ってテスト してみました。 いいかげんなテストですが256*256と1024*1024を 852*480にレンダリ ングしてみました。だいたい256は1024の1.1から1.5倍ほど(いいかげん) でした。ビデオチップにもキャッシュのようなものがあったりするんでしょうね。 でも大きいからそこまで遅くなってるかというとそうでもないような気もしますが どうなんでしょうか?http://www.ifnet.or.jp/~rikimaru/
RIKIMARU様、いつもレスありがとうございます。 現在大きい画面をスライドみたいな感じで切替えるものを作っているのですが、 SetTextureでテクスチャをセットしてDrawPrimitiveで描画してます。 エフェクトといってもフェードイン・アウト、ブレンドみたいな感じでアルファプレンディングしてます。 以前のi740(8MB)ではシステムメモリを使用した場合の方が表示は早く、GeForceではハードウェアを使用 した方が早かったです(まぁ当然のようですけど)。 しかしこれはテクスチャサイズが512×512程度までで、それ以上になるとi740みたいな「かくかく」 表示になってしまいます。nVIDIAのサイトなどにあるGeForceのデモなどは一見複雑ですが、 非常に滑らかに動きます(テクスチャサイズは512×512)。某MSのフライトシュミレーターなどは ノートパソコンでもさくさく動いちゃいます。 やはりこれはテクスチャ管理の違いなんでしょうか。サイズがでかいと遅くなってしまうんでしょうね。 今後、上記の作成中のソフトには画面を飛び散らしたり、うねうねさせたりといろいろな変形を考えているのですが、 これほど絵が悪く、遅いとなると考え物のような気がします。 中途半端な画像サイズを単純計算で64×64くらいのものに分割すればほぼ近いサイズで再現できそうです。 でもこの方法って、あまり好ましくないんでしょうね。 フライトシュミレーターみたいな、背景が大きい(っていうか広い感じの)ものってどのように描写しているんでしょうね。 またまた余談ですが、現在CreativeのGeForceProを使ってますが、なんか思ったより良く無かったです。 私の知り合いなんか「G400のほうがいい」と言うくらいです。 カノープスのボードの方がいいのかなぁ(買うときはカノープスを勧められました←かなり強く)。 相変わらずの長文をお許しください。
拡大縮小が伴うかぎり必ずなんらかのボケは出るのでエフェクトを工夫してなんとかするの でしょうがエフェクトの内容が分からないのでレスができないと思います。 恐らくこれだけの情報だとtakeさんもおっしゃられてるように分割して貼りつけるとい うレスしかできないと思います。でも それが最適かもしれません。 エフェクトの内容分かかっても私には答えられないような気はしますが、もう少し情報ある と、どなたか優れたプログラマのレスがつくかもしれません。 予断ですがGeforceいいですね。 ただDrawAlphaはGeforceというより恐らくCPUパワーなのでシステムメモリに確保 したほうがはやくなるかもしれませがどちらにしても852*480だといくらCPU早くてもリ アルタイムで加算合成は無理ですね。それに他の部分が遅くなって意味なくなりそうですし。 Geforceが悲鳴を上げるってのはどういう状況なんでしょうか? レスになってなくて申し訳ありません。がんばってください。http://www.ifnet.or.jp/~rikimaru/
またまた、はまりました。というか、無理難題ですが...(^^; Direct3Dを使用してテクスチャを貼り付けてエフェクトをかけようとしているのですが、 そのテクスチャ用の画像が大きいんです。しかも半端なサイズ(852×480)なんです。 これを512×512のDIBにとりあえず貼り付け、フルスクリーンで出すと当然のことながら 画像がぼやけます。さらにこの画像の中に文字がかかれているんです。 もう字なんて読めません。 このような場合、どうしたらよろしいでしょうか? 適当なサイズに分割して貼り付ければいいのでしょうか? テクスチャサイズを1024×1024なんかにしたときには、さすがのGeForce256も悲鳴をあげました。 また、他にいい方法はありますでしょうか? 余談ですが、Direct3Dを使わないでDrawAlpha等を使用してAlpha表示したとき、さすがのGeForceでも表示がギクシャクになりました...(^^;;むちゃですよね。
自己レスです。 試しにチェックを入れていたoptionの「doFullScreen」をはずさずにコンパイルしていました。 この状態だと、パソコン環境によってはclipperが生成されないことがある・・ ということみたいでした。お騒がせ致しましたm(__)m
>ええ。ちゃんとでてますよ〜。kame上では何の問題もありませんでした。 ああ、ありがとうございます。スミマセン環境テストみたいなことをさせてしまって・・m(__)m そうか、そうすると何が原因なんだろう?ちょっとゆっくり考えてみます。
>のぼのぼさんの環境では、ロードされたデータが「表示」されている・・ ええ。ちゃんとでてますよ〜。 kame上では何の問題もありませんでした。
>長文失礼! いつもありがとうございます、のぼのぼさんm(__)m 早速、ファイルの書き出し方変えます(^_^;) 助かります。 ・・・ところで、下の僕の質問の仕方が、変なのですが、 そうすると、のぼのぼさんの環境では、ロードされたデータが「表示」されている・・ ということですよね。DXDrawのウインドウが真っ黒のままではない、ということですよね?
ためして、セーブしたファイルをDirect3DRMViewer(DirectX7SDK付属)で 見てみたところ、ちゃんと動くフレームとは別に、 メッシュがそれぞれ存在してしまっています。 これは、僕も経験があって回避策としては、 ---次のようにするのでなく----------------------------------- Mesh Mesh1 { .. } Mesh Mesh2 { .. } Frame Parent { FrameTransformMatrix {..} {Mesh1} Frame Child { FrameTransformMatrix {..} {Mesh2} } } ---次のようにしたら直りました----------------------------------- Frame Parent { FrameTransformMatrix {..} Mesh Mesh1 { .. } Frame Child { FrameTransformMatrix {..} Mesh Mesh2 { .. } } } 長文失礼!
お世話になっております。みつまつです。 のぼのぼさんやRIKIMARUさんに、当掲示板で助けていただき 不安定ながらなんとか、自分の思ったような形にしてきたのですが、 他の人の環境だと、「起動」「ロード」まではするものの、 読み込んだXファイルがDXDrawに反映されないらしい・・・という現象が出るらしいのです。 うー・・質問が抽象的ですね、スミマセンm(__)m 「初期化」のチェック項目なのか・・と考えましたが、再現出来ないので (自分の環境だと問題が発生しないので) 差し出がましい質問ですが、思い当たるふしがおありの方、 お答え願えると幸いですm(__)mhttp://member.nifty.ne.jp/Mitsumatsu/animex.htm
できましたぁーー!! まじ嬉しいです!!どう表現してよいやら。 のぼのぼさんほんとにありがとうございます! そしてこれからも勝手ながらよろしくお願いします!
あ、書き方がややこしかったようです。 単にオブジェクトインスペクタで、 DXDraw1のOptionsプロパティを設定するだけです。
早速の返答ありがとうございます。 でもうまくプログラムをかけませんでした。 よくわからなくてすいません。具体的にどのように書くのでしょうか? いちよ 子フレームのXファイルを読み込んだあとに、 MeshFrameMoon.AddVisual(MeshBuilderMoon); TDXDraw1.Options ・・・・ とつけ加え、doZBuffer を書き足したかったんですが書き方がわからなかったです。 よろしくお願いします。http://www.ngsk.k.hosei.ac.jp/~kumano/Question/a.html
同様のファイルをテストしたところ、 確かに子フレームが手前にきますね。 うちでは、TDXDraw.Optionsに 「doZBuffer」を追加すると、 うまく表示されました。
はじめまして、熊野と申します。 初心者なのですが、なにとぞよろしくお願いいたします。 基本のところなんでしょうが、はまって抜け出せません。 親フレームのまわりを子フレームがまわるプログラムなのですが、どうしても子フレームが親フレームの前に描写されてしまいます。 何が原因なのでしょうか? 実行画面とソースをHomepageにまとめてみました。 http://www.ngsk.k.hosei.ac.jp/~kumano/Question/a.html なにとぞアドバイスをよろしくお願いします。http://www.ngsk.k.hosei.ac.jp/~kumano/Question/a.html
堀さん...何時DX7.0のDelphiXがくるのですか… It's too long ;)
TAudioStream.AutoUpdate set False, Then how to fill the buffer with Update routine?
遅くなりましたが…、 dxinputの不具合への対応、ありがとうございました。
>こんなかんじでできそうです。 ありがとうございますRIKIMARUさん!成功です(^O^) あらためて症状の説明不足をお詫びいたします、頭の中が煮崩れていたので・・ でもバッチリでした。 そうか、やはり最初にnilを渡さなければいけないんですね。 また、よろしくお願いいたしますm(__)m
どこが失敗してるのかいまいちよくわからないので 題名からGetnameで失敗してると仮定してレスをつけます。 var name:string; NameSize:DWORD; SelectMeshBuilder.GetName(NameSize,nil); SetLength(name,NameSize); SelectMeshBuilder.GetName(NameSize,PCHAR(name)); SetLength(name,NameSize-1); こんなかんじでできそうです。 未確認なので失敗してたらすいません。http://www.ifnet.or.jp/~rikimaru/
DelphiXFAQを応用して、マウスでクリックしたメッシュの名前をラベルに表示しようと したのですが、どうも思ったようにいきません(>_<) 何か良い方法はないでしょうか? 御教授くだされば幸いです。 よろしくお願いします。
RIKIMARU様、VFWのインポートに対してご指摘いただきありがとうございました。 おかげでうまくいっているようです。 ところで、実際にAVIStreamGetFrameで取得した1画面をTextureに貼り付けるところで つまづきました。戻り値がパックされたDIBのポインタですが、これをどのように取り込めば いいのでしょうか?一度にばっと書き込めないものでしょうか。 藁をもつかむ思いです。 よろしくお願いします。
Delphi+DelphiXを使った初めてのゲームが完成しました! 慣れないものでかなり苦労しましたけども、なんとか完成しました。 「和尚とパネル」という、アクションパズルパネルゲームです。 DelphiXのおかげで、完成することができました。 なんという、便利なコンポーネント集なのでしょう。 どうも、ありがとうございました。 よろしければ、ダウンロードして遊んでみて下さい。http://nx.sakura.ne.jp/~fluit/
varかoutがぬけてるんじゃないでしょうか? こんな感じで使えないでしょうか? procedure AVIFileInit; stdcall external 'AVIFIL32.DLL' name 'AVIFileInit'; function AVIStreamOpenFromFile(var pavi: Pointer; szFile: PChar; fccType: DWORD; lParam: LONGINT; mode: UINT; pclsidheader: Pointer): UINT; stdcall external 'AVIFIL32.DLL' name 'AVIStreamOpenFromFile'; function AVIStreamGetFrameOpen(pavi: Pointer; lpbiWanted: PBitmapInfoHeader): Pointer; stdcall external 'AVIFIL32.DLL' name 'AVIStreamGetFrameOpen'; function AVIStreamInfo(pavi: Pointer; var psi: TAviStreamInfo; lSize: LONGINT): UINT; stdcall external 'AVIFIL32.DLL' name 'AVIStreamInfo'; function AVIStreamRelease(pavi: Pointer): LONGINT; stdcall external 'AVIFIL32.DLL' name 'AVIStreamRelease'; procedure AVIFileExit; stdcall external 'AVIFIL32.DLL' name 'AVIFileExit'; function AVIStreamGetFrame(pget: Pointer; lPos: LONGINT): Pointer; stdcall external 'AVIFIL32.DLL' name 'AVIStreamGetFrame';http://www.ifnet.or.jp/~rikimaru/
下の件で、やはりこれからはDirectShowのほうがいいのでしょうか。 MediaSDK(6.1)にはDirectDrawにDirectShowでAVI等のファイルを表示するサンプルが ありました。DirectShowの方がいろいろつかえていいですよね...。 どなたかご存知ないでしょうか?
VFWのインポートをはじめましたが、うまくDLLとリンクできないようです。 使うDLLは「AVIFIL32.DLL」でよろしいのでしょうか? とりあえず IAVIStreamとIGetFrameのインターフェースを取り込み、 AVISTREAMINFO、AVIFILEINFOの構造体もいれて、 procedure AVIFileInit ; stdcall; procedure AVIFileExit ; stdcall; function AVIStreamOpenFromFile(ppavi:IAVIStream; szFile:LPCWSTR; fccType:DWORD; lParam:Longint; mode:Cardinal; pclsidHandler:TCLSID):HRESULT; stdcall; function AVIStreamGetFrameOpen(pavi:IAVIStream; lpbiWanted:PBitmapInfoHeader):IGETFRAME; stdcall; function AVIStreamGetFrame(pg:IGetFrame ; lPos:Longint):Pointer; stdcall; function AVIStreamGetFrameClose(pg:IGetFrame):HRESULT; stdcall; function AVIStreamInfo(pavi:IAVIStream ; psi:VAVIStreamInfo; lSize:Longint):HRESULT; stdcall; function AVIStreamRelease(pavi:IAVISTREAM):Longint; stdcall; の関数を取り入れました。 AVIStreamOpenFromFileではIAviStreamはnilが帰ってきてしまい、 AVIStreamGetFrameOpenでエラーになります。 どこがいけないのでしょうか? よろしくお願いします。
◆ 中尾君さん >上の現象はDelphiXのサンプルでも起こるらしいです。 >普通のdirectinputアプリは動くそうなので、DelphiXのバグだと思います。 >なお、ジョイスティックを抜いておくと起きないようです。 DXInput.pas の TCustomInput.SetDataFormat メソッドが原因でした。 TCustomInput.SetDataFormat メソッドを以下のソースへ置き換えてください。 function TCustomInput.SetDataFormat: Boolean; function DIEnumDeviceObjectsProc(const peff: TDIDeviceObjectInstanceA; pvRef: Pointer): HRESULT; stdcall; begin Result := DIENUM_CONTINUE; // 新しく追加化した箇所 if CompareMem(@peff.guidType, @GUID_Unknown, SizeOf(TGUID)) then Exit; with TCustomInput(pvRef) do begin if peff.dwOfs<FDataFormat.dwDataSize then begin FDataFormatGUIDs[FDataFormat.dwNumObjs] := peff.guidType; with FDataFormatObjects[FDataFormat.dwNumObjs] do begin pguid := @FDataFormatGUIDs[FDataFormat.dwNumObjs]; dwOfs := peff.dwOfs; dwType := peff.dwType; dwFlags := 0; end; Inc(FDataFormat.dwNumObjs); end; end; end; begin Result := False; if FDevice<>nil then begin with FDataFormat do begin dwSize := SizeOf(FDataFormat); dwObjSize := SizeOf(TDIObjectDataFormat); dwNumObjs := 0; rgodf := @FDataFormatObjects; end; FDevice.EnumObjects(@DIEnumDeviceObjectsProc, Self, DIDFT_ALL); if FDevice.SetDataFormat(FDataFormat)<>DI_OK then Exit; end; Result := True; end; ◆ aihatena さん >dwPriority: DWORD; > >が抜けているようでした。以下が1つ上にずれて hrに MessageIDが。 どうもありがとうございます。次期バージョンで修正されると思います。
VC++4.0の場合はVFW.hがついてました。 最新の6.0ではかわってるかもしれませんが 私はこれを参考にしました。 インポート方法は普通のWindowsAPIと同じです。 windows.pasをみればわかると思います。 方法のどのあたりがわからないかを書いてくれれば、もっと詳しい 方のレスが得られるかもしれません。http://www.ifnet.or.jp/~rikimaru/
AVI関係のAPIはどのライブラリからになるのでしょうか。 インポートの方法等教えていただければ幸いです。
忠実にVFWをコンバートするとなると相当大変だと思いまが SDKについてるサンプル程度ならそんなに苦しくないと思いま す7個程度だとおもいます。 DirectShowはまったくしりません。http://www.ifnet.or.jp/~rikimaru/
連続してずみません。 VFWを使わないでDirectShowを使う場合、DXDrawにAVIファイル内容を表示させるには どのような方法が考えられるでしょうか。 無知で申し訳ありませんが、よろしくお願いします。
お久しぶりです。 いよいよ動画を表示させるためVideoTextureなどを使って作ろうと思ったのですが、 DelphiにはVFWのユニットって無いですよね。 RIKIMARU様がいわれるように自分でしこしこ作るしかないんでしょうか? ヘッダをコンバートするのに注意などありますか?
>私が直接確認したわけではありませんが、 >Win2000でDXInput使うとdinput.dllがエラーを起こすそうです。 >Win2000RC2+DirectX7.0aでも同じ症状だそうです。 >何か対処法はありますか? 上の現象はDelphiXのサンプルでも起こるらしいです。 普通のdirectinputアプリは動くそうなので、DelphiXのバグだと思います。 なお、ジョイスティックを抜いておくと起きないようです。
DirectXの helpとにらめっこした結果、 DirectX.pasの 9253行付近、TDPMsg_SendComplete型の宣言にて dwPriority: DWORD; が抜けているようでした。以下が1つ上にずれて hrに MessageIDが。
非同期送信の再送を OnSendCompleteイベントで行おうとしています。 Resultが crOK以外で、SendMessageEx()の返値を保存している listに MessageIDが存在すれば再送を行おうとしているのですが、ここで 必ず MessageID = 0 で Result = crGeneric になってしまいます。 DXPlay.pasの 537行付近でトラップすると Msg_SendComplete.hrの値が 直前に行った SendMessageEx()の返値と等しくなっているので ここに本来 MessageIDである値が返っているのではないでしょうか? とりあえず DoSendComplete(Msg_SendComplete^.dwMsgID, ... の代わりに 無理矢理 Msg_SendComplete.hrを入れて動かしています ^^;
こんにちは。 DelphiXと直接関係無いのですが、なぜかうちの環境だと、DirectXアプリがコマ落ち します。マシンスペックは十分だと思う(Pen3-550)し、なによりFPSが40/60になったり、 30/40になったりします。こういった現象は皆さん起きていませんか? ちなみに、RIVA TNTです>V/B
Horiさんのサンプル、自作のソフトともに良好に動いています。 Windows2000Pro.RC2+DirectX7.0aSDK Windows2000Pro.+DirectX7.0aSDK キーボードでテストしました。 フォースフィードバックはデバイスがないため未確認です。 各プロパティ値は以下のとおりです。 object DXInput1: TDXInput Joystick.BindInputStates = True Joystick.Enabled = True Joystick.ForceFeedback = False Joystick.AutoCenter = True Joystick.ID = 0 Keyboard.BindInputStates = True Keyboard.Enabled = True Keyboard.ForceFeedback = False Mouse.BindInputStates = False Mouse.Enabled = False Mouse.ForceFeedback = False UseDirectInput = True end バージョンは「DelphiX991024j」です。
私が直接確認したわけではありませんが、 Win2000でDXInput使うとdinput.dllがエラーを起こすそうです。 Win2000RC2+DirectX7.0aでも同じ症状だそうです。 何か対処法はありますか?
ありがとうございます、のぼのぼさん! >ChildWrite(txt,Frm);という関数を呼んでtxtをクローズ。 'Frm'というのは、クリエイトしたフレームのポインタということですよね。 原因が解って、晴れ晴れとした気分です(笑) 早速試して、がんばってみます。 また、質問などを書き込ませていただくと思いますが、皆さんよろしくお願いいたしますm(__)m
はじめまして。のぼのぼといいます。 DelphiXありがたく使わせてもらっています。 私も、フレームのセーブをしようとがんばったんですが、 どうしてもできませんでした。 エラーコードを参照して、そのエラーの意味を調べてみたら、 D3DRMERR_NOTDONEYET 実装されていない。 でした。 長文になるので全部はひかえますが、強引な手法でフレームセーブしてます。 Write(txt,'xof 0302txt 0064'#13#10); Write(txt,'Header { 1; 0; 1;}'#13#10); というヘッダをテキストファイルの最初に出力して、 ChildWrite(txt,Frm); という関数を呼んでtxtをクローズ。 これで、テキスト形式のxファイルが保存できます。 ChildWriteでは、Frmの子フレームそれぞれについて、 ・フレームのトランスフォーム情報。 ・メッシュをテキストでセーブしたもの。 ・ChildWriteを再起呼び出し。 を行った結果をテキストファイルに出力します。http://www.kcat.zaq.ne.jp/nobonobo
はじめて書き込みいたします、みつまつです。 DelphiXの恩恵を受けて、Directプログラミングを楽しませて頂いています。 質問なのですが、 DxdrawのD3DRMのフレームで、セーブがどうしても出来ません。 TestFrame:IDirect3DRMFrame2; TestFrame.Save(pchar(savedialog1.filename),D3DRMXOF_TEXT,D3DRMXOFSAVE_ALL); コンパイル、Loadして表示は出来るのですが、書き出してくれません。 Xファイルが悪いのか、設定が悪いのかと考えましたが、 MeshBuilderはセーブできますし、原因がわからず悩み果てました・・・ 環境はDelphi3.1、DirectXは5と7です。よろしくお願いしますm(__)m
アプリケーション実行の際にDirectXがインストールされているかどうかを確認するには どうしたらいいでしょうか。 通常ですとエラーが出てとまってしまいます。 基礎的な内容で申し訳ありませんがご教授ください。
Jibun de taoshita ze ;) Sumimasen :)
>soExclusive := Falseでも排他レベルを設定になってしまうことは >あるのでしょうか? たぶん、該当するアプリが DirectSound を使用していないのだと思います。 soGlobalFoucs などのオプションは DirectSound アプリ同士でしか有効になりません。
optionのところは読んでましたです。しかし現在 「カタソを実行中」に「カタソ以外の音」が鳴らないらしいのです。 # たとえば winampで BGMを流したいのに聞こえない、など つまり DXSound側で排他レベルを設定している? 状況でしょうか。 特定の人のみしか起こらないのでその他の要因かもしれませんし。 soExclusive := Falseでも排他レベルを設定になってしまうことは あるのでしょうか?
Yatto Z-Buffer no bug wa DXTexture ni utsusu koto ga dekimashita ! Hajime ni, DXDraw.Options := DXDraw.Options + [doZBuffer]; Soshite, "tlv[j].sz := 0" wo "tlv[j].sz := 0.1" ni henjite kudasai. Texture wa mou arawaremasen !! Mondai wa "sz" ni arimasu. Zero de wa nai to, nanimo ga hyouji saremasen. (Mochiron, G400 no 5.25.* drivers ya i740 no drivers o tsukawanakereba narimasen) Mou hitotsu, watashi no nihongo sumimasen !! ^^;;;
Wasurete shimaimashita ^^; Ano G400 no mondai wa, saikin no drivers ni okotte imasen. Original drivers o tsukatte kudasai (5.25.* no drivers to ieba mondai ga arimasu) i740 ni tsuite wa, subete no driver versions ni okotte imasu.
Hori-san, Watashi ni henji o okutte arigatou. :) Program ni tsuite wa, ano tokoro ni arimasu. http://perso.club-internet.fr/naoki/kyodai.exe (3,5mb, sumimasen ^^;) Source Code wa totemo taisetsu/himitsu (^^;) no de kono File ni fukumaremasen desukedo. Anata no DXTexture Sample wa kekkou desu ga, TLVERTEX o tsukatte imasu. Tada no VERTEX o tsukau toki ni, Z-Buffer no mondai ga arawaremasu. D3DFVF_VERTEX o tsukau gutairei ga mitsukatte imasu ka ? Areba, anata ga watashi ni okuru koto wa dekimasu ka ? Watashi no nihongo o mou hitotsu gomen nasai ^^; (anata no eigo wa motto ii da to omoimasu ! @_@;) PS : kanji de kaku no wa daijoubu desu. Kanji ga yomeru Software ga motte imasu ^^;
RIKIMARUさん、堀さんありがとうございます。 DelphiXでも手法があるわけですから、試してみる価値はあるわけですよね。 しかし、知識が乏しいのでやはりこれもいろいろ学習してからトライしたいと思います。 IMについてはあーるさんのHPなどを見て勉強していますが、それより先に進めません。 RIKIMARUさんが以前より推奨している参考書などをバリット読まないとだめでしょうか。 最近脳を使っていないため、厳しいです。活性化しないと...(^^;
Naoki Haga san he Watashi mo G400 wo tukatte imasu ga Z-Buffer wo tukatte mo Full Scene ga hyouji saremasu. Haga san no program wo watasi he mail de okutte kurenaidesyouka? Mosikasitara nanika wakaru kamo siremasen.
◆ RIKIMARU さん >あと私はなくしてしまって調べられないのですがTdirect3DTexture2にViewoTextureというか >そんな感じのメソッドがあったような気がしますがあれはどうなんでしょうか?未実装かまったく >用途が違いますでしょうか? これは仰るとおり、テクスチャの内容を自分で書き込みたいときに使うテクスチャを 作成するためのメソッドです。 ◆ aihatena さん >ゲーム起動中に他のアプリケーションで音が鳴らなくなることがあるようです。 >(自分の開発環境、2,3人以外では正しく鳴っている) soGlobalFocus は常に音を鳴らせるわけでもなく制約があります。DelphiX の ヘルプの TDXSound→Options の説明を参照して下さい。これではないでしょうか? ◆ fluit さん >Delphi+DelphiXを使っての初めてのソフトが完成しました。 >「我慢デモ」です。デモなんですけども。 早速拝見させて頂きました。これは見続けると目がおかしくなっちゃいそうですね(^^;
試してないのではっきりしたことはいえませんが不可能でないとおもいます。 SDKのサンプルを少し見てみましたが、ロックしてテクスチャに書きこんでるだけだと 思います。ただAVIのピクセル情報をVFWで取得してるので これらのヘッダの必要な 部分を、自分で定義しないといけないと思います。インターネットなどで探せばありそうで すが私はさがしてないのでわかりません。まぁ一部分だしそんなに手間かからないと思います。 あと私はなくしてしまって調べられないのですがTdirect3DTexture2にViewoTextureというか そんな感じのメソッドがあったような気がしますがあれはどうなんでしょうか?未実装かまったく 用途が違いますでしょうか? 以上推測で書いた上に質問で終わってすいません。http://www.ifnet.or.jp/^rikimaru/
ゲームの効果音として TDXSoundと TDXWaveListを使っています。 window表示のゲームなので、Focusが無くても音が聞こえるように optionsを soGlobalFocus := True soStickyFocus := False soExclusive := False にしているのですが ゲーム起動中に他のアプリケーションで音が鳴らなくなることがあるようです。 (自分の開発環境、2,3人以外では正しく鳴っている) まだ鳴らなくなる人の動作環境をまとめてないので原因が特定できないのですが 同じような状況になったことがある方はいらっしゃいませんか? # カタンの開拓をネットワーク対戦できるようにした「カタソ」 # DelphiX のおかげでなんとか公開することができました :Dhttp://www.page.sannet.ne.jp/aihatena/
RIKIMARU様、いつもありがとうございます。 DirectX7SDKのDirect3D_IMにAVIをテクスチャにしてCubeに表示しているものがありますが、 この要領でやればうまくできそうですが、さっぱりわかりません。 現状のDelphiXでは不可能なのでしょうか?
Hajimemashite. Sumimasen ga, watashi no nihongo wa totemo heta desu ne ^^; (Furansujin desu kara ^^;) Shikashi, yomeru no wa kekkou desu.Nihongo de no henji o shite kudasai. DXTexture example ni yotte, DelphiX de Direct3D IM app o tsukutte mimasu ga, mondai ga arimasu. Z-Buffer ga nakattara, Full Scene ga miemasu kedo, Z-Buffer o juritsu shitara, Screen de wa nanimo ga mienakute shimaimasu (tada DirectDraw de egaita Background ga miemasu). Ano mondai wa Matrox G400 ya Intel i740 dake de okottemasu. TNT2 de wa daijoubu desu ne. Zenzen wakarimasen ^^; Tasukete kudasai ^^;
DelphiXでキャプチャーボードにアクセスしてキャプチャーしてそれを表示 させる方法は、私にはさっぱりわかりません。 キャプチャーカードのメーカーが提供してるSDKとかDirectX MediaSDkとかを調べれば わかるかもしれません。 既にAVIファイルがあってただそれを表示したいだけならTDXDrawはTWinControlを継承 してるのでTMediaPlayerとリンクさせてやれば表示できます。 以上ごみレスでした。http://www.ifnet.or.jp/~rikimaru/
めちゃくちゃ野暮な質問ですが、DelphiXでキャプチャーボードなどからキャプチャー下した動画またはAVIファイルを表示することってできますか?できたらうれしいんですけど...。
PASCLAでDirectXをはじめるにあたって参考になるものとして ここに来てる人なら知ってる人が多いと思いますが SANDMAN氏(http://www.din.or.jp/~hayase/)が作 られたDirectXコンポーネントのHELPも役に立つと思います。 DelphiXと関係なくて申し訳ありません。http://www.ifnet.or.jp/~rikimaru/
RIKIMARU様、レス有り難うございます。 >プログラミングガイドブックはC言語ですがPASCALがわかるならCもすぐにわかるようになると 宇治です。 >思います。内容的にも非常にわかりやすく書かれててあると思います。 >RMがそのほとんどを占めますが IMの基本も書かれています。 了解しました。一度参考にさせていただきます。 有り難うございます。http://member.nifty.ne.jp/jishukan
RIKIMARU様、レス有り難うございます。 >プログラミングガイドブックはC言語ですがPASCALがわかるならCもすぐにわかるようになると >思います。内容的にも非常にわかりやすく書かれててあると思います。 >RMがそのほとんどを占めますが IMの基本も書かれています。 了解しました。一度参考にさせていただきます。 有り難うございます。http://member.nifty.ne.jp/jishukan
Delphi+DelphiXを使っての初めてのソフトが完成しました。 「我慢デモ」です。デモなんですけども。 DelphiX、なんとか画面表示の仕方は少しわかりました。 次は、ゲーム作りに挑戦したいと思います。http://nx.sakura.ne.jp/~fluit/
プログラミングガイドブックはC言語ですがPASCALがわかるならCもすぐにわかるように なると思います。内容的にも非常にわかりやすく書かれててあると思います。 RMがそのほとんどを占めますが IMの基本も書かれています。 立方体の選択はRMを使っておられるようなので堀氏が書かれたFAQを参考にされてはいか がでしょうか? http://www.ingjapan.ne.jp/hori/DelphiXFAQ.htmlhttp://www.ifnet.or.jp/~rikimaru/
RIKIMARU様、レス有り難うございます。宇治です。 >清水亮著 のDirect3Dプログラミングガイドブックがお勧めです これはひょっとしてC言語用ではありませんか。初心者にも分かるでしょうか >これを読めば立方体を表示するなんてことは、あっというまにできてしまいます。 一応、立方体の表示と、回転は、堀さんのsampleソースを参考にして、出来るように なりました。有り難うございます。 但し、以前のupで書いた2番の「画面をクリックしたときに、どの立方体が 選ばれたかを知る方法」が全く分かりません。そのあたり分かりましたら お教え下さい。http://member.nifty.ne.jp/jishukan
RIKIMARUさま、いろいろありがとうございます。 Canvas文字については、Surfaceに描画後Flipしています。これが最適ですね。 Direct3Dの使用ですが、いままでDirectDrawのSurfaceしか使っていなかったので、 結構異なるので苦しんでいます。とりあえずもう少し学習しようと思います。 いづれにしても、Direct3Dのサンプルをフルスクリーンで動かしてみましたが、 現在のビデオボードではカクカク表示です。 ボードの性能の低さもあるようです。
Tdirect3DTexture2を紛失してしまったので もし可能ならもう一度配布してもらえないでしょうか? 無理なお願いかもしれませんが御ひまが取れましたらよろしくお願いします。http://www.ifnet.or.jp/~rikimaru/
立方体の描画ですが 3Dを今からはじめられるようなので まずはDirect3DのRMから はじめられてはいかがでしょうか 清水亮著 のDirect3Dプログラミングガイドブックがお勧めです これを読めば立方体を表示するなんてことは、あっというまにできてしまいます。 RMでクリックした物体をしらべるRayPickという便利な関数もあります。 マウスに合わせては どうあわせるかがわからないとなんともいえないと思います。 右に移動させると右に回転とか。 Canvasに文字をかいてスクロールさせるならば毎回Canvasを使って描かずに一度サーフェイスに 描いてそれをDrawしたほうが早いと思います。すでにされてたり用途が違ってたらごめんなさい。 Intel740はよくわかりませんがやはりAlphaはDirect3Dを使うべきだと思います。 3Dといっても2Dが用途だから、テクスチャもDelphiXが面倒みてくれますし、 DrawAlpha がDrawPrimitiveにかわるだけなので簡単ですよ。http://www.ifnet.or.jp/~rikimaru/
RIKIMARU様、お礼の返事が遅くなり申し訳ありませんでした。 基本的にDirectPlayについて勉強不足なので、今一度勉強しアドバイスを元にいろいろ試して 見たいと思います。 ありがとうございました。 ちょっと質問ですが、DirectDrawでいろいろDrawAlphaなどでエフェクトをかけて 大き目の画像(800x600x16以上)を描画し、そこにCanvasに文字をスクロールしながら 表示をすると今にもとまりそうになります。 やはりこれはグラフィックボードの性能にもよるのでしょうか? ちなみに現在Intel740の8MBです(うう、非力)。 これでFullScreenにしたら...(ToT)
RIKIMARU様、堀様。 お礼の言葉が遅れて申し訳ありません。 RIKIMARU様のアドバイスも役に立ち、 3Dも頑張ろうかと考えている次第であります。 本当にありがとうございました。 堀様のおかげで、問題も解決できました。 私もまだまだ精進が至りませんので、 よろしければ皆々様。 此れからもよろしくお願いします。
いつもDelphiXに感動しています。宇治と言います。 始めてUPさせていただきます。 立方体を使ったゲームを考えています。 初歩的な質問で済みませんが、お教えいただきますでしょうか。 1.一つの立方体を、x(縦)、y(横)、z(高さ)の三次元に積んで 表示する方法を教えて下さい。 2.上記のものの一番上(z方面)から任意に一つ取り出す 方法。つまり画面をクリックしたときに、どの立方体が 選ばれたかを知る方法 3.上記で選んだ立方体を、マウスの移動に合わせて 移動させる方法 4.それを、(x,yの2次元平面)に置いていく方法を教えて下さい。 すべてでなくても、上記のいずれかでも教えていただけますでしょうか。http://member.nifty.ne.jp/jishukan
◆ あかねファンさん >3.TDXImageList では、 TDXDrawSurface以外のサーフェスに >(たとえば TBitmap.Canvasなど)に描画することはできないの >ですか? あと、TDXImageList.DXDraw は『サーフェスの管理も >します』とありますが、サーフェスの設定をしなかった場合、 >具体的にどんな問題が起こりますか?(たとえば、表示速度が落ちるなど) TBitmap.Canvas などに描写したい場合、TDXImageList.Items[x].Picture プロパティを 使って描写してみてはどうでしょうか? あとサーフェィスの設定をしなかった場合は、Draw メソッドなどの TDirectDrawSurface を 対象にして描写するメソッドなどが全て使えなくなります。 ◆ 芭蕉さん >その後でDXDraw.Initialize;を致しますとやっとの事で初期化出来るのですが、 >先ほど記しましたように、画面がバチンと音を立て、切り替わるのでございます。 Initialize メソッドではなく、Restore メソッドではどうでしょうか? パレットを変更したときに色化けしないようにするには Restore メソッドを 呼び出すことで解決出来ると思います。
えるさん、早いレスポンスありがとうございます。 TCXPlayでは複数セッションを作成することができないんですね。 えるさんの言うように、DirectPlayコンポーネント自作、もしくは 直接IDirectPlayを利用してみようと思います。
TDXPlay では複数のセッションやプレイヤーはサポートされていないのでダメです。 手元に、セッション/ロビーセッション/プレイヤーの制御を加えたものがあるんで すが、現在 DirectPlay を使わず TCP/IP を普通に利用するようになったので、ま ともに公開できる以前の形で止まっていたりします (^^; 本人に需要がないのでこれは当面完成しないでしょう (^^; TDXPlay の構造的に TDXPlay を利用してロビー/セッション/プレイヤーを制御す るのはかなり無理がありますので、DelphiX の DirectX Unit を利用した Direct Play コンポーネントを自作するか、直接 IDirectPlay を利用することになると 思います。 コンポーネントを開発するに当たっては DXPlay Unit のコードが充分参考になる でしょうから、かなり楽なんではないでしょうか。
はじめまして、HIROといいます。 DelphiXをありがたく使わせてもらっています。 Inside DelphiXも買いました。(^^) 質問なのですが、DelphiXのDXPlayではひとつのアプリで複数のセッションは作れるのでしょうか? 例えば、プレイヤーが自由にセッションを作れるディアブロのチャットのようにしたいです。 DelphiX付属の「Chat」、「Chat2」のサンプルを見た限りでは、セッションをひとつしか作成することができないようでが・・・。 教えてください、お願いします。m(__)m
IdirectPlay4なのでDirect6以降だと思います。 サンプルを見る限り任意のデータが送れるように見れます。 構造体の最初のメンバをDWORDのメッセージのタイプを表すものにして あとのメンバは自由に取れると思います。 画像のような大きいデータを送るなら圧縮したりデータを分割したり リアルタイムなら 非同期でデータの保証なしで受けて側でデータを補間したり。 差分データだけ送るとか。動画の圧縮など私には手が出せない分野です。 堀氏のTMPEGEncすごいですよね。 このように私には、難しい問題がたくさん有りまたもや レスになっていないのですが 何から手をつければいいのかもし分かってなかったら少しは手がかりになるかもしれないと 思い書きこみました。http://www.ifnet.or.jp/~rikimaru/
素朴な質問ですが、DelphiXのDirectPlayはDirectX6(7)に対応しているのでしょうか? 現在リモートマシンにメインマシンの画像をフルスクリーンで表示しようと思っているのですが、SampleにあるChatを見る限り、テキストしかだめなような感じですが...。 よい方法があったら教えてください。
ビデオはSPECTRA7400なのですが、ドライバを入れなおしてもやはり、ダメです。 3DMARK2000などの、3Dプログラムは正常に動いています。 Delphi5またはDelphiXのインストールミスでしょうか。 Delphi5のインストーラ変でしたし。 もう少し調べてみます。
芭蕉さん すでに試されてたんですね。お役にたてなくて申し訳ありません。 TbitmapのCanvasにはTDXImageListのTPictureで描画できるとおもいます。 色混ぜ描画は,恐らく256色の方法を質問されてると思うのですがもし256色以外なら DrawAdd、DrawSub,DrawAlphaなどで実現できないでしょうか? 方法は変わりますが色混ぜ描画は Direct3Dを使うと高速です。 解決がないレスですがなにかのお役に立てれば幸いですhttp://www.ifnet.or.jp/~rikimaru/
前回は質問にお答えいただきありがとうございました。 今度は質問その2です。 3.TDXImageList では、 TDXDrawSurface以外のサーフェスに (たとえば TBitmap.Canvasなど)に描画することはできないの ですか? あと、TDXImageList.DXDraw は『サーフェスの管理も します』とありますが、サーフェスの設定をしなかった場合、 具体的にどんな問題が起こりますか?(たとえば、表示速度が落ちるなど) 4.TDXImageList では、TImageListのような色混ぜ描画 (DrawingStyle と BlendColor を使う)はできないのですか? そういえば、Surface.Canvas に描画した後は、アンロック (Release)するまでは DXImageListなどで Surface に描画することができないようです。バグかと思いました(^^;;;) 結局、TDXImageList.Items.Picture を直接いじくるようにして 問題2は回避しました。http://member.nifty.ne.jp/AKANEfan/
ヘルプも拝見させていただきました。 しかし、駄目なのでございます。 メイクパレットでパレットを作成し、 アップデートしましても変わらないのでございます。 その後でDXDraw.Initialize;を致しますとやっとの事で初期化出来るのですが、 先ほど記しましたように、画面がバチンと音を立て、切り替わるのでございます。 Inside DelphiXも購入し、何かないかと手探りで探したのですが、 いかんせん小生の技術不足で、解決策が見つけられないのでございます。 そこで、迷惑とは思いますが、どなたかの御知恵を拝借しようと参ったわけでございます。 最後に本当に拙い文章で申し訳ありません。 どうぞ宜しくお願いいたします。
ヘルプに書いてある方法は試されましたでしょうか?http://www.ifnet.or.jp/~rikimaru/
はじめまして 小生は芭蕉と申します。 さて、急に筆を取りましたのは、 大兄達に教えて戴きたいことがあってでございます。 まず始めに小生は、TDXImageListを一つだけ貼り付けて、 そこにプログラムを起動してから、 X.DXGを読み込み、 その X.DXGを使い終わったあとにY.DXGを読み込もうと考えたのですが、 パレットが上手く初期化できません。 DXDraw.Initialize;と書きこめばパレットも初期化できるのですが、 画面がバチンと音を立て、切り替わるのが何とも嫌なのです。 どうかどなたか知恵を御貸し戴けないでしょうか。 重ね重ね不躾ではありますが、 最後に長々と駄文を書いたことをお許しくださいまし。
> Inside DelphiXに添付されているサンプル Wrap が、正常にレダリングされません。 >というか、D3Dはすべて正常にレダリングされません。 症状を見る限り、ビデオドライバのバグのように思えます。特にZバッファ無しで レンダリング出来ないというのは妖しいです。
先日から、DelphiXを導入させていただいたのですが、 ポリゴンにCreateWrapメソッドでマッピング出来ないのです。 Inside DelphiXに添付されているサンプル Wrap が、正常にレダリングされません。 というか、D3Dはすべて正常にレダリングされません。 どうやら、プロパティエディータでDXDrawのZBUFFREをTrueに設定すると、レダリング され、SystemMemoryをTrueに設定すると、ソフトウエアでマッピングされます。 開発環境にはDirectX7がインストールされビデオドライバは最新版を入れています。
あかねファンさん、こんにちは。堀です。 >1.DirectDrawサーフェスのCanvasでは、65536色モードでも > アンチエリアシングのかかった綺麗な文字は表示できないのですか? アンチエリシングがかかるというのは、画面のプロパティの効果タブの 「スクリーンフォントの縁を滑らかにする」を有効にすることで得られる物ですよね。 DirectDrawのCanvasではアンチエリシング効果は有効にならないようです。 元々テキスト描写でアンチエリシングされないのが普通なので仕方ないのかもしれません。 >2.TDXImageListでは通常、全コマいっぺんに取り込みますが、 > TImageListのように Add,AddMaskedを使ってひとコマずつ > 取り込むことはできないのですか? これは出来ません。 >3.表示にDirectDrawを使う場合、作業用画像バッファには TBitmap より > TDirectDrawSurface(もしくはTDIB)を使ったほうが良いでしょうか? これは場合によると思います。私は速度が出るかどうかで TBitmap, TDIB または TDirectDrawSurface と使い分けています。 >Inside DelphiX のCDのセットアッププログラムでもコンパイル中に >応答無しになります(笑)。例によって手動でインストールしました >が、今回はヘルプが統合されて非常に使いやすいです。 DelphiXの付属のツールでコンパイル&登録しようとした場合、 フリーズしてしまうことがあるみたいです。原因が分かれば 修正したいのですが…
私の作ったプログラムの中で一番重かったRPGプログラム(製作中)に、 DelphiXを使うように手を入れているのですが、VCL,GDIでできてDirectX, DelphiXにできない? ことがあるのです。 1.DirectDrawサーフェスのCanvasでは、65536色モードでも アンチエリアシングのかかった綺麗な文字は表示できないのですか? 2.TDXImageListでは通常、全コマいっぺんに取り込みますが、 TImageListのように Add,AddMaskedを使ってひとコマずつ 取り込むことはできないのですか? 3.表示にDirectDrawを使う場合、作業用画像バッファには TBitmap より TDirectDrawSurface(もしくはTDIB)を使ったほうが良いでしょうか? Inside DelphiX のCDのセットアッププログラムでもコンパイル中に 応答無しになります(笑)。例によって手動でインストールしました が、今回はヘルプが統合されて非常に使いやすいです。http://member.nifty.ne.jp/AKANEfan/
毘政さん、こんにちは。堀です。 >いまさら無理かもしれませんが、DirectX5には対応するつもりはありませんか? いまとなっては DirectX5 対応はちょっと無理ですので、お使いのマシンに DirectX6(今はDirectX7) を入れていただくのは無理でしょうか? >また、そういう要望はありませんか? DirectX7対応の要望はかなり来ていますが、旧バージョンの DirectX 対応の要望は あまり来ていません。
初めまして、毘政と申します。 DirectXが使えると思って、喜んで勝ったのですが、使えるDirectXが バージョン6からとのことで、ちょっとがっくりの毘政です。 いまさら無理かもしれませんが、DirectX5には対応するつもりはありませんか? また、そういう要望はありませんか? (Win98のをデフォルトで入れると、DirectX5ですよね。) 以上
>APIのヘルプに下記のようにあるのでnilチエックは、 >自前でやらないといけないのではないでしょうか? ヘルプファイルにちゃんと書かれていたのですね。次期バージョンで 修正します。どうもありがとうございます。
早速のレスありがとうございます。 遅れましたが、明けましておめでとうございます。 LoadRLE4 LoadRLE8を修正してみましたが やはりnilが渡されたときアクセス違反がおこります。 APIのヘルプに下記のようにあるのでnilチエックは、 自前でやらないといけないのではないでしょうか? If the hgblMem parameter is NULL, GlobalFree fails and the system generates an access v- iolation exception. APIをほとんどつかうことがなくメモリハンドルなど の知識が乏しいので勘違いしてたらご指摘お願いします。http://www.ifnet.or.jp/~rikimaru/
Motion Jpegで圧縮されたAVIファイルの変換を行うと映像飛びが起こってしまいます。 どうすればいいでしょうか・・・
明けましておめでとうございます。 今年もよろしくお願いいたします。 ◆ RIKIMARU さん >にしないとGrobalFreeにnilを渡すとシステムアクセス違反を起こすので >FEmptyDIBImage.Freeの時例外がおこります。 >ただ今まで起こってなかったので他のところに原因があったり何かの勘違いだったら >すいません. GlobalFree 自体は nil チェックを行っていると思いますのでそれが原因ではないと思います。 DIB ユニットの TDIBSharedImage.ReadData 関数内の LoadRLE4, LoadRLE8 関数で GlobalAlloc せずに GetMem しているバグがありますのでそれが原因かも知れません。 お手数をお掛けしますが、以下のソースへ置き換えて下さい。>みなさん procedure LoadRLE4; begin FSize := BI.biSizeImage; FPBits := GlobalAllocPtr(GMEM_FIXED, FSize); FBitmapInfo.bmiHeader.biSizeImage := FSize; Stream.ReadBuffer(FPBits^, FSize); end; procedure LoadRLE8; begin FSize := BI.biSizeImage; FPBits := GlobalAllocPtr(GMEM_FIXED, FSize); FBitmapInfo.bmiHeader.biSizeImage := FSize; Stream.ReadBuffer(FPBits^, FSize); end; ◆ えるさん >今年は TOP PAGE で「あけまして」してないんですね (^^; >変更履歴にコソっと書いてあるだけだった。 今年もやろうかと思ったのですが、時間がなくてなくて(^^; ◆ 木村功さん >(キャンバスに描画)−>(画面に転送) >の手順を、単純に DirectX に置き換えると、場合によっては遅くなるというのは驚きでした。 そうなんです。DirectX でキャンバスを使用する場合、普通にキャンバスを使う場合にくらべて ロック-アンロックの作業が必要になってしまいその分遅くなってしまいます。 もし、キャンバスに TBitmap を描写しているのであればそこの部分をTDXImageList コンポーネントを使って描写するように変更してみてはどうでしょうか? ビデオカードが高速ならば大幅な速度アップが見込めると思います。 >あと、ぼくのゲームでは、MIDI音楽とWaveサウンドが鳴っているのですが、 >DelphiX を使うと、Waveサウンドが、こもったような音になるんです。 >これは、どうしてでしょうか。 >ヘルプに、「TDXSound の再生品質を設定する」という項目がありますが、 >これが関係してるのでしょうか。 TDXSound はデフォルトで音質が低くなっていますのでそのせいかもしれませんね。 ヘルプに書かれている通りに再生品質を設定してみてはどうでしょうか。
PCのパワー不足とか? 元のAVIと作ったMPEG2を見て貰うのが一番では? リンクが切れてるというか、現状だとmoemoe.gr.jpのサーバが死んでるような気がします。 昨夜から昼に掛けて、www.moemoe.gr.jp自体にはアクセス出来ましたが、cgi処理は死んでいました。 現在では、サーバ自体にもアクセス出来なくなってます。
TMPGEncの掲示板のリンクが切れているみたいだったのでこちらに書かせて もらいました。
TMPGEncを使ってAVIからMPEG2に変換したのですが映像も音も激しく飛んでしまうのですが... いろいろ試したつもりなんですが直ってくれません。 この解決法を教えていただきたいと思っています。 教えてください。お願いします。
久しぶりにTDXImageListを使うと終了時に例外が発生するので たどってみると destructor TDIBSharedImage.Destroy;で GlobalFree(THandle(FPBits))の所を if Assigned(FPBits) then GlobalFree(THandle(FPBits)) にしないとGrobalFreeにnilを渡すとシステムアクセス違反を起こすので FEmptyDIBImage.Freeの時例外がおこります。 ただ今まで起こってなかったので他のところに原因があったり何かの勘違いだったら すいません.http://www.ifnet.or.jp/~rikimaru/
今年は TOP PAGE で「あけまして」してないんですね (^^; 変更履歴にコソっと書いてあるだけだった。
はじめまして。木村と申します。 最近、書籍の "Inside DelphiX" を購入しまして、第2章しか読んでいないのですが、 大変便利に使わせて頂いてます。 DelphiX の書籍が出たことで、初めてDirectX を使いました。 使用感の報告等したいと思います。 ぼくの作っているソフトウェアは2D系のゲームなんですが、 DirectX さえ使えば、描画が速くなるというような印象があったのですが、 場合によっては、DirectX を使った方が遅くなる時もあり、認識を改めました。 DXDraw1.Flip; (画面に転送)は、速くて、 with DXDraw1.Surface.Canvas do begin ....... end; (キャンバスに描画)が遅いということに気付いて、 キャンバスへの描画を、工夫してなるべく少なくすることで満足な速度を得られました。 その「速度」は、CPU200MHz + メモリー48M のぼくのマシンでは、 「1秒間に30回画面書き換え」程度です。最近のゲーム機の半分程度の速度は出ている 計算になります。 (キャンバスに描画)−>(画面に転送) の手順を、単純に DirectX に置き換えると、場合によっては遅くなるというのは驚きでした。 あと、ぼくのゲームでは、MIDI音楽とWaveサウンドが鳴っているのですが、 DelphiX を使うと、Waveサウンドが、こもったような音になるんです。 これは、どうしてでしょうか。 ヘルプに、「TDXSound の再生品質を設定する」という項目がありますが、 これが関係してるのでしょうか。 それでは、この辺で。 乱文失礼しました。
無事IPの取得ができました。 ありがとうございます。
◆ Haler さん >TDXPlayで通信対応ソフトを作ろうと思っています。相手にIPを教えるため、自分のIPを >ソフトで表示できるようにしたいのですが、どうやって得ればよいのでしょうか? WinSock の GetHostName 関数でマシンの名前を取得し、それから GetHostbyName 関数で 取得した名前をIPアドレスに変換することで出来ます。 私が使用している自作のユニットを以下にアップしました。 http://www.ingjapan.ne.jp/hori/data/SockUtl.zip サンプルは以下の通りです。 uses SockUtl; procedure TForm1.Button1Click(Sender: TObject); begin Caption := IPToString(HostNameToIP(GetLocalHostName)); end; ◆ ぽくむらさん >「Inside DelphiX」って、具体的にどのようなことが >かかれているんでしょうか?知ってる方は教えてください。 とりあえず目次は以下のようになっています。 http://www.shuwasystem.co.jp/books/wwwsrch/cgi-bin/content/952/952_c.htm ◆ あーるさん >この一行を追加しないとうちの環境では正常に動作しませんでした。 どうもありがとうございます。修正しました。 >あと、テクスチャ元の画像を パレットインデックスな DIB で指定したときに >パレットのコピーが行われてないようです。(SetDIB を見る限り) こちらもあわせて修正しました。SetDIB 関数内で FImage2.idx_index := dxtMakeChannel((1 shl DIB.BitCount)-1, True); としているところの次の行に for i:=0 to 255 do FImage2.idx_palette[i] := RGBQuadToPaletteEntry(DIB.ColorTable[i]); を追加して下さい。 ◆ ながたさん >TAudioFileStreamのサンプルプログラムで大きいWAVを演奏させると、稀に途中で >同じところを演奏したりします。 極端に重たい負荷がかかると再生バッファの管理が破綻し、そういう症状が発生します。 回避策としては TAudioStream(TAudioFileStream) の BufferLength プロパティに 大きい値を指定することなどがあります。
こんにちは。Halerと申します。 TDXPlayで通信対応ソフトを作ろうと思っています。相手にIPを教えるため、自分のIPを ソフトで表示できるようにしたいのですが、どうやって得ればよいのでしょうか?
「Inside DelphiX」って、具体的にどのようなことが かかれているんでしょうか?知ってる方は教えてください。http://ueno.cool.ne.jp/pokumura/
TDirect3DTexture2 について、いくつかバグではと思うことがありましたので報告します。 それにしても超高機能なライブラリなのでソースを読むだけで勉強になりますね (^-^) 499 行 からの FD3DDevDesc.dwSize := SizeOf(FD3DDevDesc); FDXDraw.D3DDevice3.GetCaps(FD3DDevDesc, TempD3DDevDesc); ですが FD3DDevDesc.dwSize := SizeOf(FD3DDevDesc); tempD3DDevDesc.dwSize := SizeOf(tempD3DDevDesc); // ←これ FDXDraw.D3DDevice3.GetCaps(FD3DDevDesc, TempD3DDevDesc); この一行を追加しないとうちの環境では正常に動作しませんでした。 あと、テクスチャ元の画像を パレットインデックスな DIB で指定したときに パレットのコピーが行われてないようです。(SetDIB を見る限り)
皆さん、こんにちは。Delphi4用ですが、DirectX7版DirectMusicヘッダを公開しました。よろし かったら使ってみてください。但し、かなりのバグが潜んでいると思われますので、ご使用には十 分に気をつけてください(^^;。バグ等ありましたらメールにてお願いいたします。http://www.infosakyu.ne.jp/~kazuya-y/index.html
皆さん、こんにちは。 TAudioFileStreamのサンプルプログラムで大きいWAVを演奏させると、稀に途中で 同じところを演奏したりします。 プログラムを組んでいて同様の問題が発生した方、なにか解決する方法をご存知の方は いらっしゃいませんでしょうか。
>あーるさん 間違いなくあのKo-Taさんです。グラフィックデザインを見てみると 一発で分かります。それにしてもInside DelphiX、表紙はシブいですし 大量のソースコードに圧巻です。書店でこれを発見した時、思わず手が伸びました。
Impressのコンピューター関連雑誌&書籍新刊一覧のリンクから来ました。 DelphiXの書籍版ですか。う〜ん、期待しちゃうなぁ。(^^) DelphiXに付いてるサンプルだけいじくったことがある程度なんで 書籍の内容にも興味があります。これから書店に行って見ようと思います。 では。
Inside DelphiX ゲットしました!! ■\(゜O ゜)ゞ これからじっくりと読んでいきたいと思います。 ところでグラフィックデザインの Ko-Ta さんて、CJ の Ko-Ta さん?
◆ えるさん あーるさんの仰る通り、DrawAddメソッドなどはすべて16ビットカラー以上でしか 使うことが出来ません。 >過去に Alpha はハードウェアの機能を使っているけど Add は >DelphiX が足しているからとか言う記述があったような気も... AlphaもDelphiXがソフトウェア描写しています。 ◆ あーるさん、BACさん 無事 InsideDelphiXの発売日を過ぎたみたいです(^^; でも私は実物をまだ見ていないのでどのような本になっているのか分かりません(^^;
えるさん こんにちは、あーるといいます。 Add や Alpha はパレット使用(=256色)時には使えないので、Window/Full どちらかの 画面の色数が 256 色になっているのではないのでしょうか。 DXDraw.Display の BitCount を 16 にしてみればうまくいくかもしれません。
if not DXDraw1.CanDraw then exit; with DXDraw1.Surface do begin Fill(0); case 1 of 0: FillRect(Bounds(0, 0, 16, 16), ColorMatch(clRed)); 1: FillRectAdd(Bounds(0, 0, 16, 16), clRed); 2: FillRectAlpha(Bounds(0, 0, 16, 16), clRed, 128); end; end; DXDraw1.Flip; というようなものをタイマーのイベントに書いてあるんですが、 doFullscreen の true/false で挙動が違います。 FillRect は正常なんですが、他は描画してくれません。 何が原因なんでしょう ? 見当がつきません。それとも不具合 ? 過去に Alpha はハードウェアの機能を使っているけど Add は DelphiX が足しているからとか言う記述があったような気も...
NAZOさん、どうもありがとうございます。 AddSearchPathの追加でうまくいきました。 Inside DelphiXですか、もう今日なんですね。
堀さん、こんにちは。いよいよ明日発売ですね。>Inside DelphiX finit について漠然とした質問にも答えてくださってありがとうございました。 おそらくそれほどのオーバーヘッドもないようだし、残しておいた方がいいみたいですね。 余談ですが、"Inside" = SOFTBANK と勝手に思いこんでしまってソフトバンクの書籍情報ばかり チェックしてました。ふむ、秀和システムとわ・・・(^_^;;
AddSearchPathを追加するとうまくいくかもしれません あと場合によっては、 テクスチャコールバックで同じ内容のテクスチャを作らないようにしたほうが 効率的になるとおもいます
◆ あーるさん >うーん TNT いいですねー。うちの G200 はマルチテクスチャ非対応なんです。 >DirectXCapsViewer で調べてみたところ > HAL の MaxTextureBlendStages は 1 --- G200 は非対応 > HEL の MaxTextureBlendStages は 8 --- 最大8段階 >ということで HEL でもマルチテクスチャは使えるみたいです。 G400DH では MaxTextureBlendStages は 3 となっていました。 最大3段階使えるようです。 ◆ コンビナートHさん > 質問なんですが、StretchDrawをクリッピング付きで行いたいのですが、高速化のため >クリッパーを使わないで行いたいんです。 > で、DirectDrawSurface.DrawAlpha などが拡大縮小を行うのに目を付け、Alphaを255に >すればいけると考えたのですが、速度的には疑問が残ってしまいます。 一応 Alpha に255を指定すればブレンド処理は行わないようになります。 でもソフトウェア処理の DrawAlpha メソッドよりはハードウェア転送が行える StretchDraw メソッドの方が高速だと思います。 ◆ TIX さん >DirectSoundですが、非roop再生時に周波数やパン、ボリュームを変更できないものでしょうか。 >もしくはループ時にループ回数を設定できないものでしょうか。 TDXWaveList コンポーネントは簡易化の為、そういうことは出来なくなっています。 TDirectSoundBuffer オブジェクトを自分で作成するしかないと思います。 ・TDXSound の OnIntiailize イベントで FSoundBuf := TDirectSoundBuffer.Create(DXSound1.DSound); ・TDXSound の OnFinalize イベントで FSoundBuf.Free; FSoundBuf := nil; ・TDXSound.OnRestore イベントで FSoundBuf.LoadFromFile(Waveファイル名); として初期化すればいいと思います。 ◆ あーるさん >ただ Delphi3 でのインストールで一つ問題がありました。 >569行 の CreateSurface の引数 ddsd は TDDSurfaceDesc2 ですが、Delphi3 だと > > function CreateSurface(const SurfaceDesc: TDDSurfaceDesc): Boolean; > >となっていてコンパイルエラーとなります。 あら(^^; どうもありがとうございます。 ◆ かっつさん >DelphiXとても素晴らしいです!! 俺をDirectXプログラマにしたんですから・・・。 >応援していますので、今後とも頑張ってください。 どうもありがとうございます (^o^ /
あーるさんこんにちは CapsViewwerでみればいいものを調べてもらってありがとうございます 実はSDKがはいってなかったりする。 ということはやはり私がおかしいということになりますね 見直してみますhttp://www.ifnet.or.jp/~rikimaru/
NAZO さんこんにちは。 うーん TNT いいですねー。うちの G200 はマルチテクスチャ非対応なんです。 DirectXCapsViewer で調べてみたところ HAL の MaxTextureBlendStages は 1 --- G200 は非対応 HEL の MaxTextureBlendStages は 8 --- 最大8段階 ということで HEL でもマルチテクスチャは使えるみたいです。
はじめまして、コンビナートHと申します。 いつも、DelphiXをありがたく利用させてもらってます。 質問なんですが、StretchDrawをクリッピング付きで行いたいのですが、高速化のため クリッパーを使わないで行いたいんです。 で、DirectDrawSurface.DrawAlpha などが拡大縮小を行うのに目を付け、Alphaを255に すればいけると考えたのですが、速度的には疑問が残ってしまいます。 ソースを読んだところ、DrawAlpha内でカスタム描画ルーチンのをバイナリで再構築している らしいところまでは掴んだのですが、それ以上はちと僕のレベルでは読み解けなくて参って しまいました(^^; バイナリを再構築しているということは、アルファ値が255の場合、アルファ合成部を 飛ばして速度を稼いでいるということがあり得ると思うのですが、どうなのでしょうか? しかし、ソース読んでたら、DelphiXは、ホント凄いなと、あらためて感動して しまいました(^^;
DirectX7の簡単なサンプルを公開しました。また、DirectX7の簡易クラスも公開しました(ホン トに簡単なものですが)。ダウンロードは私のHPからできます。http://www.infosakyu.ne.jp/~kazuya-y/index.html
TDirect3DTexture2使ってみました といってもマルチテクスチャで2枚貼りつけてみただけで 新機能であるアルファチャンネルやMIPマップは、まだためしておりません がIDEにも統合されるそうで楽しみにしてます。 DelphiXとは、関係ないですが,マルチテクスチャってHELでも表示されますか? ずっとHALで使ってたので気づきませんでしたがHELにすると真っ白 恐らくどこか間違ってるようなきがしますがなにか情報ありましたら お願いします。ビデオカードは、TNTを使っております。http://www.ifnet.or.jp/~rikimaru/
おひさしぶりです。 DirectSoundですが、非roop再生時に周波数やパン、ボリュームを変更できないものでしょうか。 もしくはループ時にループ回数を設定できないものでしょうか。
堀さんのDirectXヘッダでサポートするまでの暫定版として私的に作成していたDirectX7ヘッダを 公開します。現在のところDirectDraw7とDirect3D7のみのサポートですが、使用の際は堀さんの DirectXヘッダが必要になります。このとき、uses節においてDirectXより後にDirectX7を宣言してください。簡単なサンプルは近日中にアップします。早くDirectX7を使ってみたいという方は 使用してみてください。ダウンロードは下のアドレスから可能です。 http://www.infosakyu.ne.jp/~kazuya-y/program/download/directx7.zip バグや不具合等ございましたらご一報下さい(ていうか既に本人のにでてますが(^^;)。よろしく お願いします。http://www.infosakyu.ne.jp/~kazuya-y/index.html
お世話になってます。DirectPlay6のAsync対応で通常なら問題なく通信できています。 現在 DirectPlayでは一定時間通信できなかった相手を自動的に deleteするように なっているようですが (break pointを設定して止めたりすると切れますよね) 帯域の細いプロバイダの playerとの通信が一時的に途切れた場合に、timeout待ち時間を 今より長く設定するということはできるのでしょうか? 短いときは 1分待たずに OnDeletePlayer が発生してしまいます。 DirectX6.1の documentで「timeout」を見ても SendExのパラメータ説明しか見つからず DelphiXではサポートしないデバイスのために 0 にしていますので、DirectPlay内部で 決めてしまっている値かもしれませんが.. もし設定方法がありましたらご教授願えませんでしょうか _o_
堀さん、こんにちは。いつもお世話になっておりますあーるです。 Inside DelphiX」(でしたよね?)楽しみにしてます。 >アルファチャンネルを持ったテクスチャがくるくる回るサンプルが付いてきます。 おーぐるぐるまわるー (^o^)(@o@)(◎.◎)(Θ_Θ)・・・ばたっ ρ うちの環境(Win98+DX7+G200)では問題なく回ってくれました。 ただ Delphi3 でのインストールで一つ問題がありました。 569行 の CreateSurface の引数 ddsd は TDDSurfaceDesc2 ですが、Delphi3 だと function CreateSurface(const SurfaceDesc: TDDSurfaceDesc): Boolean; となっていてコンパイルエラーとなります。 Delphi4 ではきちんとオーバーロードされるので問題無しです。 追伸 D3DLIGHT_RANGE_MAX が定義されていないみたいです。 自分で定義すればいいだけの話ですがいちおーご報告いたします。
CollisionMapの件ですが、Collisioned := Trueになってませんでした。(^_^;; 超マヌケなお騒がせで誠にすみませんでした。m(__)m DelphiXとても素晴らしいです!! 俺をDirectXプログラマにしたんですから・・・。 応援していますので、今後とも頑張ってください。 では、また来ます。
迷路的なゲームを作ろうと思っています。 CollisionMapを使ってマップ(TBackgroundSprite)と自キャラ(TImageSprite)の衝突判定を させたいのですが、このような用途にCollisionMapは使えますか? 色々やってみたのですが、どうにも衝突せず、ただの背景にしかなりません。 TImageSprite同士の衝突はできました。 マップもTImageSpriteで書かなければいけないのでしょうか? それじゃ、CollisionMapって一体?
TDirect3DTexture2 の試作版をアップしました。 アルファチャンネルを持ったテクスチャがくるくる回るサンプルが付いてきます。 最新のビデオカードで無いとうまく動かないと思います(^^; また簡単な説明を書いた Readme.txt も同梱しました。 http://www.ingjapan.ne.jp/hori/data/DXTexture.zip 758KB もありますのでご注意ください(^^; この試作版を見てどこをどうしたらいいなどのアドバイスを頂けるととても嬉しいです(^^ ■ ぽくむらさん >通信対戦対応を目指してDXPlayを使っていたんですが、 >「相手の受信が完了した」ときを知ることはできるのでしょうか? 私は DirectPlay に精通していませんのでよく分かりませんが、 ちゃんと受信したよというメッセージを送る方法はどうでしょうか(^^; DirectPlay にもしかしたらそういう機能があるのかもしれません。
どうも、堀さん。 通信対戦対応を目指してDXPlayを使っていたんですが、 「相手の受信が完了した」ときを知ることはできるのでしょうか? 「送信が完了したとき」に発生するイベント「OnCompleteSned(?)」は ヘルプに載っていないみたいだし、そのイベントに「SnedTime」という パラメータが含まれていて、「送るのにかかった時間」だと 思うのですが、常に「0」となっています。 間違ってるところがあるかもしれませんが、 このことについて詳しいかたは、何かアドバイスをお願いします。http://ueno.cool.ne.jp/pokumura/
どうも、みなさん解答ありがとうございます。 テクスチャに関しては、僕の予想、全然外れてましたね。へへ。 でも、バグということで諦めが付きました。 堀さん、新しいヴァージョンとDelphiX公式本を期待しています。 Fogに関してですが、D3DTLVertexを使用した場合は アールさんの方法でうまく行きました。流石です。(^^ rhwに従ってきちんとフォグが現れました。 ただ、D3DVertexを使用した場合は相変わらず真っ白です。 なんか、これは単に僕のフォグに対する認識が間違っている 可能性が高いです。もうちょっとSDKヘルプ読みながら、勉強してみます。 みなさん、本当にありがとうございました。 短期間にどばっと書きこみをして、気分を害した人も いらっしゃるかも・・・すいませんでした。
◆ NAZO さん >でもアルファチャンネルもサポートする新しいクラスは期待してます さらにミップマップもサポートしていますが、これはあまり使わないかもしれませんね。 アルファチャンネルやミップマップを使用するには独自形式のテクスチャファイル形式(*.dxt)で 画像を保存する必要があります。 従来の TDIB オブジェクトや TBitmap オブジェクトを使用した場合、アルファチャンネルなどは 一切使用できなくなります。 >IDirect3dRMFrame3のGetTransForm引数が間違ってるようです どうもありがとうございます。 ◆ あーるさん >TDirect3DTexture のバグってどんなものなんでしょうか。 >私の環境だととりあえず問題なしなんですが・・・ >TextureHandle を使わなければ大丈夫とかそういう類のバグでしょうか。 テクスチャサーフェースに画像データを書き込むのに、キャンバスを利用しているため ビデオカードによっては正常に書き込まれないことがあります。 TDirect3DTexture2 では Lock して書き込んでいるため、そういう不具合は発生しません。
私もテクスチャは特に問題なくつかえております でもアルファチャンネルもサポートする新しいクラスは期待してます DirectX7になってRMとIMの相性がますます悪くなっていまさらのようですが 使い方によってはまだ使えると思います。 それにRMを先ににやっておくと オブジェクトはこうやって管理すればいいのか などと勉強になりますしね。 しかし同じ機能でRM並みの速さは私にはむりなようです RMのソースコードが公開されたらすごいと思います アセンブラとかでゴリゴリかいてある 部分多そうで私には、読める部分少ないかもしれないですけど...... 話はそれましたが IDirect3dRMFrame3のGetTransForm引数が間違ってるようです それでは新しいバージョン楽しみにしてます
堀さん、こんにちは。 TDirect3DTexture のバグってどんなものなんでしょうか。 私の環境だととりあえず問題なしなんですが・・・ TextureHandle を使わなければ大丈夫とかそういう類のバグでしょうか。
Koji さんこんにちは。 ちょっとやってみたところ、 SetRenderState(D3DRENDERSTATE_FOGENABLE,Integer(True)); SetRenderState(D3DRENDERSTATE_FOGColor,$FFFFFFFF); SetRenderState(D3DRENDERSTATE_FOGTableMode,integer(D3DFog_Linear)); l:=0.1; SetRenderState(D3DRENDERSTATE_FOGTableStart,DWORD((@l)^)); l:=0.9; SetRenderState(D3DRENDERSTATE_FOGTableEnd,DWORD((@l)^)); こちらではこんな感じでフォグがかかるようになりました。
実は TDirect3DTexture オブジェクトは、DirectX 3 向けに作られています。 DirectX5 以降の環境で実行するとテクスチャイメージがおかしくなってしまいます。 現在、新しいテクスチャクラスとなる TDirect3DTexture2 オブジェクトを作っています。 これは DirectX6 でも正常に使えることと、アルファチャンネルもサポートします。
えと、コードをコピーしますと、 var l:single; p:^DWORD; l:=0.3; p:=@l; DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGENABLE,Integer(True)); DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGColor,$FFFFFFFF); DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableMode,integer(D3DFog_Linear)); DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableStart,700); //DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableStart,p^);か? l:=0.8; DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableEnd,1000); //DXDRaw.D3DDevice2.SetRenderState(D3DRENDERSTATE_FOGTableStart,p^);か? と、これだけしか設定していないのですが、どうでしょうか? FogStartとFogEndには視点からの距離を入れれば良いのですよね?
あーるさん、お返事ありがとうございます。 UV座標の方は、一応0から1の間に設定しておきました。 しかし、やっぱり暗号化されてしまいました(^^; ただ、今日も格闘していて、 原因がわかったような気がします。(素人なので、いい加減ですが) TextureのGraphicのPixelFormat(8Bitとか16Bitとか)とDisplay のBitCountが異なっていると、正しく表示されない気がします。 DelphiXかDirectXの内部でうまく対処してくれているんだろうな、 と勝手に思っていましたが、違うみたいですね。(常識かも・・) 読み飛ばしていた参考書のTextureのページを見ながら、対策を練ってみます。 何か、いい対処方法があったら、教えてくださいね。
テクスチャのUV座標は (0,0) - (1.0,1.0) で指定します。 つまり右下が tu:= 1.0; tv:= 1.0; となります。 vertex.tu:= 128 とやってしまうと、マジで暗号化されたみたいになりますね(今やってみた)。
Koji さん、こんにちは。自信ないですがいちおー テクスチャのUV座標はちゃんと設定されてますでしょうか それと、テクスチャ関連のレンダリングステートは一通り初期化しておいた方がいいと思います。 フォグについてはすいません全然わからないです。 一度該当部分のコードをアップしていただければ少しはわかるかもしれません。
えと、おかげさまで、TDirect3DTextureが作成出来たのですが、 Textureがめちゃくちゃに表示されてしまいます。 なんか暗号化したみたいになってしまいました。 原因がわかる方、どーか教えてください。 InitialSurfaceでTextureを作成後、いきなり DxDraw.D3DDevice2.SetRenderState(D3DRENDERSTATE_TEXTUREHANDLE,Tex.Handle); と設定して、描いて見たのですが、駄目なんでしょうか? あと、Fog効果を付けようとしたのですが、うまく行きません。 IMモードでSetRenderStateを用いて、FogEnableをTrue、 FogColorを$FFFFFFFF、FogModeをLinear, FogStartを700、FogEndを1000に設定し描画してみました。 視点(0、-500、500)から(0,0,0)を中心とする 一辺が200の立方体を見たところ、真っ白けになってしまいました。 FogStart,Endをいろいろ変えてみましたが、 結果は変わらず、真っ白け。 僕の頭も真っ白け。 どなたか、お教え願います。
あーるさん。解答ありがとうございます。 GraphicをDxDrawのFinalizeで解放したら、うまく行きました。 また、ViewPortなどの変数もFinalizeでnilを代入したら、 エラーが出ませんでした。 なんか、あっさり行きすぎて拍子抜けです。 4時間も悩んだのに・・・ 流石です。ありがとうございました。(^^
Koji さん、はじめまして。あーるといいます。 TDirect3DTexture でテクスチャ元に指定する画像は解放しちゃだめです。 フォームのメンバ等に保存しておいてテクスチャの解放時まで保持し続けなくてはいけません。 あと、Viewport とかはインターフェイス型ですので、自動的に解放処理が呼ばれてこまるという ときには TDXDraw.FinalizeSurface イベントあたりで Viewport:= nil としてあげればエラー が出なくなると思います。
連続投稿失礼します。 ViewPortやLight,Materialを作成するときに、変数を グローバルにすることは出来ないのでしょうか? ViewPort:IDirect3DViewPort3;などの宣言を フォームのPublic部や、インプリメンテーション以下に 置くなどすると、アプリケーション終了時に エラーが発生します。 こちらも、とんでもなく馬鹿な質問だったら、勘弁してください。
はじめまして。 DelphiMLでDelphiXの文字を見つけ、早速インストールしてみました。 取り合えずDirectXは全然分からないので、 参考書に従ってDirect3Dの勉強をしていったのですが、 Textureで壁にぶつかりました・・・ 過去ログを見てみると、TDirect3DTextureというクラスがあるらしいので、 「取り合えず、Createしてみるかな?」と思って、Createしてみたのですが、 必ず読みこみ違反を起こします。 なにかとんちんかんなことを言っているのかもしれませんが、 Textureの使い方をどなたか教えてもらえませんか? ソースは以下の通りです。 procedure TForm1.DXDraw1InitializeSurface(Sender: TObject); var Tex:TDirect3DTexture; Temp:TBitMap; begin Temp:=TBitMap.Create; Temp.LoadFromFile('test.bmp'); Tex:=TDirect3DTexture.Create(Temp,DXDraw1); Temp.Free; end; この手続きを抜けた後に、エラーが発生します。 ちなみに、FormはTDXFormに変換しており、DXDrawコンポーネントのみ 貼りつけて、イベントはOnInitializeSurfaceのみ使用しています。
DXSpriteで、半透明処理というのは出来るのでしょうか? すべて同じ値ではなく一個一個別々に透明度を指定できるとうれしいのですけど。
DXInputを使った 格闘アクションゲームのβ版を ページにアップしました。 例の、スタッフロールに堀さんの 名前が出てくるやつのネット公開版です。http://ueno.cool.ne.jp/pokumura/
堀さん、ありがとうございました。 11月下旬〜12月上旬ですね。楽しみにしています。
堀さん、お早いお返事どうもありがとうございます。 おかげさまでうまくいきましたし、 ソースもだいぶすっきりしました。 どうもありがとうございました。
堀さん、あーるさん、ご丁寧なレスありがとうございました。 ピクセル判定はちょっとあきらめ、あーるさんのサンプルソースを参考に、矩形判定を改造して 利用させていただくことと致しました。 今更言うのもなんなんですが、いやぁDelphiXはよく出来てますね。 今後の更なる拡張を期待しております。(^o^ )DX7も〜! では、これにて。
◆ BAC さん >「Direct3D プログラミングガイドブック」のサンプルを追いながら勉強しているのですが、 >RMとIMの統合である、P342〜のサンプルがうまくいきません。 >CreateUserVisualで登録したDestroyMyVisual関数がプログラム終了時に何回も >呼ばれてしまうようで、 >DestroyMyVisualで FreeMem(arg) した場合は2回目以降で「無効なポインタ操作」、 > 〃 で何もしていないときでも何度も関数が呼ばれ、そのうち >「スタックオーバーフロー」となってしまいます。 説明書には書かれていませんが、DelphiX には TDirect3DRMUserVisual クラスなるものが あります。 TDirect3DRMUserVisual クラスは継承して DoRender メソッドをオーバーライドして ここにコールバックの処理を記述するという形を取ります。 TDirect3DRMUserVisual のソースコードが参考になると思います。 >#私もDelphiX本楽しみにしています。 どうもありがとうございます (^^ / ◆ toshi さん >以前この掲示板で、Inside DelphiXの話が出ていましたが >いつ頃の発売になるのでしょうか?(8月初旬頃に本屋さんに聞いたら10月頃といわれました) 11月下旬〜12月上旬に発売予定です。大幅に遅れてしまいすみません。 ◆ zAzo さん >次に、ピクセル単位で衝突判定をさせた場合、キャラクターが次から次へとめまぐるしくアニ >メーションしていると、かなりの確率で衝突判定抜けを起こしてしまうのですが、これはどう >してなのでしょうか? あまりにもアニメーションが速すぎるため、非透明色同士の重なりが発生しにくいなどが 考えられますね。 ◆ ぽくむらさん >ちなみに、現在作成中の >「二代目 NaGu-Ru」のスタッフロールで >「DelphiX(by 堀 浩行)」と >出させてもらってます。よろしいですよね? 全然オッケーです〜 (^^ /
zAzo さんこんにちは、あーると言います。 判定用矩形のサイズを設定する機能は、生の TSprite にはなかったと思います。 もっともスプライトの衝突判定機能を使うには TSprite の派生クラスを定義する のが普通なので、その際に自分でそういう機能を組み込んでしまうのが良いのでは ないでしょうか。例えば、 TMySprite = class (TSprite) private fCollisionRect: TRect;//衝突判定用矩形。原点はスプライトの左上座標 protected function TestCollision(Sprite: TSprite): Boolean; override;//詳しい衝突判定をおこなう public property CollisionRect: TRect read fCollisionRect write fCollisionRect; end; のようにして、実際のチェックは function TMySprite.TestCollision(Sprite: TSprite): Boolean; var rc: TRect; begin rc.Left:= Trunc(WorldX) + fCollisionRect.Left; rc.Top:= Trunc(WorldY) + fCollisionRect.Top; rc.Right:= Trunc(WorldX) + fCollisionRect.Right; rc.Bottom:= Trunc(WorldY) + fCollisionRect.Bottom; Result:= OverlapRect( rc, Sprite.BoundsRect); end; テストしていませんが、こんな感じで大丈夫かと思います。
かさねてすみません。 一応環境を書いておきます。 ハード: Windows98 + ViperV770 ソフト: Delphi 5.0 Pro + DirectX 7.0 + DelphiX 1999/09/23
初めまして、最近DelphiXでDirect3Dプログラミングを始めた者です。 「Direct3D プログラミングガイドブック」のサンプルを追いながら勉強しているのですが、 RMとIMの統合である、P342〜のサンプルがうまくいきません。 CreateUserVisualで登録したDestroyMyVisual関数がプログラム終了時に何回も 呼ばれてしまうようで、 DestroyMyVisualで FreeMem(arg) した場合は2回目以降で「無効なポインタ操作」、 〃 で何もしていないときでも何度も関数が呼ばれ、そのうち 「スタックオーバーフロー」となってしまいます。 ここで聞くべき質問ではないかとも思いましたが、 Delphi + Direct3Dの書籍として活用されている方が多いかと思い、投稿させていただきました。 #私もDelphiX本楽しみにしています。
こんにちは、堀さん はじめまして 、いつも楽しくDelphiXで遊ばせていただいております。 以前この掲示板で、Inside DelphiXの話が出ていましたが いつ頃の発売になるのでしょうか?(8月初旬頃に本屋さんに聞いたら10月頃といわれました) 差し支えなければ教えてください。ソッコーでGETしたいです。 それでは
DelphiX いつも愛用させて頂いてます。 お久しぶり(始めまして)です。zAzo@おやじプログラマーです。 さて、私事ではありますが、最近ようやく暇になってきたので、そろそろDelphiXで2Dゲーム でも作るかな!? と思って勉強を始めたところ、衝突判定について気になったことがあった ので是非とも教えてください。 まず初めに、矩形による衝突判定を行わせる場合、矩形のサイズを自由に設定することは出来 るのでしょうか? ほとんどのキャラクターは、イメージサイズより数ドット小さめに作られ るので、矩形サイズ=イメージサイズ だと、あたり判定がシビアになりすぎるのです。 次に、ピクセル単位で衝突判定をさせた場合、キャラクターが次から次へとめまぐるしくアニ メーションしていると、かなりの確率で衝突判定抜けを起こしてしまうのですが、これはどう してなのでしょうか? 以上2点です。では、よろしくお願いいたします。
あらら、早くも間違った事書いてしまいました。 早速修正しました。堀さん、ご指摘大感謝です (._.)ペコッ
ちなみに、現在作成中の 「二代目 NaGu-Ru」のスタッフロールで 「DelphiX(by 堀 浩行)」と 出させてもらってます。よろしいですよね?http://ueno.cool.ne.jp/pokumura/
DelphiX に関係することならどんどん宣伝しちゃってください〜 >DelphiX で Direct3DIM を利用するための簡単なサンプルと解説を下の URL にて公開しています。 >まだまだ未完成ですが、IM の使い方がわからないと言う方には役に立つのではと思っています。 おおそれは楽しみです(^^ / >ご意見ご感想お待ちしてます。 TDXDraw コンポーネントの OnInitialize イベントで CreateViewport しているようですが、 D3DDevice は DDraw ではなく、Surface と結びついていますのでサーフェースをリサイズしたときに 問題が発生してしまいます。 OnInitialize イベントではなく、OnInitializeSurface イベントを用いて下さい。 これならサーフェースが作成される度に、つまり D3DDevice が初期化される度に 呼び出されますので。
ども、堀さんと密かに相互リンクさせてもらっている、あーるです。 DelphiX で Direct3DIM を利用するための簡単なサンプルと解説を下の URL にて公開しています。 まだまだ未完成ですが、IM の使い方がわからないと言う方には役に立つのではと思っています。 ご意見ご感想お待ちしてます。http://www2s.biglobe.ne.jp/~t_harada/delphi/delphix/tech1.html
DelphiX 付属のインストーラを修正したものをアップします。 この発言の最後にあるファイルを DelphiX\Bin フォルダに解凍して下さい。 ◆ えるさん >最初の「ヘルプを登録する」をチェックしていたのですが、何がどう >登録されたのやら ? ヘルプはコンパイルに成功しないと登録されません。今回アップしたインストーラは コンパイルに失敗しても登録されるようにしました。http://www.ingjapan.ne.jp/hori/data/DelphiXInstall2.zip
Delphi5 は無事認識したようです。 コンパイルに失敗しました、自分でコンパイルしてください。 とは言われてしまいましたが(^^; 自動的に起動した Delphi5 で、自動的に Delphi5_for5.dpk が開か れた状態から、「インストール」ボタンを押すだけでインストールは 成功したようです。 最初の「ヘルプを登録する」をチェックしていたのですが、何がどう 登録されたのやら ?
DelphiX 付属のインストーラを修正したものをアップします。 以下のファイルを DelphiX\Bin フォルダに解凍して下さい。http://www.ingjapan.ne.jp/hori/data/DelphiXInstall.zip
ひょっとして Windows NT 上で管理者権限がないユーザーでインストールしていますか? >存在します。想像するに TRegistry.Openkey を使われている ? >TRegistry.OpenKeyReadOnly で開かないと raise Exception しちゃいますが(^^; こちらでは IniFile := TRegIniFile.Create('') したあと IniFile.RootKey := HKEY_LOCAL_MACHINE; IniFile.OpenKey('Software\Borland\Delphi', False); していました。OpenKeyReadOnly を使うように変更してみます。 ># こんな基本的なことぢゃなければなんだろう (^^; >## パンピー(死語) に LOCAL_MACHINE の write 権限はないです... 死語のためかパンピーの意味が私には分かりません(^^;
>>というわけで、さっそくダウンロードして、Install_for5.exe を実行すると >>「Borland Delphi5 がインストールされていません」 >>とか出てしまいました (^^; > おや? おかしいですねぇ。 > インストーラはインストールされているかいないかをレジストリの > [HKEY_LOCAL_MACHINE\Software\Borland\Delphi\5.0]キーが存在するかで判定しているのですが、 > レジストリエディタで見ても存在していますでしょうか? 存在します。想像するに TRegistry.Openkey を使われている ? TRegistry.OpenKeyReadOnly で開かないと raise Exception しちゃいますが(^^; # こんな基本的なことぢゃなければなんだろう (^^; ## パンピー(死語) に LOCAL_MACHINE の write 権限はないです...
◆えるさん >最新版のアップデートを見落としていたようです。 >というわけで、さっそくダウンロードして、Install_for5.exe を実行すると >「Borland Delphi5 がインストールされていません」 >とか出てしまいました (^^; おや? おかしいですねぇ。 インストーラはインストールされているかいないかをレジストリの [HKEY_LOCAL_MACHINE\Software\Borland\Delphi\5.0]キーが存在するかで判定しているのですが、 レジストリエディタで見ても存在していますでしょうか? もし存在していなかった場合は以下のキーをレジストリエディタでファイルに書き出して 私に送ってもらえないでしょうか? HKEY_CURRENT_USER\Software\Borland HKEY_LOCAL_MACHINE\Software\Borland #私の環境は一回 Delphi 5 ベータ版をインストールしたことがありますのでレジストリに #変な残骸が残っているのかもしれません。 >readmej.txt ですが、 どうもです。修正しました。 ◆ あかねファンさん >長いディレクトリは作ってないつもりなんですが DelphiX のディレクトリだけではなく、Delphi がインストールされている ディレクトリも長いと失敗することがあります。
インストーラーと同じ状態になるかどうかはわかりませんが、手動でヘルプを統合することもできるはずです。 手順としては、 ($Delphi)\Help\delphi4.cnt をテキストエディタで開き、末尾に下の二行を追加 ( ($DelphiX) は DelphiX をインストールしたディレクトリ) ------------------ :Index DelphiX=($DelphiX)\Help\DelphiXj.hlp :Include ($DelphiX)\Help\DelphiXj.cnt ------------------ こんな感じでOKだと思います。 Delphi4 以降なら OpenHelp を使うのが一番良いかもしれないです。
最新版のアップデートを見落としていたようです。 というわけで、さっそくダウンロードして、Install_for5.exe を実行すると 「Borland Delphi5 がインストールされていません」 とか出てしまいました (^^; readmej.txt ですが、 >2.DelphiX を利用するにあたって > 利用するには下の3つが必要になります > ・Borland Delphi 3 あるいは 4 > ・DirectX 6 ランタイム 3 つ...2つですよね and Delphi5 がない (^^; とりあえず、手動で delphiX_for5.dpk を開いて、DelphiX.dpk で名前を付けて 保存し、コンパイル・インストールできました。 あかねファンさんも言われていますが、私もインストーラが Help をどうしてい るのはか興味あります。一度もインストーラでインストールできてないので (^^; ツールに登録するには、プログラムには winhlp32 を指定し、実行時引数に、 D:\Projects\libDelphi\DelphiX\DelphiXj.HLP などと指定すれば OK です。
B:\DelphiX\Bin>dir ドライブ B: のボリュームラベルは DATA ボリュームシリアル番号は 3C16-19F7 ディレクトリは B:\DelphiX\Bin . <DIR> 99-09-30 20:30 . .. <DIR> 99-09-30 20:30 .. INSTAL~1 EXE 22,016 99-09-12 6:42 Install_for4.exe INSTAL~2 EXE 17,920 99-09-12 6:42 Install_for3.exe 2 個 39,936 バイトのファイルがあります. 2 ディレクトリ 1,556,996,096 バイトの空きがあります. B:\DelphiX\Bin> >堀 さん >インストーラはレジストリ操作も行っていますので、 では、インストーラを使わずに.dpkを開いてコンパイル・インストール して問題ないんでしょうか? インストーラが正常に動いた場合、ヘルプはDelphiヘルプに統合される んでしょうか? 今のところ、DelphiX.hlpをダブルクリックして起動 しています(ちょっと不便)。[ツール(T)]に登録しようと思いましたが、 無理でした。……あ、これはDelphiじゃなくて、ランチャーとか 「クイック起動」に組み込めばいいのか(笑)
堀さん、さっそくのDelphi5対応に感謝します。 インストール時に「自分でコンパイルしなさい」旨のメッセージがでましたが、 別に苦労することなくインストールできました。 サンプルもちゃんと動いています。 報告とお礼まで・・・
掲示板と過去ログのページにある分との 間のログをお持ちの方はいらっしゃいませんでしょうか。 とっておいたファイルをなくしてしまったようで・・・ どなたか、いただけませんでしょうか。 お願いします。
◆ えるさん >こっそり delphi5 への正式な対応を待ってたり... ># 言わないと伝わらないし、書いておこう。 DelphiX 99.09.23 で Delphi 5 に正式に対応しましたが、正常に動かないなどの 不具合があるのでしょうか? ◆ ぽくむらさん >DelphiXのインストールは、 >Delphiが入っているディレクトリのパスが >短いと割とうまくいくようです。 その通りですね。インストーラは内部で dcc32.exe を呼び出しているのですが、 パスが長いとコマンドラインの255文字制限を越えてしまいうまくいかなくなってしまいます。 >送れましたが、30KHit突破おめでとうございます。 >これからもますますのご発展を...。 >DirectX7が出たみたいですし。 どうもありがとうございます(^^ ◆ 黒鳩さん >早速ですが、DelphiXでは、ワイプは使えないのですか? >わかる人がいたら教えていただけると幸いです。 >ワイプのアルゴリズムも解らないのでお願いします ワイプとはどういうものなのでしょうか? ◆ あかねさん >できれば、インストール用のexeプログラムの他に >「実行するとソースをコンパイルしてくれるバッチファイル」 >も提供して頂けるとありがたいのですが。 それはちょっと無理だと思います。インストーラはレジストリ操作も行っていますので、 バッチファイルではちょっと力不足だと思います。 ◆ えるさん >あまり TDXPlay が複雑になるのも「とりあえず簡単に使える」という現状に対して良 >く方向だと思うので、別コンポーネントとして今からまとめてみます(^^; 私もその方がいいと思います(^^; ◆ kana さん >というわけでDelphi5への対応を期待したいのですが、 >堀さんはDelphi5使う予定ありますか? DelphiX 99.09.23 で Delphi 5 に対応しました。 ◆ あーるさん >やっぱり TMPGEnc に魅せられた方がほとんどなんでしょうか。 >30万 Hit おめでとうございます。 どうもありがとうございます〜
DXFファイルをXファイルに変換したいのですが、良いツールを 知りませんか?たしかSDKに入っていたような気が・・・ よろしければメールで送って頂けませんか?
D5に対応してるようですが ひょっとして正式じゃなかったのかな
こっそり delphi5 への正式な対応を待ってたり... # 言わないと伝わらないし、書いておこう。 Win2K RC1 で DirectInput がまともに動かないので難儀してます(T-T
DelphiXのインストールは、 Delphiが入っているディレクトリのパスが 短いと割とうまくいくようです。 ...手動インストールができたみたいなので、 必要ないかな(^^;)http://ueno.cool.ne.jp/pokumura/
DelphiXはすごいですねぇ 自分は16歳の高校生です。 早速ですが、DelphiXでは、ワイプは使えないのですか? わかる人がいたら教えていただけると幸いです。 ワイプのアルゴリズムも解らないのでお願いします
.dpkを開いて「コンパイル」→「インストール」としたらできました。 ありがとうございます>あーる さん でも、ヘルプが統合化されないのが残念ですね。 私もDelphiでゲームを作っているので、早いとこ DirectXに対応させたいです。 #おおっポリゴンがぐるぐる回る〜〜
こんにちは、あーるといいます。 手動インストールですが $(DelphiX)\Source フォルダに有る DelphiX_for3.dpk という ファイルを Delphi で開くとパッケージエディタというウィンドウが出てくるはずです。 それのインストールボタンを押せば、あとは自動的にコンパイル、インストールされると思います。 うちは Delphi4 なんで間違えていたらすみません。
DelphiX のインストールにはどれくらい時間が かかるのでしょうか? 私が使っているのは Delphi3 なので 3用の インストーラを実行したのですが、[実行]ボタンを 押しても反応がありません。正確に言えば、 カーソルが砂時計に変わったまま、何の反応も しなくなります。30分待っても変化が無かったので (おまけに 強制終了ダイアログを開くと「応答なし」 になっている)あきらめたんですが、もっと時間が かかるものなんでしょうか。 ……と思いながら過去ログを見ると、結構発生してる じゃありませんか(涙)。インストーラを使わない場合、 どうすれば DelphiX が使用可能になるのでしょうか。 (できれば readme に書いて欲しいです) できれば、インストール用のexeプログラムの他に 「実行するとソースをコンパイルしてくれるバッチファイル」 も提供して頂けるとありがたいのですが。 長文で失礼しました。
プレイヤーの削除は IDirectPlay4.DestroyPlayer(ID: TDPID); です(^^; 自爆および、ホストからの強制削除ができます. TDPlaySession は TCollectionItem 派生だったのを TPersistent に変更したので ちょっと困ったことになってます(^^; 「ちょっと触った」で済まない状態になりつつあるので TDXPlay をほとんどコピーし た違うものを作成してしまうほうが TDXPlay に変に依存しなくていいかもしれないで すね (^^; あまり TDXPlay が複雑になるのも「とりあえず簡単に使える」という現状に対して良 く方向だと思うので、別コンポーネントとして今からまとめてみます(^^;
愛用させて下さい(^^; そういえば以前に使ったときに欲しいな〜と思った機能がユーザーのkickなのですが、 これってできないんでしょうか?DirectPlayにはそんな機能ないのかな。 #3Dサウンド、がんばって勉強してみます(^^;
Delphi5手に入れました。 残念ながら、DelphiXのインストールには失敗。 DirectX.pasでコンパイルエラーになってしまいました。 (あまり中身を見ずにその場しのぎの修正をかけたところ、インストールは出来たのですが、やはりちゃんと動いてくれませんでした。) というわけでDelphi5への対応を期待したいのですが、 堀さんはDelphi5使う予定ありますか?
1 つ実現できると, また別の機能を求めてしまうもので(^^; DirectPlay を利用した 3 人以上のゲームの場合には ・ブリーフィングルームで待機、面子の確認や Chat による打ち合わせ ・ゲームの開始 という過程をたどることが多いと思いますが、これを DelphiX でやろ うとすると、ゲーム開始後にも接続してくる人が居てちょっと面倒が発 生します. そこで、「新規参加禁止」や「MaxPlayers の動的な変更」などの機能 を TDXPlay につけたくなりました. 適当に変更したものを URL に入れておきます。こんな感じはいかがで しょう ?http://www.din.or.jp/~saepro/delphi/dx/
DirectX6 のヘルプから「DirectSound」->「DirectSound の要点」とひくと ・DirectSoundの3Dへの応用 という項目があります、そのリンクをたどると :: DirectSoundにより、アプリケーションは音源やリスナーの見かけの位置 (定位) :: や方向を変更できる。さらに、ドップラーシフトを使って音源とリスナーの相対 :: 速度も示唆できる。 と、あります. さらに子項目として「Direct3D への統合」「モノラル音源とステ レオ音源」「音源位置の認識」があり、参考項目に「DirectSound 3D バッファ」 「DirectSound 3D リスナー」とありますので、DirectX6 で可能だと思います。 # いや、DirectX5 でもコレはあったような気がする. 具体的な使い方や DelphiX でどうするかってところまではわからないですが(^^; 使えることは確かなのでリファレンスを読みながらがんばってみると良いのでは.
よくわからないで書いています、すみません。 DirectSoundか何かの機能で音の位置を設定できるらしいとの話をちらりと聞きました。 なんだか音の移動によるドップラー効果もあるとか。これってできるんでしょうか・・。 これってDirectX7の話ですかね?(^^;
サーフェスをシステムメモリに確保すると遅くなるとは限らないようです. DirectX 関連で検索すると, ものすごい量のビデオカード(100近い)の計測結果がありました. 日本語のページでも 10 種類くらいの計測をやっている人のページがあったはずです.
DirectX7SDK をダウンロードしてみました。VBでも使えるなんて便利な世の中になったもんです。 あと、ぽくむらさんの書きこみをみて「へぇ3万アクセスかー、すごいなー。」とか思ってたら 良く見ると 300K=30万!! とは… やっぱり TMPGEnc に魅せられた方がほとんどなんでしょうか。 30万 Hit おめでとうございます。
送れましたが、30KHit突破おめでとうございます。 これからもますますのご発展を...。 DirectX7が出たみたいですし。http://ueno.cool.ne.jp/pokumura/
全画面書き換えですと、やはりスピード的に難しいところがあるようですね 現状では、BitBltの方が倍近く早いですから、無理にDirectXにする必要も ないので、BitBltでいってみます DirectXは速いと思いこんでいましたが、考えを改めるキッカケになりました
G200も遅くなくて ある意味認識が正しかったのかな 透過する領域が多いと透過転送の方がハードだとはやくて 透過する領域がなくても影響を受けないような思い込みが ありますが正しいものでしょうか 特にこれが分かってもあまり関係ないんですけど 背景と同じ色ならなるべく透過転送したほうがいいとか あるのかもしれないと思いまして なんかDelphiXに関係なかったですね すいません
うちも G200 ですが、透過転送が遅いなんて事は無いですよ。 昔、カラーキーを指定し忘れたまま透過転送しようとしたときはかなり遅かったので それだったのかもしれません。
DelphiXを落として確認したのですが LoadFromStreamを使った場合は TDIBにコピーして それからTDirectDrawSurfaceのCanvasにコピーしてる ので直にかくより確実におそくなりますね
関係ないですけど 透過転送ってMatrox G200でもおもいんですねぇ 認識不足かもしれないけど確か透過転送って最近 のビデオカードじゃ ほとんど関係ないですよね
毎回読み直してたんですね 毎回読み直すとなると 描画の重さより読み直すことの 重さの方が重要になってきますね 私にはレスつけれないような気がしてきましたが MemoryStreamに確保してLoadFromStreamより直接 サーフェイスをロックして書きこむと速くなるかも しれません
レスありがとうございます 動作環境を書いていませんでした、すいません GATEWAY GP-300(Pentium300,memory 128M) WindowsNT4 SP5 Matrox G200(8MB) 1600x1024(256色) SurfaceをSystemMemoryに確保はしていません、メモリー不足にもなっていないと 思いますし、ビデオメモリーにとられてるか、システムメモリーにとられたか と言う区別はどこでつくのでしょうか? それで、あーるさんの指摘の件、修正しましたら一気に早くなりました! Drawがマイクロ秒の世界、Flipが2.6msでした それでもトータル的にBitBlt使ったモノより遅いです、TImage使って読み込んだ場合と 同等くらいです それで、今回は疑似動画みたいな感じの表示をさせており、キャプチャーした画像を TMemoryStreamに入れてるため、毎回、FSurface.LoadFromStreamを読み出して 画像を読み込んでいます このFSurface.LoadFromStreamが結構遅いです、ここで5.8ms ちなみにTBitmap を使った場合のLoadFromStreamメソッドは1.7msほどで 終わります 毎回、全画像を更新しなくてはならない場合、FSurface.LoadFromStreamを使わない 方法などあるのでしょうか?
あとTDXDrawのオプションでSurfaceをSystemMemoryに確保 するようにしてないか もしくは元々ハードのビデオメモリ不足でシステムメモリに 確保されてるなどで速度が落ちるとおもいます
KAZU さんこんにちは。気になったのですが、 >DXDraw1.Surface.Draw(0,0,FSurface.ClientRect, FSurface, True); ~~~~ ← ここ Draw メソッドの最後の引数は透過転送を行うかどうかを指定するものです。 もし透過転送する必要が無いのなら DXDraw1.Surface.Draw(0,0,FSurface.ClientRect, FSurface, False); ~~~~~ としてみてはいかがでしょうか。
ありえないとは思うのですが Drawするたびに以下のコードをよびだしてるとか FSurface.LoadFromStream(FBeta); そんなことないか..... あとビデオカードによってはGDIのほうが早いとか あるかもしれない あるとしたら 相当古いビデオカードだろうけど あるのかな すいません レスになってないですね
最初はDrawでやっていたのですが、見て遅いのがわかるほどで、下の処理で40msほど かかっています、とくにDrawが28msと、Canvas.Draw使うより5,6倍遅いのです FSurface.LoadFromStream(FBeta); DXDraw1.Surface.Draw(0,0,FSurface.ClientRect, FSurface, True); DXDraw1.Flip; なにか、使い方を間違っているのでしょうか?
DirectXで早く描写したいのなら Surface.Canvasでなく Surface.Drawだと思います
DelphiXを使ってDXDrawを使っているのですが、320x240x8の画像を すみません、改行いれ忘れたため、もう一度アップします DXDraw(ウィンドウモード)とBitBlt使った場合の表示スピードを 比べているのですが、DXDrawは次のようなソースで描画しており、 この処理だけで10msほどかかっています、 BitBltを使った場合は3.5msで描画でき、 DirectXは早いと言う先入観があったのですが、 なぜBitBltより遅くなってしまうのでしょうか?、 ご教授ください with DXDraw1.Surface.Canvas do begin Draw(0, 0, DrawBitmap); Release; end; DXDraw1.Flip;
DelphiXを使ってDXDrawを使っているのですが、320x240x8の画像をDXDraw(ウィンドウモード)とBitBlt使った場合の表示スピードを比べているのですが、DXDrawは次のようなソースで描画しており、この処理だけで10msほどかかっています、BitBltを使った場合は3.5msで描画でき、DirectXは早いと言う先入観があったのですが、なぜBitBltより遅くなってしまうのでしょうか?、ご教授ください with DXDraw1.Surface.Canvas do begin Draw(0, 0, DrawBitmap); Release; end; DXDraw1.Flip;
>DXInputでは、Mouseは相対座標しか取ることが出来ず、マウスカーソルの現在位置 >を調べようとすると結局DXInputとは別にVCLのONMouseMoveイベントで毎回記録して >いる、という状況なんです。現在位置が分からないとやっぱり、画面上でクリック >された時などの処理に困りますよね。このあたりの実装を、DirectXではどういう風 >にやっているのか、是非知りたいのです。 相対座標とは前回のマウスの位置との差分なので TDXInput.Update メソッドを 呼び出すたびに相対座標を加算していけば絶対座標が得られると思います。 ただマウスの位置を完全に自分で管理することになるため、手間が増えると思います。 beign { FMousePos は TPoint 型変数 } FMousePos.X := FMousePos.X + DXInput1.Mouse.X; FMousePos.Y := FMousePos.Y + DXInput1.Mouse.Y; { カーソルが画面外に出ていかないようにする } if FMousePos.X<0 then FMousePos.X := 0; if FMousePos.Y<0 then FMousePos.Y := 0; if FMousePos.X>=DXDraw1.SurfaceWidth then FMousePos.X := DXDraw1.SurfaceWidth-1; if FMousePos.Y>=DXDraw1.SurfaceHeight then FMousePos.Y := DXDraw1.SurfaceHeight-1; end;
どうも、こんにちわ。yです。 >堀さんへ。 9/12バージョンのDelphiXにて、DXInputのMouseの入力動作を確認しました。 素早い対応、ありがとうございます(^^)。 <DirectXとMouse?> DirectXを使っている方は、僕から見るとだいたいシューティングか、もしくは 3Dの開発に長けている方が多いようですが、どうでしょうか。 僕は、2Dにもっとアニメーションを加えるためにこの環境を選んだのですが、 何が言いたいかというと、Mouseをデバイスとして使っているサンプルが少くて 困っているわけです。 DXInputでは、Mouseは相対座標しか取ることが出来ず、マウスカーソルの現在位置 を調べようとすると結局DXInputとは別にVCLのONMouseMoveイベントで毎回記録して いる、という状況なんです。現在位置が分からないとやっぱり、画面上でクリック された時などの処理に困りますよね。このあたりの実装を、DirectXではどういう風 にやっているのか、是非知りたいのです。 マウスをデバイスとしてゲームを作っている方などいましたら、ぜひ教えて下さい。 from Mr.y
>しかし、直接アクセスはできないのでしょうか? TDXInput コンポーネントは意図的に DirectInput に直接さわれないようにしています。 >ところで、コンポーネントってことはVCLの子孫なわけですが、 >スレッドに対して安全でしょうか? >スレッド対応というのは、TThreadを使ったスレッド対応ということですか? TDXInput.Update メソッドを呼び出すだけなら、たぶん大丈夫です。 ただ排他処理をしていないので、メインスレッドから TDXInput をいじらないように する必要があると思います。 >スレッド対応というのは、TThreadを使ったスレッド対応ということですか? はいそうです。
>>堀さん >別スレッドで回して自前のバッファに... うーむ、やはりそうなりますか....。 やったことはあるのですが、不安定になるためやめてしまったのです。 しかし、直接アクセスはできないのでしょうか? ところで、コンポーネントってことはVCLの子孫なわけですが、 スレッドに対して安全でしょうか? スレッド対応というのは、TThreadを使ったスレッド対応ということですか?http://ueno.cool.ne.jp/pokumura/
◆ aihatena さん >ゲームを FireWall越しにやりたいという意見がありまして >DirectPlay6 から、特定portのみ使用するよう指定できるようですので >DirectPlay Addressの DPAID_INetPortを指定するようにできませんでしょうか? とのことなので TCPIPSetting プロパティに Port プロパティを追加しました。 Samples\Network\Chat2 サンプルで確認できると思います。 Open2 メソッドで接続しないとTCPIPSetting プロパティの値が使われませんので注意して下さい。 >#はうぁっ、何時の間に DelphiX_for5.dpkがっ(笑) DelphiX 自体は Delphi 5 に対応して出来ているんですが、Delphi 5 日本語版が 発売されるまでは使えないようにしてあります。 ◆ y さん >DXInputのMouse対応についてどうなっているのかおたずねしに来ました。 >実装しかけ? なのでしょうか。プロパティのENABLEをTrueにするとエラーが >でてしまって。ヘルプの方にもマウスには対応していないように書かれて >おりますが、どうなんでしょうか。 マウスには正式に対応していますが、どうやらバグで使えなかったようです。 バグ報告どうもありがとうございます。 DelphiX 99.09.12 ではちゃんと使えると思います。
お世話になっています _o_ ゲームを FireWall越しにやりたいという意見がありまして DirectPlay6 から、特定portのみ使用するよう指定できるようですので DirectPlay Addressの DPAID_INetPortを指定するようにできませんでしょうか? (DirectX6 helpの "DirectPlay Address Data Types" および "Firewall Support in DirectPlay 6.0" より) DXPlay.pas 692行からの TCustomDXPlay.CreateDPlayWithoutDialogで 指定できそうな気はするのですが.. 以上、簡単にできそうでしたらよろしくお願いします。 #はうぁっ、何時の間に DelphiX_for5.dpkがっ(笑)
自己レスです IPX云々の原因は、SendMessageExをそのまま使っていたことでした ^^;;; しかも (DPSEND_ASYNC, DPSEND_GUARANTEED)付き.. 元に戻すと IPXでもそのまま実行できましたとさ。 お騒がせしました _o_
なるほど、確かに「現在 TCP/IPのみサポート」みたいに書いてありますね。 しかし何度再構築しても IPXが使えなくなってしまったのは謎 ^^; (まあ TCP/IPで問題なく動作するのでなくても平気ですが(笑)) いっしょうけんめい英語hlp読んだおかげで、async付き送信が だいたい理解できました。今までユーザ側で行っていたキューイングを DirectPlay側で行ってくれてるんですね。 問題はパケット落ちだけでなく、順番も保証してくれるのかどうか.. 「Any additional send will not be sent concurrently.」なので 多分大丈夫だとは思いますが。
投稿ボタンを押したら IE が転んだので書きなおしなんです。 文章をまとめて書きなおすのが面倒なので適当に書き散らしです、ごめんなさい MSDN Library で 98/10 以降 DirectX の日本語ヘルプは提供されています。 現在は DirectX6 まで日本語のヘルプになっています。 MSDN Library Subscription は 3000円/月 程度なので学生の時から契約し ています。DirectX のヘルプもですが、他の Windows API のリファレンス や、KB や QaA の内容を全部あわせて 3000円/月ですし、高いというほどで はないと思います. 前回の投稿の IPX うんぬんは IPX はハードウェアが伝達保証している範囲のプロトコルだから ハードウェアが正常なら伝達は保証されているので、プロトコル に保証通信を行う機能は必要ないし、利用できないでしょう。 ってことだったんですが、わかりにくかったですかね(^^;
どうもこんばんは、yといいます。 DXInputのMouse対応についてどうなっているのかおたずねしに来ました。 実装しかけ? なのでしょうか。プロパティのENABLEをTrueにするとエラーが でてしまって。ヘルプの方にもマウスには対応していないように書かれて おりますが、どうなんでしょうか。 from Mr.y
◆ ぽくむらさん >直接アクセスか、GetDeviceDataメソッドが >サポートされるとありがたいのですが....。 GetDeviceData メソッドを呼び出せても1フレームごとに Pool メソッドを 呼び出さないと意味がないと思います。 TDXInput コンポーネントを別スレッドで回して自前のバッファに コピーしていくしか無いと思います。TDXInput はソースコードを見る限りでは スレッド対応になっているので大丈夫だと思います。 ◆ aihatena さん >今までは 2人でも結構ぽろぽろ Message落ちていたのが嘘のように >なくなり、3人で1時間程度のテストプレイを完遂できました。 結構効果があるんですねぇ。 >あとこのプログラムで Asyncが True/Falseにかかわらず >IPXでの通信ができなくなってしまいました ^^; これはおかしいですね。一度プロジェクトを再構築(ビルド)してみてはどうでしょうか? ◆ NAZO さん >オフィシャルマニュアルみたいなのがあったと思うのでそれを買うといいかもしれません >かなりの値段だったので私には入手不可でした かなり高いですよね。6K円 ぐらいでしたっけ。
こんにちは、ぽくむらです。 初歩的な質問かもしれませんが、 DXInputにはDirectInputオブジェクトへ直接アクセス できないみたいなので、できるようにしてほしいです。 というのも、入力状況を得る関数にGetDeviceStateが 使われているため、ゲームで入力状況を得るとき、 特に格闘ゲームなどでは、こま落ちしたとき正常に 入力できないからです。 直接アクセスか、GetDeviceDataメソッドが サポートされるとありがたいのですが....。 よろしくお願いします。http://ueno.cool.ne.jp/pokumura/
さっそく 990909ので Async付き SendMessageを試してみました。 (自作ゲーム。4人まで。TCP/IP越し) 今までは 2人でも結構ぽろぽろ Message落ちていたのが嘘のように なくなり、3人で1時間程度のテストプレイを完遂できました。 ただ若干 Messageの順番の前後があるので (再送等?) ソフト側で対応しなければなりませんでしたが。 あとこのプログラムで Asyncが True/Falseにかかわらず IPXでの通信ができなくなってしまいました ^^; TCP/IPにすると正常ですし、サンプルの Chat.exeでは Asyncによらず IPXで通信できているので謎ですが.. なにはともあれ、非同期送信対応ありがとうございます〜
DirectX6の日本語ヘルプは、どこかで見た情報なので記憶違いかもしれませんが MSDN Junuaryについてたそうです 個人では、私の知ってる限り入手不可能だと思います 個人でMSDNはいれるようなひとは別だけどそんなひともいないでしょう オフィシャルマニュアルみたいなのがあったと思うのでそれを買うといいかもしれません かなりの値段だったので私には入手不可でした
◆ Shinji さん >プログラム実行中、時間が経つにつれてどんどんFPSが少なくなっていきます。 >そしてウィンドウモードからフルスクリーンモードに変更したとき(この逆も)には >FPSは元の値に戻るのですが、また時間が経つにつれてどんどん少なくなってしまいます。 NAZO さんがレスを付けられているように私もメッシュの追加とかが原因だと思います。 ◆ えるさん >保証付き通信はセッションを開く時に DPSESSION_DIRECTPLAYPROTOCOLを >オプションとして必要とするようです。 とのことなので修正してみましたが、直りませんでした。というより保証無しで送信しても うまくいきませんでした。 DPSEND_ASYNC を使用するには、プロトコルがサポートしていないといけないみたいです。 DirectX Viewer で見てみたら TCP/IP しかサポートしていませんでした。 TDXPlay コンポーネントに現在のプロトコルは非同期送信をサポートしているかを返す AsyncSupported プロパティを追加しました。 また Async プロパティを追加し Send メソッドでプロトコルがサポートさえしていれば 自動的に非同期送信出来るようにしました。 ># DirectX5 以降は日本語ですよね>DirectX SDK のヘルプ DirectX6 SDK に DirectX5 の日本語ヘルプが付いてきます。DirectX6 の 日本語ヘルプは無いです。 ◆ aihatena さん >サンプルの Network\Chat などで試してみましたが、 >Protocolが IPXのときうまく送れません。 非同期送信は TCP/IP しかサポートしていないようです。 ◆ あーるさん >DelphiX 最新版さっそくダウンロードさせて頂きました。 >えー、ヘッダの間違いを見つけましたので報告いたします。 >4365行目の GetTextureStageStage、4366行目の SetTextureStageStage はそれぞれ >GetTextureStageState, SetTextureStageState だと思います。 どうもありがとうございます。早速修正しました。 ◆ H.Matsuda さん >DelphiX では既に MMX コードを使っているようですので、中途半端なMMXを使っても >これ以上の高速処理を望むことは出来ないのでしょうか? DelphiX の MMX コードはかなり遅いと思いますので専用のルーチンをガリガリ作った方が 速いと思います。
自己レスです。 サーフェスのRestoreでうまくいきました。 色々もがいているうちに出来ました。 お騒がせしてすみません。
レスでないレスです ずばり指摘できる人もいるかもしれませんが Direct3DRMでなにをやってるかを書かないと レスのつけようがないと思います あと時間がたつとはどれくらいの時間とか、 ビデオカードとか、非常に単純なプログラム やサンプルでもおこってるのかなどがあると 問題が絞れるかもしれません。 と 偉そうなことを言いましたが 私には難し い問題でレスをつけられない可能性は、高い のですが、ここには、HORI様を筆頭に優 れた方がたくさん御覧になられてるのでもう 少し情報をかくといいと思います こんなことはないと思いますが スクリーンを 変更したときオブジェクトを開放してフレーム が回る時どこかで メッシュをひたすら追加し てしまってたとかそういう可能性とかは..... ないか(私はうっかりテストで挿入したのを忘れてやってしまいました なさけない.....)
初めまして。DelphiXでお世話になっているShinjiです。 現在DelphiXでDirect3DRMをやっていて今回どうしても分からないところがあるので質問させてください。 プログラム実行中、時間が経つにつれてどんどんFPSが少なくなっていきます。 そしてウィンドウモードからフルスクリーンモードに変更したとき(この逆も)には FPSは元の値に戻るのですが、また時間が経つにつれてどんどん少なくなってしまいます。 これは何が原因でこうなるのでしょうか?本当に私にはわかりません。 何か解決策や参考になること、良きアドバイスがあれば教えてください。 お願いします。
えっと、非同期通信リクエストしたものです(^^; # でも、まだ試してません(^^; 保証付き通信はセッションを開く時に DPSESSION_DIRECTPLAYPROTOCOLを オプションとして必要とするようです。 dxplay.pas line.962 dpDesc.dwFlags := DPSESSION_MIGRATEHOST or DPSESSION_KEEPALIVE; に、足してあげてみてはいかがでしょう ? TCP/IP の場合は Winsock v2.0 以降が扱える必要もあります。 IPX はセグメント内通信なのでプロトコルレベルでの着信確認は行わなくても ハードウェアが正常に稼動していれば必ず着信するはずですし、そのような前 提で使われているのではないのでしょうか ? # DirectX5 以降は日本語ですよね>DirectX SDK のヘルプ
初めまして。 先日DelphiXをダウンロードさせていただき、 色々動作を試している段階です。(かなり使い易いですね)。 その中でパレットの動作でどうしても分からないことがあります。 以下のコードは、DXGファイルを読み込みパレットを設定するものです。 これを表示すると、色が化けてしまいます。 画面は640×480×8、DXGファイルの絵は1枚だけ。 フルカラーの画像を256色に減色。その際システムパレット番号を 空けて減色するようにしています。 何か他に注意する点があるのでしょうか。 with FrmMain.DXITitle do begin Items.LoadFromFile( ExtractFilePath( ParamStr( 0 ) ) + 'Title.dxg'); for i := 0 to Items.Count - 1 do begin Items[ i ].Transparent := true; Items[ i ].TransparentColor := RGB( 0 , 0 , 255 ); end; Items.MakeColorTable; FrmMain.DXDMain.DefColorTable := Items.ColorTable; FrmMain.DXDMain.ColorTable := Items.ColorTable; FrmMain.DXDMain.UpdatePalette; end;
TDXPlay.SendMessageExで保証付き非同期送信! ということで サンプルの Network\Chat などで試してみましたが、 Protocolが IPXのときうまく送れません。 Main.pasの TMainForm.Button1Clickで DXPlay1.SendMessage(DPID_ALLPLAYERS, Msg, MsgSize); のところを DXPlay1.SendMessageEx(DPID_ALLPLAYERS, Msg, MsgSize, (DPSEND_ASYNC or DPSEND_GUARANTEED)); にしています。送信ボタンを押しても相手窓に表示されません。 DirectX6ヘルプのSendExを見ると、意訳で DirectPlay protocolフラグがセットされてると guaranteedをサポートしてなくても 保証付きで送ることができる。セットしてないときは guaranteedをサポートしてないと 保証付きで送ることができない ここの辺りが関係してるのでしょうか..? こうすれば IPXでも SendMessageEx使えるよなどの例がありましたら ぜひ教えて下さい _o_ # ゲームの開発時は IPXでテストしていたので、できないとなると少々不便に(汗
堀さん、お世話になっております。あーるです。 DelphiX 最新版さっそくダウンロードさせて頂きました。 えー、ヘッダの間違いを見つけましたので報告いたします。 4365行目の GetTextureStageStage、4366行目の SetTextureStageStage はそれぞれ GetTextureStageState, SetTextureStageState だと思います。http://www2s.biglobe.ne.jp/~t_harada/
>さてそのサンプルですが、Tform1.appidle内のAddSprite内でエラーになってしまいます。 うーん、「Canvasに対する描画ができません」というのは、テクスチャの作成に失敗してるって事だと思います。 DXDraw の Option の doHardware を False にして、HELで描画させてもだめでしょうか。 あと、空きVRAMが足りないのかもしれませんのでフルスクリーンなら動く可能性もあります。
あーるさん、こんにちは。サンプルコード、どうもありがとうございます。 さてそのサンプルですが、Tform1.appidle内のAddSprite内でエラーになってしまいます。 「Canvasに対する描画ができません」との事です。 何かハードに依存する部分でもあるのでしょうか。 1600x1200 ハイカラーのウインドウモードってのに問題があるんでしょうか(^^;
TIX さん、こんにちは。あーるといいます。 僕も丁度 Direct3D で DrawAlpha 出来ないかなぁと思っていたところでして、 取り合えず DrawPrimitive でがんばってみました。 簡単なサンプルをアップしてみましたので少しは参考になるかもしれません。http://www2s.biglobe.ne.jp/~t_harada/archive/sample.lzh
こんばんは >DXDraw.D3DRM2.CreateFrame(DXDraw.Scene as IDirect3DRMFrame2, FrLight); >でいかがだいじょうぶだと思います できました!!ありがとうございます。
お世話になってます。TIXです。 DirectDrawのDrawalphaに比べてDirect3Dでの処理の方が速いらしいと言うことに最近気が つきました。そこで、DrawAlphaをDirect3Dのメソッドでできないかと考えたのですが、 どうもやりかたが掴めません。サンプルコードを見たのですが、Xファイルを扱うばかりで 直接ポリゴンを計算するような部分は見つけられなかったのですが、困難なのでしょうか。
Hello I've download DelphiX but I haven't many samples and tutorials. Can someone mail me addresses were I can find english sites for DelphiX Thanx CU
こんばんわ、松田です。 本当だ・・・全然気がつきませんでした。 中途半端に DirectX SDK を読んでいたので通常の TDirectDrawSurface に指定を するのかと思っていました。 お手数をおかけしてすいませんでした、ありがとうございます(^^)
すでにお気づきかもしれませんが、TDirect3DTexture という恐らくそのものずばりのクラスがあります。
DXDraw.D3DRM2.CreateFrame(DXDraw.Scene as IDirect3DRMFrame2, FrLight); でいかがだいじょうぶだと思います
FrLight :IDirect3DRMFrame2; //ライトフレーム をグローバル変数として宣言して DXDraw.D3DRM2.CreateFrame(DXDraw.Scene , FrLight); //フレームの作成 を含めソースを作成してコンバイルすると、 が書かれている行で 'IDirect3DRMFrame' と 'IDirect3DRMFrame2' には互換性がありません 上のエラーメッセージが出て引っかかります。 多分 DXDraw.SceneはIDirect3DRMFrame型だからそれで引っかかっていると思うんですが IDIRECT3DRMFrameとIDirect3DRMFrame2の互換性があるはずではないのですか?? Delphi用のDirectXのヘッダのreadmeに IDirect3DRMFrame2 を IDirect3DRMFrame を継承するようにしたとも書かれていたし 僕にはまったくわかりません どうすればいいのか対策をおねがいします m(__)m。
あーるさん、はじめまして。 ご返答ありがとうございます。 DirectX でサポートされていないのですね、私の方のPCの環境が悪いとばかり思いこんで いました。 さっそく言われていますように、アルファテクスチャによる代用の方法にチャレンジしたい と思います、ありがとうございました。
東京近郊でどこか詰んであった本屋をご存知の方おられませんか? とりあえず帰宅中に寄れるところには無いんで、ちょっと遠出でもしないと いけないかと思ってます... # 出てるんですよね ?
松田さん、はじめまして。あーるといいます。 加算合成は DirectX ではまだサポートされていないと思います(少なくともHELでは)。 DelphiX では DrawAdd, DrawSub, DrawRotate系は自力で行っているようです。 ということなので、スピードに満足できないという場合には Direct3Dのアルファテクスチャによる 代用を考えてみてはいかがでしょうか(こちらはほとんどのハードでサポートされていると思う)。 $DelphiX\Samples\d3drm\AlphaBlending フォルダのサンプルが参考になるのではと思います。
はじめまして、松田と申します。 Delphi で DirectX を使おうと思って資料を買い集めCのコードに死にそうに なっていた所、DelphiX を見つけて!早速使わせて頂いています。 作成した堀様には感謝感謝です(^^) さっそく質問をさせて頂きたいのですが、DrawAdd を使用して2個の静止画を合成 しようとしているのですが、これがかなり遅いのです。 ハードウェアアクセラレーションが効いていないのかと思って、Options の SetDriver を False にして、Driver に GUID を設定しても結果は同じでした。 背景画像に1枚、上に重ねる絵を10枚用意して(全て 320x240x24bit)を単純ループで 行ったのですが、3fpsくらいでした。 行ったのは下記のような感じです(Delphi4 Pro) DrawDibDraw(DDH,DXDraw1.Surface.Canvas.Handle,0,0,320,240,@T1,@BB,0,0,-1,-1,0); DxDraw1.Surface.Canvas.Release; DrawDibDraw(DDH,Surface2.Canvas.Handle,0,0,320,240,@T2,@BB,0,0,-1,-1,0); Surface2.Canvas.Release; VRC.Top:=0; VRC.Left:=0; VRC.Right:=320; VRC.Bottom:=240; DXDraw1.Surface.DrawAdd(VRC,VRC,Surface2,False,255); DxDraw1.Surface.Canvas.Release; DXDraw1.Flip; Surface2 は予め作成して、SetSize してあります。 何か根本的な使い方を勘違いしているのでしょうか? なにかヒントでもありましたらご教授して頂ければと思います。 Ps. PCにはSTB RIVA128 AGP + Monster3D が刺さっています。
>安田明生さん スクリーンセーバーや省電力設定が10分に設定されてはいないでしょうか。 DelphiXでのアプリは、これらと折り合いが悪いようで、止まってしまうみたいです。 とりあえず、アプリ実行中はスクリーンセーバーを実行させないようにしておけば良いかと。 具体的な方法は・・・すみません、しりません。 あまりお役に立てずすみません。 lofl
DelphiXを使って人工知能ゲームを作りました。遊んでみてください。 (下のHPでダウンロードしてください。) ところで、このゲームをフルスクリーンで10分以上キーやマウスに触 らないでいるとフリーズしてしまいます。どうしてなのかわかりません。 だれか教えてください。 またHoriさんのDelphiXのサンプルでも同様にフリーズしてしまいます。 samples\graphic\Basic\Sample.dpr このプログラムをフルスクリーンで10分以上、マウスやキーに触らな いで置くと、いったん画面が消えます。そこで、マウスをクリックする と、元に戻らなくなります。スクリーンセーバーなどは設定していませ ん。なんとかこの現象を解決したいと思っているのですが、よくわかり ません。誰か教えてください。
DelphiXを使ってアクティブRPGを作ってみました。 タイトルは『殿方の野望「迷宮は男のロマン!』です。 良かったら遊んでみてください。 (ダウンロードは下のHPからどうぞ。) まだまだ、稚拙な作品ですが...(^^; 「Inside DelphiX 7月発売予定」...という事は、もう発売になっているのかな? これから本屋に行って探してみまーす。http://member.nifty.ne.jp/workshop/
ども、しろでございます。 現在DelphiX、ネット上に落ちていた98/10版で制作しております。 >えるさま―ふむふむ、確認したら、2/10版ですね。 以前のときは98/10版から上書きしたからでしょうか。 警告は無視でOkなんですね。ふむふむ。 現在は、描画方法をキャンバスからサーフェスに移行するためにちょこっと調べてます。 キャンバスからの書き込みをDirectx上で動かすと、、、ウィンドウ上だと 秒間75コマ保っていた描画速度が、全画面表示にすると、4コマまでに落ちます(T_T)。 いや、プログラムの用語に詳しくなくてすみません。(^^; ではでは。 P.S ついにDelphi本出版、おめでとうございます。買わねば。http://plaza.harmonix.ne.jp/~s-okawa/aterier/
> 今年の二月の頃のファイルではうまくいったのですが あれ? 現在ダウンロードできる最新版は 99/02/10 版ですよね ? 2 月頃のファイルというと同じバージョンかもしれませんね。 > Dxtimer,Max.lagの読み込み中のエラー:プロパティが存在しません。 たぶん、DXTimer.MaxLag のタイプミスだと思うのですが、確かに警告が 出ますけど、無視して構わないと思います。 無視して DXTimer.MaxLag が消えたら、保存しなおせば大丈夫です。 # 昔の DelphiX ではこういうプロパティがあったのでしょうか ?
はじめまして、しろと申します初心者です。 最近、パソコンの再セットアップに伴い、DelphiXをDelphi4に再インストール したのですが、以下のような症状が出まして、使えません。 Dxtimer,Max.lagの読み込み中のエラー:プロパティが存在しません。 エラーを無視して続けますか? 注意:エラーを無視するとコンポーネントまたはプロパティを失う場合があります。 このようなメッセージが、sample中のDxImagelist内サンプルプログラムの読み込み、 あるいは、自作のDelphixプログラムにもこのような表示が出まして、 しっかりした使用ができません。 ・・・今年の二月の頃のファイルではうまくいったのですが、できれば、以前のバージョン のものか何か手に入りませんでしょうか? よろしくお願いします。 ではでは。http://plaza.harmonix.ne.jp/~s-okawa/aterier/frame.htm
大変お久しぶりです。 覚えておられますか?DelphiX初期の頃は大変お世話になりました。 今も、お世話になりたいけど時間がないので、 あ、C マガジンの新刊コーナーにのってましたよ DelphiXの本 7月発売日にちは不明ですが おめでとうございます。 バージョンがかなり変わっていて復帰時についていけるか心配ですが これからもがんばってください。 本は買いに行きます。http://www2.osk.3web.ne.jp/~yasuoka/
β10m3、使わせていただいてます。 さっそくですが、MPGファイルとMPGファイルを つなげるとつなげたほうの後のほうが(合計22分)15分くらいたつと 音が早くなって画像が送れ、かなりズレます。 どうしたもんでしょう、 それでは β11を楽しみにまってます がんばってください。
私も D4 でこの症状になってここで質問したのですが、.dpk から自分でパッケージを ビルド・インストールして問題ないとのことで、問題なく使えています。 WAVE を変更しようとすると例外が出るとのことですが、PropertyEditor が正しく 登録されていないなどが原因でしょうか ? どんな例外が出るかをハッキリされると助け船が出るかもしれないです。 # 私から出てくることはないでしょうけど (^^;
どうも、はじめまして。 ただいまDelphiXを勉強中の者です。 で、DXInputを使ってJoystickを2つ使おうと思っているのですが どうしても2つ目のJoystickを認識してくれません(T_T) DXInput1.Update; if isButton1 in DXInput1.States then x:=1; DXInput2.Update; if isButton1 in DXInput2.States then y:=1; こんな感じでプログラムしてます。 IDの設定も間違っていないと思うのですが... 解決方法を御存知の方がいらっしゃいましたら教えてくださいm(_ _)m こちらの環境は Delphi4 + DirectX6 + DelphiX(最新版) + MS SideWinder x 3 です。
はじめまして, まずはじめにDelphiXというすばらしいものを公開してくださっていることに 感謝いたします. DelphiXは過日にダウンロードして大感激したものの, DirectXを使う予定がなくなってしまったために それっきりになっていたのですが, 先日,訳あって,久しぶりに最新版をダウンロードさせていただきました. しかし(ここからが本題です) Delphi3用のインストーラーを起動しても途中で止まってしまうのです. 仕方がないのでパッケージのソース(dpk)ファイルを読み込み, 無理矢理コンパイルしてみましたが, TDXWaveListのWAVEを変更しようとしたら例外が出るなどうまくいきません. 過去ログを見ても同じ症例が見あたらないところを見ると なにかとんでもない単純ミスでも犯しているのでしょうか. ※DelphiXも1〜2年も見ないうちに随分進化していますね. なんだか浦島太郎状態です(^^;.
Animationの件、やっぱり不具合かなと思います。 DirectX.pasの下記を修正したところ、うまくいったと思いますのでご報告します。 { TD3DRMAnimationKey } PD3DRMAnimationKey = ^TD3DRMAnimationKey; TD3DRMAnimationKey = record dwSize: DWORD; dwKeyType: DWORD; dvTime: TD3DValue; dwID: DWORD; case Integer of 0: (dqRotateKey: TD3DRMQuaternion); 1: (dvScaleKey: TD3DVector); ← TD3DSingleより変更 2: (dvPositionKey: TD3DVector); ← TD3DSingleより変更 3: (dvK: array[0..3] of TD3DValue); end;http://member.nifty.ne.jp/tarucus/index.htm
上記の件、自力解決しました。考えてくださった方、ありがとうございます。 var i,j:integr; Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, lpKey[0]); for i := 0 to lpdwNumKeys - 1 do begin j := lpKey[i].dwKeyType; 略 end; でjの値がキーのタイプでした。 たるくす
バグかなと思いましたのでご報告します。 TestCollisionを使っていて、ImageSpriteのPixelCheckがFalseの時、 うまく判定してくれないようでした。 ソースを見てみたのですが、 function TSprite.TestCollision(Sprite: TSprite): Boolean; begin Result := True; end; となっていましたけど、これは、 function TSprite.TestCollision(Sprite: TSprite): Boolean; begin if Collisioned then begin if (Self<>Sprite) and OverlapRect(BoundsRect, Sprite.BoundsRect) then Result := True else Result := False; end; end; ではないでしょうか?間違っていたらすみません。 Inside DelphiXの執筆がんばってください。楽しみにしています。
How it is possibel to create the file for volumetric object with the extension *.x. It is necessary for work with library DELPHIX.
DXWaveList1をFormに貼り付けて、 DXWaveList1.Items[0]にwaveファイルを追加しようとすると、 DelphiXWaveEditForm.OleCreateOrderの読み込みエラー「プロパティが存在しません」 となります。 Delphi4ソースをDelphi3で読むとよくこのエラーが出ますが、 Install_for3.exeでインストールしただけですが、他に必要な事がありますでしょうか? あと、DirectMusicはサポート予定はないでしょうか? よろしくお願いします。
堀さん 素早い回答ありがとうございます。 おかげさまで、IDirect3DAnimation2.GetKeysでのキー取得ができました。 キー用のメモリを自前で用意する必要があったんですね。 ところが、さっそく次のステップでつまずいてしまいました。 今度は取得したキーの内容が知りたいのですが、 var KeyPosition: TD3DVector; ←追加コード try Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, lpKey[0]); KeyPosion := lpKey[0].dvPositionKey; ←追加コード finally としたら失敗しました。 SDKヘルプでのAnimatioKeyの構造体宣言の該当部分はunionでくくられていたので、 アクセス方法が変わるのかな なんて思っています。 質問ばっかりですいませんが、どなたか教えて頂けないでしょうか。http://member.nifty.ne.jp/tarucus/index.htm
掘さん、お世話になってます。 >TDXPlay では DirectPlay3 なため、SendMessage(Send)を呼び出したときに、 >データ送信終了を待ってしまいます。 えっ? そうなんですか? それはまずいですね〜 packetlost がる時とか、つらそうです。(到達信頼性ありなのでリトライ激しい) > 私も IDirectPlay4 を使うように変更してみましたが、正常に動作しました。 > さらに SendMessageEx メソッドも呼び出し、ちゃんと非同期で動作することも > 確認できました。 >> また、DelphiX が IDirectPlay4 へ対応する予定はないですか ? > 次期バージョンから IDirectPlay4 を使用するようにします。 ということですので、次のリリースを待っています。 > 手元にある DelphiX は、公開しているバージョンからかなり変更されているので > そのせいかもしれませんね。 結構修正がこの掲示板でちらほら出ていますね。 バージョンは前回書き忘れましたが、日付なし.zip と 990210aj.zip があるのです が「今回から DirectX6 専用に...」って頃の日付なしを使っています。 # 自分が行った変更を新しいリリースに再度行うのが面倒とかいう理由で... >> 7. SendMessage を行った後でメッセージを受信して OnMessage が呼ばれるあ >> たりで転ぶようになってしまった... これも書き忘れましたが自作アプリおよび DelphiX の chat, chat2 で転びました。 # やっぱ適当で手をだすべきでわないかぁ InsideDelphiX 楽しみにしてます。 # ヘッダの変換については教えていただいた h2p もダメでした。(CALLBACK などに対応してない) # それぞれ得意とする内容と対応していない内容があり、全部あわせたのがあったら解決しそーなんですが(笑
◆ たるくすさん >私は現在、Direct3Dのアニメーションセットを作るツールを製作中ですが、 >IDirect3DAnimation2のGetKeysを使ってキーを取得しようとすると、 >アクセス違反が起きてしまい困っています。 >対策を教えてはいただけないでしょうか? >http://member.nifty.ne.jp/tarucus/index.htm type PArrayD3DRMAnimationKey = ^TArrayD3DRMAnimationKey; TArrayD3DRMAnimationKey = array[0..0] of TD3DRMAnimationKey; var Animation2: IDirect3DRMAnimation2; dvTimeMin, dvTimeMax: TD3DValue; lpdwNumKeys: DWORD; lpKey: PArrayD3DRMAnimationKey; begin Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, PD3DRMAnimationKey(nil)^); GetMem(lpKey, lpdwNumKeys*SizeOf(TD3DRMAnimationKey)); try Animation2.GetKeys(dvTimeMin, dvTimeMax, lpdwNumKeys, lpKey[0]); finally FreeMem(lpKey); end; end; のようなコードで出来ると思いますが、試していません。 ◆ TIX さん >早速ですが、TWaveCollectionItemクラスを使って音を鳴らしてたところ、不具合がありました。 >Pan,frequency,volumeプロパティについてです。変更してもplay時に反映されません。 バグがありました。TWaveCollectionItem.Play メソッドの NewBuffer.Stop NewBuffer.Position := 0; NewBuffer.Play(False); となっている箇所を NewBuffer.Stop; NewBuffer.Position := 0; NewBuffer.Frequency := FFrequency; NewBuffer.Pan := FPan; NewBuffer.Volume := FVolume; NewBuffer.Play(False); と変更すればいいと思います。 ◆ えるさん >TDXPlay では DirectPlay3 なため、SendMessage(Send)を呼び出したときに、 >データ送信終了を待ってしまいます。 えっ? そうなんですか? それはまずいですね〜 >7. SendMessage を行った後でメッセージを受信して OnMessage が呼ばれるあたり > で転ぶようになってしまった... 私も IDirectPlay4 を使うように変更してみましたが、正常に動作しました。 さらに SendMessageEx メソッドも呼び出し、ちゃんと非同期で動作することも確認できました。 手元にある DelphiX は、公開しているバージョンからかなり変更されているので そのせいかもしれませんね。 >また、DelphiX が IDirectPlay4 へ対応する予定はないですか ? 次期バージョンから IDirectPlay4 を使用するようにします。 ◆ imahiro さん >DelphiXをインストールし、サンプルを実行しようとしたら、以下のようなエラーがでます。 >「EInfCastErrorクラスの例外を生成しました。Interfaceはサポートされていません。」 >これは、どうすればいいのでしょうか? さらに継続して実行してみると「DirectX6 が必要です」と出ると思います。 ◆ Bakajin さん >Inside DelphiX マジで楽しみにしています。 どうもありがとうございます(^^ ◆ ぽくむらさん >Inside DelphiXですか。 >チェックしとかなければなりませんね。 >それにしても、本が出るなんてすごいですよ。 >これからも、頑張ってください。 どうもありがとうございます〜。頑張らなくちゃ〜
こんにちは! たるくすと申します。 堀さんのDelphiX、便利に使わせてもらっています。 私は現在、Direct3Dのアニメーションセットを作るツールを製作中ですが、 IDirect3DAnimation2のGetKeysを使ってキーを取得しようとすると、 アクセス違反が起きてしまい困っています。 対策を教えてはいただけないでしょうか?http://member.nifty.ne.jp/tarucus/index.htm
久々にやってきました。TIXと申します。 早速ですが、TWaveCollectionItemクラスを使って音を鳴らしてたところ、不具合がありました。 Pan,frequency,volumeプロパティについてです。変更してもplay時に反映されません。 何度もテストしてみたところ、次のようになっている事がわかりました。 変更が反映されるなるケース ・looped=Trueの場合 ・looped=falseで、初めて演奏した場合 ・looped=falseで、前回鳴らした音が再生中の場合 変更が反映されないケース ・looped=falseで、前回鳴らした音の再生が終わった2回目以降の再生の場合 こんな感じでしょうか。あと連続で重ねて再生しているときにたまに反映された音が出るようです。 どうぞよろしくお願いします。
TDXPlay では DirectPlay3 なため、SendMessage(Send)を呼び出したときに、 データ送信終了を待ってしまいます。 リアルタイムなアクション/シミュレーションゲームでは、ある程度の補完をク ライアントが行ってデータは流しまくるのが良いかと思って、DirectPlay4 用 に TDXPlay を改造してみようかと思いました。 1. DirectX.pas には IDirectPlay4, IDirectPlay4A がすでに宣言済みを確認 2. TDXplay.pas, TDXPlayFm.pas の IDirectPlay3 を IDirectPlay4 に 置換(not word なので IDirectPlay3A も同時に置換された) 3. SendMessageEx を SendMessageImpl に名称変更(private procedure だし) 4. function SendMessageEx を作成、内容は、とりあえず単純に IDirectPlay4 の SendEx を実行し、MsgID を返すのみ。 function TCustomDXPlay.SendMessageEx(ToID: TDPID; Data: Pointer; DataSize: Integer; dwFlags: DWORD): DWORD; begin if not Opened then Exit; if DataSize<SizeOf(DPMSG_GENERIC) then raise EDXPlayError.Create(SDXPlayMessageIllegal); if ToID=FLocalPlayer.ID then begin { 自分宛のメッセージ } DoMessage(FLocalPlayer, Data, DataSize); end else FDPlay.SendEx(FLocalPlayer.ID, ToID, dwFlags, Data^, DataSize, 0, 0, nil, @Result); // 0 以外はサポートしないデバイスあるので使わない end; 5. システムメッセージの受信時の case に DPMSG_SENDCOMPLETE 用の項目を追加、 OnSendComplete イベントを追加し呼び出すようにした。 DPSYS_SENDCOMPLETE: begin { 非同期メッセージ送信完了 } Msg_SendComplete := lpvMsgBuffer; if Msg_SendComplete.idFrom=FLocalPlayer.FID then with Msg_SendComplete^ do DoSendComplete(dwMsgID, hr, dwSendTime); end; ** DoSendComplete ** var result: TDXPlaySendCompleteResult; begin case hr of DP_OK: result := crOk; DPERR_ABORTED: result := crAbort; : // 略 else result := crGeneric; end; if Assigned(FOnSendComplete) then FOnSendComplete(Self, dwMsgID, result, dwSendTime); end; 6. 動作中のプログラムを上のソースでリコンパイル (とりあえず SendMessageEx は使わないまま) 7. SendMessage を行った後でメッセージを受信して OnMessage が呼ばれるあたり で転ぶようになってしまった... エラーメッセージもコードも出してないのでなんとも言えないとは思いますが、 手順的な間違いはありますか ? どっかに IDirectPlay3 に依存した部分があって、エラーになっているんでしょうか... また、DelphiX が IDirectPlay4 へ対応する予定はないですか ? ちょっと長くなってしまいましたが、以上よろしくおねがいします。
DirectX6 をインストールしていないのではないですか?
はじめまして。 DelphiXをインストールし、サンプルを実行しようとしたら、以下のようなエラーがでます。 「EInfCastErrorクラスの例外を生成しました。Interfaceはサポートされていません。」 これは、どうすればいいのでしょうか? Delphiのバージョンは3を使用しています。 どうか宜しくお願いします。
エッジに関してのご回答、ありがとうございました。 >昔 RIVA128 のビデオカードを買ったとき、 >拡大の際に補間されてしまうバグがありました。 実は現在のビデオカードはRIVA TNTなんです。 ということは・・・直していない・・・!? ついでに最新ドライバです。 こいつはもうCreativeMediaに怒りの投書ですな。 なんなんだこのしまりのない画像は・・・ Inside DelphiX マジで楽しみにしています。 現在格闘ゲームなんかを作っています。もちろんDXです。 いつになったら完成するのやら・・・
こんにちは、ぽうむらです。 Inside DelphiXですか。 チェックしとかなければなりませんね。 それにしても、本が出るなんてすごいですよ。 これからも、頑張ってください。http://ueno.cool.ne.jp/pokumura/
to しぇぞさん >近場の本屋をまわってみたのですがどこにも置いてませんでした. >C MAGAZINE には 5 月末に発売予定って書いてあったけど…. ただいま原稿の執筆が遅れています。出版日が決まれば、この掲示板でお知らせします。 to Bakajin さん >プロパティをStretch = Trueにし、上記をPaintにて表示すると >アンチエイリアシングというか、エッジがボケたような感じで >表示されます。 これはビデオカードのドライバのバグなので、プログラムからオフにすることはできません。 ドライバをアップデートしてみてはどうでしょうか? 昔 RIVA128 のビデオカードを買ったとき、拡大の際に補間されてしまうバグがありました。 >CマガジンでみかけたのですがInside DelphiXという書籍がでるんですね >著者は堀浩之さんです >御暇がありましたら内容を簡単に説明してもらえないでしょうか 内容は DelphiX のチュートリアル・リファレンス・実例(ゲーム)となっています。 >あと関係ないですがInsideWindowsがなくなるのはDelphiユーザー >としては悲しい限りです 私も悲しいですね。毎月購読していましたし・・・ to 岩松 さん >IDirect3DRMMeshBuilder3のメソッド宣言の中で、 > function GenerateNormals: HResult; stdcall; >は > function GenerateNormals(dvCreaseAngle: TD3DValue; dwFlags: DWORD): HResult; stdcall; >では? どうもありがとうございます。早速修正します。 to えるさん >堀さんは、DelphiX というか、DirectX のヘッダの変換にはなにかソフトを >使われているのでしょうか? 100%手書きです(^^;;; >やっぱり、自分で perl script でも書いたほうがいいんでしょうかね。 ># Dr.Dob HeaderConverter や、Ara..なんとかさんの Header Transrator では ># 無理でした、hdtrans は COM/OLE モードとかあるわりに、ダメらしい…。 黒田 Dycoon さんの所で公開されている、H to Pas Converter を使ってみてはどうでしょうか? 下の URL のプログラムの技の中にあります。 http://www.ceres.dti.ne.jp/~dycoon/ to J.Itoh さん to netsoft さん to J.Itoh さん >ただ、まだコンパイルできないサンプルがあったり(プロパティが読み込めないらしい) >します。 Delphi でフォームを表示すると、プロパティが存在しない〜のエラーが出ると思います。 そこで「全てを無視」を選ぶとプロパティが削除されますので、正常にコンパイル出来るようになります。 お手数ですが、Source フォルダの中でフォームを持ったユニットに対し、上記の処理をして下さい。 to BEAT さん >これがあるからVBやめてDelphi買いました。 それはうれしいですね(^^ >フルスクリーン表示のアプリケーション動作時に、MS-IMEのツールバー上にカーソルが >来ると(この時IMEのツールバーは見えていない)、処理をIMEツールバーに奪われてしま >うのか、カーソルの移動が飛び飛びになってしまいます。 フォームの OnCreate イベントで ImeMode := imDisable; としてみてはどうでしょうか? うまくいくと MS-IME が自動的にオフになるはずです。
近場の本屋をまわってみたのですがどこにも置いてませんでした. C MAGAZINE には 5 月末に発売予定って書いてあったけど…. 誰か,もう入手した人はおられますか?
堀さんはじめまして。DelphiXにお世話になっています。 質問なんですが、DxPaintBoxのDIBに直接アクセスし、 画像を描画している状況での現象についてです。 プロパティをStretch = Trueにし、上記をPaintにて表示すると アンチエイリアシングというか、エッジがボケたような感じで 表示されます。 これを停止させることが出来るでしょうか。 遅いパソコンにて実行した折、上記はかかっていませんでした。 ということは、処理に余裕があった場合にかけられるのではないか、 と勝手に推測しています。 実際どうなんでしょうか。また100%停止できる方法も あれば知りたいところです。 長文失礼しました。
CマガジンでみかけたのですがInside DelphiXという書籍がでるんですね 著者は堀浩之さんです 御暇がありましたら内容を簡単に説明してもらえないでしょうか 注文してみようかとおもっております Delphiは情報不足ともいわれますが Delphi用のAPIの本まででているようですし だんだん充実してきてると思います DelphiXのような書籍は、趣味で使ってるような私には うれしい限りです あと関係ないですがInsideWindowsがなくなるのはDelphiユーザー としては悲しい限りです Inside DelphiX楽しみにまってます
DelphiX重宝させていただいております。手始めに、 ポリゴン作成に便利なGepolyLT(*1)というソフトがあったので、 その出力ファイルを.xファイルに変換するプログラムを作成して います。その時に気づいたのですが、DirectX.pasユニットの IDirect3DRMMeshBuilder3のメソッド宣言の中で、 function GenerateNormals: HResult; stdcall; は function GenerateNormals(dvCreaseAngle: TD3DValue; dwFlags: DWORD): HResult; stdcall; では? あと、以前の掲示板に載っていた function GetGeometry(var vcount: DWORD; var vertices; var ncount: DWORD; var normals; var face_data_size: DWORD; var face_data): HResult; stdcall; の追加でMeshBuilder3のメソッドが正常に動作するようになりました。 (使用していないメソッドもまだありますが) *1ASCIIさんからでている山川総司さんの「3Dスクリーンセーバー作成キット」という 本についています。http://www.threeweb.ad.jp/~ads
堀さんは、DelphiX というか、DirectX のヘッダの変換にはなにかソフトを 使われているのでしょうか? 単純に VC++ の STDMETHOD コールが Delphi の interface にならないので、 (他のヘッダで)苦労してます。 やっぱり、自分で perl script でも書いたほうがいいんでしょうかね。 # Dr.Dob HeaderConverter や、Ara..なんとかさんの Header Transrator では # 無理でした、hdtrans は COM/OLE モードとかあるわりに、ダメらしい…。
libフォルダとSourceフォルダに重なった名称のファイルがあったので 削除すると最新版がなんとか動作するようになりました。 ただ、まだコンパイルできないサンプルがあったり(プロパティが読み込めないらしい) します。 詳しくは後程お知らせします。
下と同じくインストールがうまいこといきません。NECのPCなんですけど・・ dpkファイルを開いて、手動でインストールしましたが、これでもよいのでしょうか?
最近、DirectX6.1のランタイムを入れたので、最新のDelphiXにしようと思ったのですが インストーラーが途中で止ってしまい、なかなかインストールされません。 とりあえず私の環境の構成を書いておきます。 NX以前のNECの9821なのでHDDドライブがA,B,Cドライブ、FDDがDドライブです。 WIN95(まだ98にはしてませんが、Win98に相当する機能拡張は実行済み)と Delphi3(純正パッチを当てて3.1相当になってます(Standerd版))はAドライブに あり、DelphiXはCドライブに解凍しました。 ソース内のDelphi3用のパッケージを使ってインストールしても、 サンプルプログラム等が正常にコンパイルできないと言う症状がありました。 とりあえずDX6対応以前のDelphiXに戻しました。(旧バージョンは問題無くインストール 出来て、実行も可能です。)
DelphiX有り難く使わせて頂いてます。 これがあるからVBやめてDelphi買いました。 さて、質問なのですが... フルスクリーン表示のアプリケーション動作時に、MS-IMEのツールバー上にカーソルが 来ると(この時IMEのツールバーは見えていない)、処理をIMEツールバーに奪われてしま うのか、カーソルの移動が飛び飛びになってしまいます。 どうにかして、この現象を回避することはできないものでしょうか?
申し訳ありません。あの後調査したら、 まっさらのフェームに先程のコードを書いても Delphiが落ちることが解りました(^^; どうやら今まで上手く動いていたのを、 勝手に勘違いしてしまっていた様です。 つまりDelphiX は悪くありません(^^;;;;;; いやもう大変失礼しました m(_ _;)m
先程の投稿、改行入れ失敗してしまいました(^^; 失礼しました(^^;;;;;
堀さん、こんにちは。 DelphiX 便利に使用させて頂いています。 さて、今回 DelphiX を使ったゲームをつくっていたのですが、ちょっと困った事態に遭遇してしまいました。 具体的には以下のとおりにすると再現できます。[総合環境から作成します] 1.Samples\Sound\AStream のサンプルを読み込む。 2.uses に shellapi を追加。 3.フォームの適当な場所にボタンを追加。ボタンの click イベントに次のコードを書く。 ShellExecute(Application.Handle, PChar('open'), PChar('http://www02.so-net.ne.jp/~flagyx'), #0, nil, SW_NORMAL); (要するにボタンを押したら、関連つながりでブラウザを起動させて、ホームページを表示させたいのです) 4.コンパイル 5.適当な WAV ファイルをLOOP演奏させた状態で、先程イベントを書いたボタンを押す。 すると、プログラム事態は正常に実行できるのですが、それを一度終了して、もう一度プログラムをコンパイルして実行しようとすると、エラーダイアログに「リストのインデックスが範囲を越えています」「無効なポインタ操作」と出て、DELPHI自体が固まってしまいます。 困ったことに出たり出なかったりするときがあるのですが、演奏するWAVが大きめの方が再現率は高いみたいです。 メモリを破壊しているっぽいのですが…。 これは何かやってはいけない処理をやっているのでしょうか? もしくは ShellExecute を実行する前に何か前処理をしなくてはならないのでしょうか? ちょっと行き詰まってしまいました。 よろしくお教えいただけると嬉しいですm(_ _)m なお、使っている Delphi は 3.1 で、ブラウザは IE 5 です。
細かいことですが IDirect3DRMMeshBuilder3 AddMeshBuilderの引数が間違ってるようです
レスをいただき、ありがとうございました。 自分のソースでは最後にItem.Freeをしていました。 これで、やっと先にすすめそうです。 お手数をおかけしました。
TDXWaveListのPlayの件の 問題は、無事解決しました。 ありがとうございました
始めまして。 ちょっと質問です。 DelphiX をインストールしてみたのですが、 DXWave の Wave プロパティを設定しようとするとエラーが出ます。 「DelphiXWaveEditForm.OldCreateOrder の読み込み中のエラー:プロパティが存在しません」 DXWaveList でも同じです。 環境は Win98 + (Delphi 3.0 + パッチ)です。 Delphi のインストールをしなおしてみてもだめでした。 解決方法はあるでしょうか? よろしくお願いします。
to lofl さん Samples\Sprite\Basic サンプルの OnClick イベントを以下のようにして、 試してみましたが正常に動作していました。ただし、ちょっと修正している個所があります。 ・bmp を解放していなかったので解放するようにした。 ・TBitmap から TDIB に変えた。TBitmap だと正常に動作しないことあり。 ・TImageSprite.Image プロパティに Item を直接指定するようにした。 uses DIB; procedure TMainForm.DXDrawClick(Sender: TObject); var Item: TPictureCollectionItem; bmp: TDIB; Sprite: TImageSprite; begin bmp := TDIB.Create; try Item := TPictureCollectionItem.Create(ImageList.Items); bmp.LoadFromFile('c:\mydisk\Girl80.bmp'); Item.Picture.Graphic := bmp; Item.Restore; finally bmp.Free; end; Sprite := TImageSprite.Create(DXSpriteEngine.Engine); with Sprite do begin Image := Item; Width := Image.Width; Height := Image.Height; end; end; to さぐあろさん >堀さん、こんにちは。お久しぶりです。今日、やっとDelphi4にアップデートしました(^^;。ひき >続き、DelphiXを使わせてもらいます。はー、D3DIM関係のプログラム(自分のです)をまた直さね >ば...。 おお、ついに Delphi 4 にしましたか。Delphi4 だとちょっと重くなってしまうのが難点ですね〜。 私は、Delphi4 で追加された機能(コードエクスプローラー etc.)を片っ端からOFFにしています。 to NAZO さん >TDXWaveListのitemsのPlayをwaitをTrueに設定してその後にClearを呼び出すとそこで >とまってしまいます こういう書き方は悪いのでしょうか? >waitがfalseだと正常に実行されます >まぁ waitをfalseにして適当なsleepをいれればいいのですが みなさんのところではどうでしょうか? すいません。バグがありました。DXSounds ユニットの TWaveCollectionItem.Play メソッドの最後にある if Wait then begin try while NewBuffer.Playing do Sleep(10); finally NewBuffer.Free; end; end; を if Wait then begin while NewBuffer.Playing do Sleep(10); end; に置き換えて下さい。
GetSpriteAt関数の時はたいへんありがとうございました。 また、質問させてください。 ImageListに動的にイメージを読み込んでこれをスプライトにしようとしているのですが、 なぜかうまく行きません。 ImageListにはちゃんと登録できているように見えるのですが・・・ (Items[].Drawではちゃんと表示できるので) いまは次のようにしていますが、どこか変でしょうか。 bmp := TBitmap.Create; bmp.LoadFromFile('Sample.bmp'); Item := TPictureCollectionItem.Create(DXImageList.Items); Item.Picture.Graphic := bmp; Item.Restore; Sprite := TImageSprite.Create(SpriteEngine.Engine); with Sprite do begin Image := DXImageList.Items[DXImageList.Items.Count-1]; Width := Image.Width; Height := Image.Height; end; .dxgにしてItemsに読み込ませるとうまくいくんですが。 質問ばかりで、申し訳ないです。
ログを取らなかったため欠けました。
to you さん >下のCのソースから純粋に書き換えればこうでしょうか? カウンタに Byte 変数を使うのは元がそうなっているとはいえ、 なんか不安ですね(^^;;; これで気が付いたのですが、Delphi 4 で以下のコードを実行すると for ループ内に入ってしまいます。気を付けなくっちゃ・・・ var d, c: DWORD; begin c := 0; for d:=0 to c-1 do raise Exception.Create('おかしいな?'); end; to 時田さん 既に you さんが書かれていますが、これでも出来ると思います。 procedure FrameNaming(frame: IDirect3dRMFrame); const id: Integer = 0; var frameArray: IDirect3DRMFrameArray; c, i: DWORD; child: IDirect3DRMFrame; begin frame.GetChildren(frameArray); c := frameArray.GetSize; if c>0 then for i:=0 to c-1 do begin frameArray.GetElement(i, child); FrameNaming(child); end; frame.SetName(PChar('__'+IntToStr(id)+'__')); Inc(id); end; to Yuuki! さん >早速ですが、TAudioStreamでMS-ADPCM圧縮したWaveファイルを >再生したいのですが、どうしたらいいのでしょうか? 今のところ、圧縮 Wave には対応していません。
Idの宣言忘れてた。
>時田さん 下のCのソースから純粋に書き換えればこうでしょうか? procedure FrameNaming(frame: IDIRECT3DRMFRAME2); var frameArray: IDIRECT3DRMFRAMEARRAY; child: IDIRECT3DRMFRAME; child2: IDIRECT3DRMFRAME2; Str: String; i: Byte; begin frame.GetChildren(frameArray); i := 0; while i < frameArray.GetSize() do begin frameArray.GetElement(i, child); child.QueryInterface(IID_IDirect3DRMFrame2, child2); FrameNaming(child2); Inc(i); end; Str := 'AnimationFrame' + IntToStr(Id); frame.SetName(PChar(str)); Inc(id); end;
はじめまして。Yuuki!といいます。 DelphiXはとても使いやすくて、愛用させてもらっています。 早速ですが、TAudioStreamでMS-ADPCM圧縮したWaveファイルを 再生したいのですが、どうしたらいいのでしょうか?
たびたびすいません。(-_-);; 時田です。 堀さん教えてくださってありがとうございます。(^^) 早速やってみたのですが、なぜか 数回、 for i:=0 to frameArray.GetSize-1 do が回ると、整数のオーバーフローエラーが 出てしまいます。いったいどうすればいいのでしょうか。すいませんが教えてください。(^^;; お願いします。
to 中尾君さん >僕としては IDirectSoundNotify を使ってやりたいんですけど…。 IDirectSoundNotify の使い方は、まず CreateEvent API で イベントオブジェクトを何個か作ります。その後 IDirectSoundNotify.SetNotificationPositions(イベント数, TDSBPositionNotify の配列); TDSBPositionNotify.dwOffset := 通知してもらいたい位置(バイト単位) TDSBPositionNotify.hEventNotify := イベントオブジェクト とし、イベントオブジェクトを設定します。イベントを設定し終わったら 専用のスレッドを作成し、WaitForMultipleObjects API(誤字の可能性あり) でループを回します。ここで専用のスレッドを作成しますが、 ほとんど Sleep 状態なので負荷はあまりかからないと思います。 IDirectSoundNotify の取得方法: バッファを作成するときに、TDirectSoundBuffer の CreateBuffer メソッドを 使って、引数の中の dwFlags メンバに DSBCAPS_CTRLPOSITIONNOTIFY を or します。そうすると IDirectSoundNotify が使えるようになります。 その後 Notify := Buffer.IBuffer as IDirectSoundNotify; とすれは 取得できます。 CreateBuffer メソッドの使い方は SetSize メソッドの 中をみて下さい。 to 時田さん テストしていないのでエラーがでるかもしれませんが、 これでどうでしょうか? procedure FrameNaming(frame: IDirect3dRMFrame); const id: Integer = 0; var frameArray: IDirect3DRMFrameArray; i: Integer; child: IDirect3DRMFrame; { IUnknown かも } begin frame.GetChildren(frameArray); for i:=0 to frameArray.GetSize-1 do begin frameArray.GetElement(i, child); FrameNaming(child as IDirect3DRMFrame2); end; frame.SetName(PChar(IntToStr(id)); Inc(id); end;
レスありがとうございます。>堀さん TAudioStream ってスレッドでバッファを監視してますよね? それって重くなりませんか? 僕としては IDirectSoundNotify を使ってやりたいんですけど…。 ------------------------------- DelphiX って DirectX6 専用って書いてありますが、 DelphiX を使って作ったアプリケーションは、 DirectX5 では動かないんですか?
こんにちは。時田です。NAZOさんのおっしゃるソフトで、 アニメーションファイルを作成することができました。 ありがとうございます。(^_^) またですが、質問があります。 同一アニメーションファイルを読み込むと、うまくいかないと本に書いてあり、 実際そうだったので、本に書いてある方法でその問題を回避したいのですが、 ほとんどC++が読めません。だれか助けてください。 procedure FrameNameing(Frame: IDirect3DRMFRAME); var id: integer; frameArray: IDirect3DRMFRAMEARRAY; Child, Child2: IDirect3DRMFRAME; begin id := 0; Frame.GetChildren(frameArray); これ以下がわからないのです。ってほとんどですが。(^^;; end; 以下本の内容そのまま // FrameNaming // 競合を避けるため、フレームの名前を再設定する void FrameNaming(LPDIRECT3DRMFRAME2 frame){ static int id = 0; // 通し番号 LPDIRECT3DRMFRAMEARRAY frameArray; frame->GetChildren(&frameArray); for(unsigned int i=0;i< frameArray->GetSize() ;i++){ LPDIRECT3DRMFRAME child; frameArray->GetElement(i,&child); LPDIRECT3DRMFRAME2 child2; child->QueryInterface(IID_IDirect3DRMFrame2,(LPVOID*)&child2); FrameNaming(child2); } char str[255]; sprintf(str,"AnimationFrame%d",id); frame->SetName(str); id++; } ちなみに、清3ZさんのかかれたProgramming Guide Bookからの引用です。
to えるさん >○ TSprite などの名称 を TDXSprite にしないか? これをやっちゃうと互換性がとれなくなってしまうので、 すみませんが、無理です。 >○ TSprite などを RegisterNoIcon() で IDE に登録しないか? >→ コンポーネントリストに出てこないのは気持悪いですから > ウィザードでコンポーネントの派生もできませんしね。 TSprite は TObject クラスから直接派生しています。 ですので、コンポーネントとして使用できません。 TSprite はお手軽スプライトという位置づけなので 強力なスプライト機能を使いたいときは、一から 自作するというのがいいのかもしれませんね。 to 時田さん NAZO さんが書かれている通り Delphi 3 以降は 自分で Release しなくても 良くなっています。 Delphi 3 以降はインターフェースの AddRef, Release が 全自動になっているのでとても便利ですね。 to ORAさん おおっ、ORAさんではないですかぁ〜。 to 中尾君さん >DirectSound でバッファのストリーミングをやりたいのですが、 >どうやら、DelphiX はそのへんは全然サポートしてないみたいで、 >再生位置の通知とかどうすればいいか全然わかりません。 ずばり TAudioStream があります。Sound\AStream サンプルを見てみて下さい。 自分で生成した音を再生したい場合、TCustomWaveStream2 を継承すればいいと思います。
高岡です。 っと、ごそごそいぢっていて思った点についてですが、 ○ TSprite などの名称 を TDXSprite にしないか? → 名称空間の衝突の都合です、すでに私は TDXSprite に書き換えています。 TDX**** に統一されてはいかがでしょうか? TSprite が DirectX に強く依存しているかどうかは読みきれてませんが DXConst など uses に含んでいますし、DelphiX のコンポーネントの名称 統一という意味でも行ってもよいのではないかと思います。 ○ TSprite などを RegisterNoIcon() で IDE に登録しないか? → コンポーネントリストに出てこないのは気持悪いですから ウィザードでコンポーネントの派生もできませんしね。 もしかすると、インストーラでインストールしていないのが原因?
どうも、高岡です。 堀さん、サンプルをどうもありがとうございます。 似たような内容のものは自作しており、スプライトが非短形なことなども含めて いろいろとやっていたところでした。 TDXSprite はそのままではスプライト内の点の有効性を返せないので、いろいろ 派生してます。 ゲームに使う場合、スプライトの機能としては内部点の有効性(見えるか、存在す るか)は必須に近いものだと思うので、そこらへんの実装は、やっぱ使うほうがや るもんなんでしょうね。(見えるけど存在しない、見えないのに存在する…などなど) ソースが公開されているのはとても助かります。 とりあえず、サンプルソースは問題なく期待通りの動作を致します。
Delphi3以降では COMオブジェクトは スコープ外にでると自動解放されるそうです アニメーションの件ですが 私はつかってないので詳しくはしらないのですが http://www.edit.ne.jp/~ino4/ にあるツールは便利そうです
なるほどDeleteVisualとAddVisualを使えばよさげですね。(^^) 教えてくれてありがとうございます。そこで、やってみようと思うのですが、 そこでひとつ、前前からの疑問があります。 IDirect3DFrameと、IDirect3DRMMeshBuilderは自分で Releaseしなくてもいいのでしょうか。 Direct3Dプログラミングガイドブックを見ると、Releaseしているのですが それはDelphiXが自動でやってくれているのでしょうか。 教えてください。
はじめまして。ORAと申します。 昨日、DelphiXの新版をダウンロードし、色々と試してみました。 (だいぶ昔にも試したことがありましたが、Delphiに慣れていな かったので、途中で挫折してしまいました・・) 素晴らしいコンポーネントですね。楽々DirectXプログラミングが できてしまいます。(^^) 今までの苦労は何だったのだろう・・・と、遠い目になってしまいます・・。 今後のDelphiXの進展を楽しみにしています。頑張って下さい。http://home4.highway.ne.jp/ora_soft/main/ora.htm
DirectSound でバッファのストリーミングをやりたいのですが、 どうやら、DelphiX はそのへんは全然サポートしてないみたいで、 再生位置の通知とかどうすればいいか全然わかりません。 DirectX に詳しい方、だれか教えてください。 ここの掲示板に迷惑になるといけないので、 レスが長文になるならメールでお願いします。
やりたいことがよく わからないのですが ただ 切り替えるだけなら Frameの AddVisualと DeleteVisual をつかえばいいようなきもしますが どうなんでしょう そういう ことじゃなかったら申し訳ないです
to さぐあろさん >堀さん、お久しぶりです。以前からTDXDrawコンポーネントを使ってて一つの素朴な疑問がありま >した。Direct3Dは1から3(D3D, D3D2, D3D3)があるのに、Direct3DRMのほうは、何故D3DRM3だけ >がないのでしょうか?しょうもない質問ですみませんが、やはり何らかの事情があったのでしょう >か(^^;。 次期バージョンで D3DRM3 と D3DRMDevice3 を追加しました。 to きくおさん >しかしRGB構造体がR、G、Bの順ですから、 > Result := (B shl 16) or (G shl 8) or R; >ではないでしょうか? じゃないと24ビットだけバイトオーダーが逆なような気がするのです。 いわれてみればそうでしたね。ここを変更することによる 影響はあまりなさそうなので次期バージョンで修正します。 to 時田さん >アニメーションさせたいのですが、どのようにすればいいのかわかりません。 私もよく分からない(汗)ので他のところで聞かれては?
堀さん、お久しぶりです。以前からTDXDrawコンポーネントを使ってて一つの素朴な疑問がありま した。Direct3Dは1から3(D3D, D3D2, D3D3)があるのに、Direct3DRMのほうは、何故D3DRM3だけ がないのでしょうか?しょうもない質問ですみませんが、やはり何らかの事情があったのでしょう か(^^;。http://www.hello.ne.jp/kazuya-y/kypro/kyproduction.html
堀さん、回答ありがとうございました。 えっと、ちょっと説明が足りませんでした。 TDirectDrawSurface.GetPixelの中で色ビット数によって 値を返していますよね。ここで、16ビットの場合はpWord^、 で32ビットの場合はpInteger^となっています。 しかし、24ビットの時は with PRGB(Integer(ddsd.lpSurface)+Y*ddsd.lPitch+X*3)^ do Result := (R shl 16) or (G shl 8) or B; となっています。しかしRGB構造体がR、G、Bの順ですから、 Result := (B shl 16) or (G shl 8) or R; ではないでしょうか? じゃないと24ビットだけバイトオーダーが 逆なような気がするのです。 ちなみにFillRectは直値ではなく、ヘルプにあったように with Surface do FillRect( ARect,ColorMatch(ACol) ); とやっています。
こんにちは。時田です。 アニメーションを含むXファイルを 出力できるソフトをもっていないので、 自前で複数の姿勢のXファイルを 読み込んで、それを切り替えることにより アニメーションさせたいのですが、 どのようにすればいいのかわかりません。 いい方法はないでしょうか。
to きくおさん >本題に。TDirectDrawSurfaceのGetPixelとSetPixelについてです。 >24ビットモードの時だけ赤と青を入れ替えていますが、 >このプロパティの動作としては、そのままの値を返す >(またはストアする)のが正しいのではないでしょうか? 一応、加工せずにそのまま返すようになっています。 >というのも、青くFillRectすると赤くなってしまったので。 サーフェース関連で色を決めうちで RGB(0, 255, 0) とかすると 色化けしたりして危険です。こういう場合、ちゃんと ConvertColor メソッドを 使って色を変換した方がいいと思います。 to TIX さん >プログラムを配布し、サポートする大変さはよくわかります。どうか無理せず、 >お体に気を付けて下さいね。陰ながら応援しています。 ううっ・・うれしいです。 >さてさて、ちょっとした質問なのですが(おお、初質問だ)、TDXDrawをフルスクリーン >で表示した場合に、マウスカーソルの位置だけフリップしないような表示になってしまう >のですが、マウス表示をオフにすることは出来ないものでしょうか?いろいろプロパティ >等調べてみたのですが、どうもそれらしいものが見あたらなくて困っちゃってます。 TDXDraw コンポーネントの Cursor プロパティを crNone に設定するとか ShowCursor 関数で切り替えるなどがあります。 to Zin さん >遅いのですが,DelphiXがDirectX6に対応したとの事なので,早速インストールしました. >が,TDXDrawをフォーム(TDXForm)に貼り付けて,実行した所,下記のような例外が表示されました. >『EIntfCastErrorクラスの例外を発生しました.'Interfaceはサポートされていません'』 >意味(エラーの内容)は理解できるのですが,回避策が分かりません. DirectX6 に対応ではなく、DirectX6 専用になりました。 ですので、Windows9x でしか動かないと思います。 DirectX5, 6 両方に対応するには骨が折れますので・・・・
こんにちは。きくおです。 今年もよろしくお願いします。 本題に。 TDirectDrawSurfaceのGetPixelとSetPixelについてです。 24ビットモードの時だけ赤と青を入れ替えていますが、 このプロパティの動作としては、そのままの値を返す (またはストアする)のが正しいのではないでしょうか? というのも、青くFillRectすると赤くなってしまったので。
> ただ描画は多少遅くなってしまいました。Delphi-ML[31569]程ではありませんが > やはり毎回 TDXDraw.Surface.Canvas.Release しているのが原因かもしれません。 参考にならないかもしれませんが、私は速度を重視するので、こんな風にしています。 1.データモジュールを作成してTImageListを配置し、自動生成しないように設定 2.TSurfaceの配列をグローバル変数として宣言 3.初期化時にデータモジュールを生成し、全てTSurface配列にコピー 4.生成したデータモジュールを解放 5.描写するときはTSurface配列からbltfastでコピー こうすると手順は面倒ですが、Canvasを使わなくて済むので処理はだいぶ速くなるかと 思いますです。ちなみにTSurfaceを配列で256個宣言し、全てに256x256の16〜256色の 画像をぶち込みましたが、あまりリソースは喰っていないようです。いかがでしょうか? # あ、この場合は初期化時に画像は1枚1枚ファイルからTSurfaceに直接入れています。 # TImageListにあまり画像を入れすぎると生成時にリソースが足りなくなるかも・・。
明けましておめでとうございます。昨年はいろいろ無茶な要望ばかりふっかけてしまい 本当に申し訳ありませんでした。今年もまた無茶な要望を出してしまいそうですが(汗) あんまし無茶ならさらりと流してやって下さい。無理なら無理でなんとか別の方法を 考えますので(^^ プログラムを配布し、サポートする大変さはよくわかります。どうか無理せず、お体に 気を付けて下さいね。陰ながら応援しています。 さてさて、ちょっとした質問なのですが(おお、初質問だ)、TDXDrawをフルスクリーン で表示した場合に、マウスカーソルの位置だけフリップしないような表示になってしまう のですが、マウス表示をオフにすることは出来ないものでしょうか?いろいろプロパティ 等調べてみたのですが、どうもそれらしいものが見あたらなくて困っちゃってます。 なんかここで聞くにはかなり筋違いな感じもしますが、余裕がありましたら是非教えて 頂けないでしょうか。 ではでは。
はじめまして.Zinと申します. 遅いのですが,DelphiXがDirectX6に対応したとの事なので,早速インストールしました. が,TDXDrawをフォーム(TDXForm)に貼り付けて,実行した所,下記のような例外が表示されました. 『EIntfCastErrorクラスの例外を発生しました.'Interfaceはサポートされていません'』 意味(エラーの内容)は理解できるのですが,回避策が分かりません. これは,どのような場合に発生するのでしょうか?どなたか分かりやすくご説明をお願いします. 別件ですが,私のPCはWindows98とWindowsNT4.0が共存しています. DirectX6のインストール時,インストールするドライブが選択できないのですが,選択できる方法が存在するのでしょうか?現在,DirectX6はWindows98上でしか使用できません. 以上,2点 宜しくお願いいたします.
みなさん、あけましておめでとうございます。 今年もよろしく(^^/ >とりあえず、DXSprite (だっけ?)から DXWindowSprite とかいうのを作り >これを基本ウィンドウクラスとして Form Button などを派生してみたのですが >クリックあたりでピタリと…手が…コードが…。 とりあえず、指定した座標にあるスプライトを取得する関数を作ってみました。 以下の URL にあるので使ってみて下さい。http://www.ingjapan.ne.jp/hori/DelphiXFAQ.html
える%高岡です。 あ、そういえばそんなのも…記憶のどっかに…(汗 とりあえず、スプライト関係遊びまくってます(笑 目標は DirectX な MDI アプリなのですが…む〜ん む〜ん 苦しい。 なんか、DirectX で MDI アプリ(っぽく作る)のに良い方針ってあります? とりあえず、DXSprite (だっけ?)から DXWindowSprite とかいうのを作り これを基本ウィンドウクラスとして Form Button などを派生してみたのですが クリックあたりでピタリと…手が…コードが…。
堀さん返答ありがとうございます。DelphiXのおかげでゲームが 実現できるようにすることができました (^^ TPictureCollectionItemの件ですが、なるほど。これなら枚数が 少なくて済みそうです。しかも今になってサンプルプログラムを 見返すと、ちゃんとそう使ってますね.. ともあれ、これで高速&低消費量を実現することができそうです ありがとうございました _o_
i?, えるさん、こんにちは。TDXImageList は複数の画像を持つ代わりに、 一つの画像に入っている複数のパターンを描写することも可能です。 例えば、一つのパターンが 64x32 ピクセルだとすると TPictureCollectionItem の PatternWidth, PatternHeight プロパティを それぞれ 64, 32 に設定し、 DXImageList1.Items[画像番号].Draw(DXDraw1.Surface, X, Y, パターン番号); とすれば任意のパターンを描写することが出来ます。これなら一つの画像しか利用しないので いいと思います。
えるさんアドバイスありがとうございます _o_ ご指摘のように TImageListをサイズごとに用意し、 TDXDraw.Surface.Canvasに描き込む ようにすると GDIリソース使用率が 20% -> 3% まで激減しました ! ただ描画は多少遅くなってしまいました。Delphi-ML[31569]程ではありませんが やはり毎回 TDXDraw.Surface.Canvas.Release しているのが原因かもしれません。 # でも Flip直前に Releaseとかはできないし.. 特に時間に厳密ではないゲームなのでこのまま利用したいと思います。http://www.page.sannet.ne.jp/aihatena/
える%高岡です。 私もスプライト用にイメージを300枚ほど入れてますけど、TDXImageList は TImageList とは違って、1枚づつ個別にイメージを持つのでそういう仕様だと 思ってます。 それらの個々のイメージを1枚の画像にして、必要な時に必要なものを取り出す ようなコンポーネントを派生させてみてはいかがでしょうか? それらの画像が固定サイズならそんなに難しくはないです、私は固定サイズの等 倍なのでちょっと面倒なことしてますけど(汗 TImageList が基本的に管理機能を持っているので TImageList を利用すれば 簡単かと思います。 # 自分で管理してもそんなに難しくないです。ハイ
初めまして、ボードゲームのねとわく化に DelphiXを使わせていただいています。 ネットワークゲームなため、動作確認のために1台のマシンで複数立ち上げてみているのですが 一つ起動するたびにGDIリソースを20%程食ってしまい、Delphi起動時で2つ、非起動時で 4つが限界となっています。 #以前 32bit bmpで50個程入れていたときは、再起動直後のマシンで1つも起動できない人も.. 現在 TDXImageListに 64x64未満のBitmap(256色)を100個程読み込んでいるのが原因かと 思いますが、DelphiXを使いつつ、この100個を常に読み込んだ状態で、 なるべく GDIを消費しないようにする方法はありますでしょうか?
nazoさん> 確認したのですが、Intervalを1か0にして、イベントでEXITですぐ抜けるように しても、CPU占有率が100%になってしまうんです(^^; といって、インターバルを下げると、余裕があっても処理が遅くなったりするのが なんとも・・。
NAZOさん、どうもです。 確認してくるなら問題無いですね。
確かに、X5に退行したことで、せっかくX6で対処したバグが再現 されるのも困りものですね。 わたしのアプリも、いっその事X6専用にしてしまおうかとも考え たんですが、わたしのアプリは、X5どころかX4くらいで事足りる 程度のものなので、それに対してわざわざX6強要するのももったい ないなーと思って要望を出した訳です。 まあ、軽い気持ちで書いた要望なんで、軽く受け流してください。(^^; 堀さん: > 実は DirectX5 用 DelphiX の最新版は DelphiX 98.6.03 です・・・・ 御回答ありがとうございます。では、これを使わせていただく事に します。
ドライバは 復元できたとおもいます また インストール時に確認してきました
こんにちは。 確かにTIXさんの言うとおり、DirectXのバージョンのせいでバグが出たら それはそれで困りますね。 確認したいのですが、以前はインストール時にビデオカードのドライバが 書きかえられて不具合が出るとか、そういった問題があったと思うのですが、 6は大丈夫でしたっけ? 強制的に書きかえたりはしない、とかいった内容の記事を見たような気も するのですが。インストール時にそういうことをされないなら6オンリーで 良いのですが。
to きくおさん >DirectX6を必要とする機能ってどんな所なんでしょうか? >私はDirectDrawとDirectSoundが動いてくれれば良いのですが、 >そこも関係してきますか? 主に Direct3D ですね。シングルパスマルチテクスチャなどを バリバリ使いたかったので・・・・ to まーきーさん >もし、最新版での5以下のサポートは無理だということであれば、 >5をサポートしている版で、最新のものを頂けないでしょうか。 >ちなみに、当方が所持しているのはDelphiX.6.03です。 実は DirectX5 用 DelphiX の最新版は DelphiX 98.6.03 です・・・・
初心者な意見ですが CPU占有率がもし 取得できるなら 占有率が高いときは イベントが発生しても 処理をしないで すぐに EXIT したら だめでしょうか?
どうも、TIXです。お久しぶりです。 TDXTimerを使用しています。 Intervalに0を指定して可能な限り速さで動くようにしているのですが、 どうもCPU占有率が100%に達してしまい、他のアプリに支障をきたして いるようです。 かなり無茶かと思うのですが、例えばCPU占有率70%を維持しつつ、可能な 限りのスピードでイベントを発生させたりできないでしょうか・・(汗) いつも変な質問ばかり申し訳ありません m(_ _;)m # 個人的にはDirectXに関しては6専用でいいと思うのですが・・。 # おいらはDirectX6をインストするようユーザに通知していて # それで全く問題ありません。 # それに・・DirectX5に退行するとX6で対処済みのバグとかが # 再現しそうでイヤだなぁ(^^; # 個人的な意見です。気分を害されたら申し訳ありません m(_ _;)m
堀さん、こんにちは。 私もまーきーさんと同じくDirectX5以下でも動いてくれたら なぁと思います。 DirectX6を必要とする機能ってどんな所なんでしょうか? 私はDirectDrawとDirectSoundが動いてくれれば良いのですが、 そこも関係してきますか?
#すみません。文字化けが起きたので再投稿します。文字化けが #起きた投稿は、できれば削除して下さい。 堀さん、初めまして。まーきーという者です。 Delphiを利用して、DirectXの機能を使ったフリーウェアを制作して おり、DelphiXは大変重宝しています。 さて、DelphiXに関して、要望があります。 DelphiXの最新版はDirectX6専用になっていて、これを利用して 作ったプログラムは5以下が入っているシステムでは動作しない ようですが、これを、6特有の機能を使ってない場合は5以下が 入っているシステム上でも動くようにして頂きたいのです。 不具合など色んな事情で6を入れてない人が結構いるようなので、 できるだけ多くの環境で動かせるように、5以下でも動くように したいのです。 もし、最新版での5以下のサポートは無理だということであれば、 5をサポートしている版で、最新のものを頂けないでしょうか。 ちなみに、当方が所持しているのはDelphiX.6.03です。 よろしくお願いします。
お久しぶりです。ごきげんいかが(^^;? さて、このたびWindows98を導入しまして、 そのついでにUSBスピーカーなんていうものを 購入しちゃってコノヤロウ(買ったのはローランドの MA−150Uです)。 さて、このスピーカーはデジタルという側面(なんか日本語が 変だにゃー)があるので、DelphiXで動くかどうか が心配(Win98をインストールするときにDelphiごと 消した)。NXに付属のサウンドで動かず、泣く泣くSoundBlaster を購入した僕としては興味津々。 実行したら報告します。
なるほど、ZBufferをTrueにしたら、きちんと表示されました。(^_^) ありがとうございます。 でも、なぜか張ったテクスチャの色がおかしい、、 24色ビットマップだからかなぁ。 それから、なぜか背景が点滅してしまいます。 原因おわかりの方お教えください。
堀さんこんにちは、ぽくむらです。 DelphiXでパレットを設定すると、使ってない色とか重複している いろは勝手に削除されているようですけど、 こうならないようにするにはどうすればいいんでしょうか? それと、一応DelphiXを使ったゲームが有りますので、 よろしければ見てください。
時田さんへ > DelphiXのサンプルプログラムや、DelphiXで作った自作ソフトで > 読み込むと、表示が変になってしまうXファイルがあるのですが、・・・ これって、もしかして隠れていなければならないはずのものが表示されるというものではありませんか? (私はDelphiXに慣れていないころに悩んでしまったので・・) もしそうであれば、DXDrawのOptionプロパティのZBufferの設定が無効になっているせいです。Trueに替えればなおります。 ぜんぜん違う件でしたらごめんなさい。。http://www.surfline.ne.jp/kanasaki/
堀さん、こんにちは。ちょっとお聞きしたいのですが、IDirect3DRMMeshBuilder.Loadメソッド で、パラメータの中にTD3DRMLoadTextureCallBackがあります。これはどのように使えばいいの でしょうか?すみませんが、よろしくお願いします。 時田さんへ 表示が変になる、というのはもしかしてテクスチャのことでしょうか?テクスチャの向きがおかし くなるのでしたら、私も経験しています。ちなみにそのサンプル画像は私のHPにのせてますが (^^;。http://www.hello.ne.jp/kazuya-y/kypro/kyproduction.html
お久しぶりです。ここは毎週、ちらちら覗いています。 さて、DelphiX でいろいろやりだしたのですが、マウスでクリックした位置に あるスプライト(複数が重なっている)の、一番上(Z座標の大きいもの)って 簡単に手に入るものでしょうか? DXSprite.pas と Help に目を通した限りでは…ちょっとわかんない…ってところです。 TSpriteEngine を継承して自作して管理できるようなのを作らないと駄目かな? と思ってますが…どうでしょう。 現状でスプライトたちは結構ツリー状になっていますが、クリックした位置のスプライト が取れたら、その親の親の…っと目的のスプライトまでたぐるのは難しくないので。 感覚的には、DXDraw.OnMouseClick で、 var here: TSprite; begin here := DXSpriteEngine.Engine.GetSpriteAtPos(X, Y); // 座標系調整もいるかな… if here <> nil then begin (* スプライトクリックした時の処理 *
堀さんご返事ありがとうございました。 またちょっと教えていただきたいことがあります。 一般のxファイルビューワで表示させるときちんと表示されるのに、 DelphiXのサンプルプログラムや、DelphiXで作った自作ソフトで 読み込むと、表示が変になってしまうXファイルがあるのですが、 これはどうすればきちんと表示されるのでしょうか。 なにか処理が足りないのでしょうか。
初めて書込みます。loflと申します。 DelphiXという便利なコンポをありがたく使わせていただいております。 まだ使い始めたばかりなのですが、ちょっと詰まったので質問させてください。 試しに実行中にBMPファイルを読み込むようなプログラムを作っています。 そこで、ImageListに動的に読み込ませているのですが、 一度ImageList.Items.Clear をしてしまうと同じように動的に読み込ませようとしてもうまく行きませんでした。 Clear後には何か特別なやり方があるのでしょうか。 読み込んで表示するだけなので、ImageListなど使わないほうがよいのかもしれませんが、 もっと簡単な方法があるというときには教えていただきますと幸いです。
時田さん、こんにちは。 >同じオブジェクトをたくさん作りたいので、Cloneを使用したいと思うのですが、 >使い方がわかりません。少し教えていただけないでしょうか。 試していませんが、 var Mesh, DupMesh: IDirect3DRMMeshBuilder; Mesh.Clone(nil, IID_IDirect3DRMMesh, DupMesh); var MeshBuilder, DupMeshBuilder: IDirect3DRMMeshBuilder; MeshBuilder.Clone(nil, IID_IDirect3DRMMeshBuilder, DupMeshBuilder); の様に使えばいいと思います。
kana さん、こんにちは。 >TDXDrawでMeshBuildeのGetVerticesを使って頂点データを取得しようとしたのですが、 >頂点データと法線データが格納される引数の型がTD3DVectorの参照型となっています。(DirectX.pasで) >GetVerticesは初めて使おうと思ったので、使い方に自信はないのですが、 (^_^; >TD3DVectorの配列が戻ってくるのだと思います。?? とりあえず var vertices, normals: array[0..100] of TD3DVector; face_data: array[0..100] of DWORD; GetVertices(vcount, vertices[0], ncount, normals[0], face_data_size, face_data[0]); とすればコンパイルが通ると思います。
こんにちは。時田です。 同じオブジェクトをたくさん作りたいので、Cloneを使用したいと思うのですが、 使い方がわかりません。少し教えていただけないでしょうか。 (ヘルプをみてもC++なので、、、(^^;;
TDXDrawでMeshBuildeのGetVerticesを使って頂点データを取得しようとしたのですが、 頂点データと法線データが格納される引数の型がTD3DVectorの参照型となっています。(DirectX.pasで) GetVerticesは初めて使おうと思ったので、使い方に自信はないのですが、 (^_^; TD3DVectorの配列が戻ってくるのだと思います。?? ご報告まで・・http://www.surfline.ne.jp/kanasaki/
軍荼利さん、こんにちは。 >AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも >明らかに速度が落ちるようです。 >堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、 >とても有り難いんですが、そういうのは無理ですか!? いま、ActiveMovie(DirectShow) をやる気力がありません・・・・ ですので、無理です。ごめんなさい。
TIX さん、こんにちは。堀です。 >ええと、TDXDrawを使って画面表示をしているのですが、Window表示と >フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。 Initialize メソッドを実行する必要があります。Graphic\DXImageList サンプルの中の OnKeyDown イベントハンドラに切り替えるコードが入っています。 >>TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。 >これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい! そうです。
度々すみません。TIXです。 ええと、TDXDrawを使って画面表示をしているのですが、Window表示と フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。 ソースはこんな感じです。 procedure TBMS.ChageView; var a:TDXDrawOptions; begin a:=DXD.Options; if doFullScreen in a then exclude(a,dofullscreen) else include(a,dofullscreen); DXD.Options:=a; end; なにか手順が足りないのでしょうか?宜しくお願いします。
どうも、TIXです。早い対応、非常に感謝です。 >TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。 これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい! >また Stop メソッドで現在再生している音をすべて停止するようにしました。 おおお・・ありがとうございます。現在のソースはplay直前にstopをかけているので、 VerUpしたら効果がすぐ現れそうですね。 次Ver楽しみにしてます!本当にありがとうございました! m(_ _)m
AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも 明らかに速度が落ちるようです。 堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、 とても有り難いんですが、そういうのは無理ですか!? 勝手なお願いで申し訳ありませんが… m(__)m
お世話になっております。 私もRIVAユーザーなのでご報告を。 ASUSのAGP-V3000ですが、サンプルは正常に動いてます。
TDXDrawでMeshBuildeのGetVerticesを使って頂点データを取得しようとしたのですが、 頂点データと法線データが格納される引数の型がTD3DVectorの参照型となっています。(DirectX.pasで) GetVerticesは初めて使おうと思ったので、使い方に自信はないのですが、 (^_^; TD3DVectorの配列が戻ってくるのだと思います。?? ご報告まで・・http://www.surfline.ne.jp/kanasaki/
軍荼利さん、こんにちは。 >AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも >明らかに速度が落ちるようです。 >堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、 >とても有り難いんですが、そういうのは無理ですか!? いま、ActiveMovie(DirectShow) をやる気力がありません・・・・ ですので、無理です。ごめんなさい。
TIX さん、こんにちは。堀です。 >ええと、TDXDrawを使って画面表示をしているのですが、Window表示と >フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。 Initialize メソッドを実行する必要があります。Graphic\DXImageList サンプルの中の OnKeyDown イベントハンドラに切り替えるコードが入っています。 >>TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。 >これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい! そうです。
度々すみません。TIXです。 ええと、TDXDrawを使って画面表示をしているのですが、Window表示と フルスクリーン表示を切り替えようと思ったのですが、うまく切り替わりません。 ソースはこんな感じです。 procedure TBMS.ChageView; var a:TDXDrawOptions; begin a:=DXD.Options; if doFullScreen in a then exclude(a,dofullscreen) else include(a,dofullscreen); DXD.Options:=a; end; なにか手順が足りないのでしょうか?宜しくお願いします。
どうも、TIXです。早い対応、非常に感謝です。 >TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。 これはもしや1と設定しておくと重複再生されなくなる機能ですか?す・・すばらしい! >また Stop メソッドで現在再生している音をすべて停止するようにしました。 おおお・・ありがとうございます。現在のソースはplay直前にstopをかけているので、 VerUpしたら効果がすぐ現れそうですね。 次Ver楽しみにしてます!本当にありがとうございました! m(_ _)m
AVIを再生するのに、TMediaPlayerを使っているのですが、ActiveMovieで再生するときよりも 明らかに速度が落ちるようです。 堀さんのTDXDrawに最適化されたようなAVIプレーヤコンポーネントが存在すれば、 とても有り難いんですが、そういうのは無理ですか!? 勝手なお願いで申し訳ありませんが… m(__)m
お世話になっております。 私もRIVAユーザーなのでご報告を。 ASUSのAGP-V3000ですが、サンプルは正常に動いてます。
>Riva128(Viper V330)なマシンで試したけど、結果は同じでした。 私のはカノープスの PWR128P ですが、ちゃんと機能しています。おそらく ドライバの方がサポートしていないのだと思います。 >ひとつ気になるのは、最初にサンプルのソースをコンパイルしようとした時に >DirectX ユニットが二重定義だといわれたので、実現部のuses節を >コメントアウトしたことです。 これは関係ありませんです。
Riva128(Viper V330)なマシンで試したけど、結果は同じでした。 ひとつ気になるのは、最初にサンプルのソースをコンパイルしようとした時に DirectX ユニットが二重定義だといわれたので、実現部のuses節を コメントアウトしたことです。 これで何か影響が出たのでしょうか?
TIX さん、こんにちは。堀です。 >えとですね、DirectSoundを使って音を鳴らしているのですが、 >この音を止める方法はないでしょうか? > >具体的にはTDXWaveListを使っているのですが、同時に何音も >鳴らすので、同じTWaveCollectionItemを鳴らす場合に一旦 >以前に再生したのを停止させたいのです。 >STOPなるメソッドがあったので使ってみたのですが、ループ再生 >を止める為のモノらしく、止まってくれません。 TWaveCollectionItem に MaxPlayingCount プロパティを追加しました。 また Stop メソッドで現在再生している音をすべて停止するようにしました。 >P.S. >同時発音数ってどのくらいが限界なのでしょう? DirectX 6 SDK 付属の DirectX Info Viewer で見たら、うちのサウンドカード SoundBlaster AWE32 では最大同時発音数は 25 でした。
どうも、TIXです。あれから少々勉強してやってまいりました。 えとですね、DirectSoundを使って音を鳴らしているのですが、 この音を止める方法はないでしょうか? 具体的にはTDXWaveListを使っているのですが、同時に何音も 鳴らすので、同じTWaveCollectionItemを鳴らす場合に一旦 以前に再生したのを停止させたいのです。 STOPなるメソッドがあったので使ってみたのですが、ループ再生 を止める為のモノらしく、止まってくれません。 どうぞよろしくお願いします。 P.S. 同時発音数ってどのくらいが限界なのでしょう? なんだか重ねすぎたのか、音が鳴りきらない状態 に陥るようになりました。 では!
直接インストールしたら成功しました。 ありがとうございました。
軍荼利さん、こんにちは。堀です。 >ウチのビデオカードは比較的新しい i740 搭載の ASUSTeK AGP-V2740 ですが、 >ガンマ調整って、この辺の結構有名なビデオチップの製品でも対応していない物なのでしょうか!? こういうのは情報が無いのでよく分からないですが、RIVA128 では対応していました。
>すいません。今 DelphiX のソースコードを見たらガンマ調整が使用可能か判定する >部分にバグが見つかりました。実際はガンマ調整が出来ないのに使用可能になっていました。 バグでしたか。確認ありがとうございます。 >ですので、それはたぶん軍荼利さんのビデオカードはガンマ調整に対応していないんだと思います。 ウチのビデオカードは比較的新しい i740 搭載の ASUSTeK AGP-V2740 ですが、 ガンマ調整って、この辺の結構有名なビデオチップの製品でも対応していない物なのでしょうか!?
時田さん、こんにちは。堀です。 >おっしゃるとおり、A:\DelphiX (98なのでAはHDDです。) >というところに移したのですが、何も変わりませんでした。 >いったいどうすればいいのでしょう。 DelphiX_for4.dpk を直接 Delphi で開いてコンパイルしてもうまくいきませんか? コンパイルできなかった場合、出たエラーメッセージを教えてください。
堀さんご返事ありがとうございます。 おっしゃるとおり、 A:\DelphiX (98なのでAはHDDです。) というところに移したのですが、何も変わりませんでした。 いったいどうすればいいのでしょう。
時田さん、こんにちは。堀です。 >Delphi3から4に変えたのですが、Delphi4用DelphiXが >インストールできません。 >Install_ for4.exe を実行すると、「ヘ プを組み込みますか。」 >のダイアログを閉じた後、「コンパイルできませんでした。」 >と表示されてしまいました。どうすればインストールできるのか >教えて下さい。 DelphiX をインストールしているフォルダの名前が "c:\Program Files\Borland\Delphi4\VCL\DelphiX" のように長いと そうなることがあります。"c:\DelphiX" のように短い名前のフォルダに DelphiX をインストールし直してください。
軍荼利さん、こんにちは。堀です。 >DellphiX で、TDirectDrawSurface.GammaControl の使い方がハテナです。 >何をどう試してみても画面に変化がありません。 >DelphiX のサンプルを実行してみても、画面に変化が見られません。 >どうなっているのでしょう? すいません。今 DelphiX のソースコードを見たらガンマ調整が使用可能か判定する 部分にバグが見つかりました。実際はガンマ調整が出来ないのに使用可能になっていました。 ですので、それはたぶん軍荼利さんのビデオカードはガンマ調整に対応していないんだと思います。
こんにちは、初めまして。軍荼利です。 DellphiX で、TDirectDrawSurface.GammaControl の使い方がハテナです。 何をどう試してみても画面に変化がありません。 DelphiX のサンプルを実行してみても、画面に変化が見られません。 どうなっているのでしょう? 環境は、DelphiX6 + Delphi4Pro + Win98 です。
こんにちは。時田です。 Delphi3から4に変えたのですが、Delphi4用DelphiXが インストールできません。 Install_ for4.exe を実行すると、「ヘルプを組み込みますか。」 のダイアログを閉じた後、「コンパイルできませんでした。」 と表示されてしまいました。どうすればインストールできるのか 教えて下さい。 (Delph3の時は、前のバージョンのDelphiXが きちんとインストールできていました。) 使用機種はNECの98で、OSは95です。
どうもひさしぶりです。ぽくむらです。 ホームページ開設したので、みにきてください。 相互リンクも大歓迎ですので、 もししてくれる人がいれば、僕のところの掲示板か メールにてお知らせください。 それでは〜。
自分で質問しておきながら、忙しくて質問したのさえ忘れていた(^-^; 失礼極まりないHalerです。 Horiさん、質問に答えていただいて、ありがとうございました。 # 指定ドットからオブジェクトをっていう # 質問でしたhttp://www.vector.co.jp/authors/VA005806/
こんにちは。返答ありがとうございます。 BMP画像の一部をbltfastでコピーして使う場合どうすれば いいのかな・・と考え、DXDIBに予め読み込ませておけばい いのかなと考えていました。でもやはりそれは無理なので すね・・。 本来このような質問はDelphiXコンポーネントと直接関係 ないので、不適切では・・と後で気付きました。大変失礼 しました。ちゃんとDirextDrawを勉強してから出直します。 それでは!またちょくちょく見に来ますね。
TIX さん、こんにちは。 >DXDrawのsurfaseにDXDIBに読み込ませた画像を >bltfastでコピーできないかな・・と言う >話なのですが、可能なのでしょうか。 DXDIB はサーフェースではないので BltFast メソッドでコピーすることは出来ません。 サーフェースの Canvas を使ってください。
堀さん、ありがとうございました。
すみません。説明が足りませんでした。 DXDrawのsurfaseにDXDIBに読み込ませた画像を bltfastでコピーできないかな・・と言う 話なのですが、可能なのでしょうか。 初歩的すぎる質問申し訳ありません。
きくおさん、こんにちは。 >TPictureCollectionItemについて教えてください。 > >DDrawはたしか画面サイズより大きなサーフェスは作れない仕様だと >思うのですが、TPictureCollectionItemにはそのような大きなビット >マップは設定できますか? >ちなみにTPictureCollectionItem.SystemMemoryはTRUEです。 TPictureCollectionItem は PatternWidth, PatternHeight プロパティに 0 以外が指定されている場合、自動的に複数のサーフェースに分割します。なので ・PatternWidth, PatternHeight プロパティが 0 の場合 SystemMemory プロパティが True だと大丈夫だと思います。 ・PatternWidth, PatternHeight プロパティが 0 以上かつ、 画面のサイズ以下の場合 SystemMemory プロパティに関係なく大丈夫だと思います。
こんにちは。 TPictureCollectionItemについて教えてください。 DDrawはたしか画面サイズより大きなサーフェスは作れない仕様だと 思うのですが、TPictureCollectionItemにはそのような大きなビット マップは設定できますか? ちなみにTPictureCollectionItem.SystemMemoryはTRUEです。
こんにちは。 >ここは順番が違ってもバグにはならなかったと思います・・・・・ そ、そうですか。 なにが原因だったのだろう・・ とにかく直ったので、ありがとうございましたって、おおざっぱな(^^; jun
中村さん、こんにちは。 >どんどんプログラムを簡略化していくうちに原因と思われる部分が分かった >のですが、どうやら「TControlBarを使うと発生する」らしいのです。 >(新規プロジェクトに TControlBar をフォームに貼り付けただけで発生) こちらで試してみましたが、なにも異常ありませんでした。 ただし、Delphi 4 Professional ですが。
牧山さん、こんにちは。 > DeleteDC(DC); > DeleteObject(BitmapHandle); > >の順番が違っているのが原因でした。わからなかった〜・・・。 >勉強になりました、ありがとうございました。 ここは順番が違ってもバグにはならなかったと思います・・・・・
堀さん、はじめまして。 Delphi4CSで作成したプログラムのメモリリークチェック用に memcheck を 使用させて頂いたのですが、いきなり「14回メモリーを解放し忘れています」 の文字が・・・ どんどんプログラムを簡略化していくうちに原因と思われる部分が分かった のですが、どうやら「TControlBarを使うと発生する」らしいのです。 (新規プロジェクトに TControlBar をフォームに貼り付けただけで発生) 実際のところ、原因はなんなのでしょうか。 ・Delphi,VCLのバグ ・memcheck が Delphi4 に対応してない ・こちらの環境の問題(他では発生せず) ・その他
堀さん、こんにちは。 さっそくのレス、ありがとうございます。 よくよく調べてみた結果、 DeleteDC(DC); DeleteObject(BitmapHandle); の順番が違っているのが原因でした。 わからなかった〜・・・。 勉強になりました、ありがとうございました。 あと、題名がありませんでした、すみません。 netcom@alles.or.jp jun
TIX さん、こんにちは。 >ただ、少し疑問に感じた事があったのでちょっと・・ >TDxDraw.Surface.bltfastのflugなのですが、 >何を指定しても「未定義の識別子」と出てしまうんです。 >これってインストに失敗してるのでしょうか? >稚拙な問題ですみません(^^; これは、BltFast メソッドの Flag は DirectX ユニットで宣言されています。 ですので、DirectX ユニットを Use すればいいと思います。 >それと、DIBからSurfaceにコピーする術はないのでしょうか・・ DIB とは何の事を指しているのでしょうか? TDIB、あるいは HBitmap?
どうも!delphi3を使っています。delphiXを使わせて頂いてますが、 凄いですね、これは。 ただ、少し疑問に感じた事があったのでちょっと・・ TDxDraw.Surface.bltfastのflugなのですが、 何を指定しても「未定義の識別子」と出てしまうんです。 これってインストに失敗してるのでしょうか? 稚拙な問題ですみません(^^; それと、DIBからSurfaceにコピーする術はないのでしょうか・・
牧山さん、こんにちは。 自分で LoadBitmap したり、CreateCompatibleDC した場合、以下のようにしないと 解放したつもりでも実は解放されていなかったということが起こり得ます。 var DLLHandle: THandle; BitmapHandle, OldBitmap: HBitmap; DC: hDC; begin DLLHandle := LoadLibrary(pchar(DLLName)); BitmapHandle := LoadBitmap(DLLHandle, PCHar(BitmapName)); DC := CreateCompatibleDC(0); OldBitmap := SelectObject(DC, BitmapHandle); StretchBlt(Surface.Canvas.Handle, 0, 0, 50, 50, DC, 0,0, 25,25, SRCCOPY); Surface.Canvas.Release; SelectObject(DC, OldBitmap); DeleteDC(DC); DeleteObject(BitmapHandle); FreeLibrary(DLLHandle); end;
(無題) 投稿者:牧山 投稿日:11月10日(火)17時27分29秒
以前に書いた下のソースですが、
アプリ内で繰り返すと、メモリが消費されてウィンドウズがハング
してしまいます。
BitBlt でも同じです。
サーフェスのcanvas を使うのに何か、制約がありますか?
もちろんDeleteObjectで余計なものは消しています。
対策がありましたら、教えてください。
よろしくお願いします。
ddh := createcompatibleDC(0);
Selectobject(ddh,hDIB);
StretchBlt( Surf2.canvas.handle, // o-Handle,
0,0, // o-x, o-y
208*2, 168*2, // o-w, o-h
ddh, // s-handle
0,0, // s-x, s-y
208,168, // s-w, s-h
SRCCOPY); // op-code
Surf2.Canvas.Release;
netcom@alles.or.jp MAKIYAMA
メッシュの反転プログラム 投稿者:さぐあろ 投稿日:11月10日(火)01時45分14秒
堀さん、こんにちは。DelphiXを使ったアプリを作ってみました。私の個人仕様なので何ですが、 よろしかったら使ってみてください。これは、xファイルから読み込んだオブジェクトの向きを反 転させるだけのものです。すなわち、メッシュを180度回転させるプログラムです。反転させた オブジェクトはそのままセーブできます。 また、よろしかったらご意見、ご感想をお聞かせください。
RE:D3Dでドット取得 投稿者:堀 投稿日:11月08日(日)09時23分26秒
FAQ 集にそのサンプルを追加しましたので見てみてください。 Direct3D RM の「画面の指定した座標にあるオブジェクトを知りたい。」です。
D3Dでドット取得 投稿者:Haler 投稿日:11月07日(土)17時22分28秒
D3Dでマウスでクリックするタイプのマップを作りたいと考えています。 で、困ったのは、マウスでクリックしたとき、そのマウスカーソルの指すメッシュがどれかをどうやって取得するかなんですが、何かいい方法はないでしょうか?
OHD 投稿者:OHD 投稿日:11月05日(木)23時25分07秒
Delphi-BCBに移行した者さん 早速参考にさせてもらいます ありがとうございました
RE : IMのサンプル 投稿者:Delphi-BCBに移行した者 投稿日:11月05日(木)15時05分21秒
DelphiXは使っていなかったと思いますが DelphiのIMサンプルがあったような気がします。
RE:DirectXはぢめるにあたって 投稿者:堀 投稿日:10月29日(木)17時41分49秒
えるさん、こんにちは。 >DelphiX で Direct3D つかって遊んでみたいんですが、Direct3D どころか、DirectX 関連を >全然扱ったことないんで、四苦八苦してる状態です。 >どなたか、よい本やホームページとかあればご紹介くださいませんか? Direct3D は C++ で書かれていますが、清水亮氏の「Direct3D プログラミングガイドブック」 などがいいと思います。DirectX についてはよくわかりません。 >自分でいろいろ探ってみたりもするんですが、C/C++の記事が多く、それらを解読できない >こともないんですが、DelphiX がどこまでカプセル化してるとかもよくわかってない >状態です。DelphiX のソースを読んだほうがいいでしょうか? 私はカプセル化とかあまり意識していないのですが、基本的な部分では DirectX と同じような構成にしています。一度 DelphiX のソースコードを 解読することをおすすめします。
IMのサンプル 投稿者:OHD 投稿日:10月27日(火)01時42分33秒
DelphiXでのIMのサンプルなど どこかにないでしょうか? 内容は何でもOKです お願いします
↓解決しました 投稿者:牧山 投稿日:10月26日(月)23時37分47秒
下の件、解決しました。 lh := LoadLibrary(pchar(Dllname)); BH := loadbitmap(lh,pchar(filename)); ddh := createcompatibleDC(0); Selectobject(ddh,BH); StretchBlt(Surf3.canvas.handle, 0,0, 50, 50, ddh, 0,0, 25,25, SRCCOPY); って感じですね。 Release ってやったら、アプリが終了してしまいました。 正しくは Surf3.release でした。 これで、Direct-Xへ移行できそうです(^^)
DLLからBITMAPを読む方法は? 投稿者:牧山 投稿日:10月26日(月)18時16分42秒
始めまして、牧山と申します。 DElphiXは、すばらしいですね、まさに求めていたものです。 これで、DIRECT-Xに乗り換えられるかも。 DXDRAWに関してですが、どうしてもDLLからサーフェスにBITMAPを読み込む 方法が分かりません。 いろいろ試してみたのですが・・・。 もし、方法がありましたら教えてください。
サンプルはどこに 投稿者:時田 投稿日:10月25日(日)01時17分04秒
こんばんは。時田です。 DelphiXを使ったサンプルはどこかにありませんでしょうか。 コンポについてくるもの以外でということです。
β版公開!! 投稿者:ぽくむら 投稿日:10月23日(金)12時15分28秒
こんにちは、ぽくむらです。 前からいっていたゲームにめどがたってきましたので、 友達のページにアップします。 アドレスはこちら http://www.cool.ne.jp/h10i15/fpage.htm ご意見とかあれば、メールでお知らせください。 それでは。
DirectXはぢめるにあたって 投稿者:える 投稿日:10月21日(水)05時15分05秒
こんちわ、ここにこんなこと書くのはハズレてるかな?とも思いつつ DelphiX で Direct3D つかって遊んでみたいんですが、Direct3D どころか、DirectX 関連を 全然扱ったことないんで、四苦八苦してる状態です。 どなたか、よい本やホームページとかあればご紹介くださいませんか? 自分でいろいろ探ってみたりもするんですが、C/C++の記事が多く、それらを解読できない こともないんですが、DelphiX がどこまでカプセル化してるとかもよくわかってない 状態です。DelphiX のソースを読んだほうがいいでしょうか?
インストーラー 投稿者:ぽくむら 投稿日:10月19日(月)16時29分30秒
こんにちは堀さん、ぽくむらです。 インストーラー送ってもらったんですが、ぼくのDelphiの ばーじょんは3です。こっちがいい忘れたおかげで、 どうもすみませんでした。
>さぐあろさん 投稿者:時田 投稿日:10月16日(金)20時39分23秒
はじめまして。ご返事ありがとうございます。 そのWinGraphicsを早速見てみようと思います。
時田さんへ 投稿者:さぐあろ 投稿日:10月16日(金)01時27分54秒
時田さん、はじめまして。Xファイルの作成についてですが、「3D Atelier」というソフトなら製品自体にXファイルへの変換がサポートされてますよ。これだと、定価で29800円ですから、手ごろな値段でしょう。WinGraphicsという雑誌に体験版が載っていますから、一度お試しになってはいかがでしょうか。
RE:Installerのバグっぽいも 投稿者:堀 投稿日:10月14日(水)22時56分10秒
ぽくむらさん、こんにちは。堀です。 とりあえず、インストール経過をログにとれるインストーラを作ってみました。 オリジナルの Install_for4.exe に上書きしてください。 ログを私に送ってくれたら原因がつかめると思います。
Installerのバグっぽいも 投稿者:ぽくむら 投稿日:10月13日(火)16時23分13秒
インストールを始めると、インストールがやけに長いと思って、 強制終了でちゃんと起動しているか見てみましたが、 「応答なし」となっていました。他のマシンでも試しましたが、 だめでした。もう一度ダウンロードしてやってみてもだめでした。 あと、コンパイル(パッケージを)してやってみたら、旧バージョンのDelphiX のファイルを読み込むと、TDXDraw.Optionsプロパティーがちゃんと読み込めませんでした。あとで、Optionsをいじればなおりましたが。 バグはそんなところです。
RE:Installerのバグっぽいもの 投稿者:堀 投稿日:10月13日(火)13時49分40秒
ぼくむらさん、こんにちは。 インストーラでエラーが出るとのことですが、どのようなエラーが出るのでしょうか?
Installerのバグっぽいもの 投稿者:ぽくむら 投稿日:10月13日(火)12時05分53秒
こんにちは、Horiさん。ぽくむらです。 DelphiXの最新バージョンをダウンロードしてインストールしてみましたが、 エラーが出ます。自分でコンパイルしてやっとできましたが。 面倒くさいので、インストーラーをかいぜんしておいてください。 (次のバージョンでは)。
>YOUさん 投稿者:時田 投稿日:10月12日(月)21時23分34秒
教えてくださってありがとうございます。早速ヘルプをダウンロード してみました。どうやら、手に入れたかったもののようです。 LightWave3Dについて調べてみましたが、高いです。(^_^;;; それだけすばらしいソフトだとは思うんですが。 しばらくは、ヘルプを頼りにDelphiXの勉強をしようと思います。 ありがとうございましたーー。(^_^)
DirectX Help 投稿者:YOU 投稿日:10月12日(月)03時40分11秒
MSのサイトからヘルプファイルのみをDLすることも可能です。http://www.microsoft.com/msdownload/directx/dxf/sdk5.2doc/default.htm
DirectX Help 投稿者:YOU 投稿日:10月12日(月)01時13分11秒
こんにちは、YOUです。 SetOrientation等のDirectXの関数等の内容はMSのDirectX SDKに入っている ヘルプに載っていたと思います。SDKは雑誌の付録CD等に収録されています。 あと、Xファイルの作成方法ですが、私はLightWave3Dで作ったデータを 恋塚氏のLW2XでXファイルに変換して作っています。ほかにもTrueSpace等から 作ることもできるようです(変換ソフトを介して)。
早速 投稿者:サイロス誠 投稿日:10月11日(日)22時36分01秒
Delphi4のDelphiX、早速落とさせていただきました。 いつもながらご苦労様です。 それでは。
はじめまして 投稿者:時田 投稿日:10月11日(日)19時03分08秒
はじめまして。時田です。 Delphiで3D表示できるコンポをちょうど探していたら、DelphiXを見つけた ので、早速ダウンロードさせていただきました。サンプルを見たら、思って いなかったほどいいものでした。(^_^) すばらしいものをありがとうござ います。 すいませんが、質問があります。 ヘルプに載ってない情報はコードを解析して調べるしかないんでしょうか。 例えば、SetOrientationの引数の意味が分からないので調べてみたのですが 書いてありませんでした。 それから、*.xとか*.dxgファイルはどうやって作成するのでしょうか。
RERE:DelphiXでAVI再生 投稿者:JOE幕の内 投稿日:10月10日(土)20時22分11秒
Horiさん、ありがとうございました。 DirectShowですか... いろいろ、研究してみます。 わからない事があったら、またお願いします!
RE:DelphiXでAVI再生 投稿者:堀 投稿日:10月10日(土)07時53分13秒
JOE幕の内さん、こんにちは。 >ところで。今日MSDNのライブラリCDを眺めていたら、 >[DirectX]DirectDrawサーフェスでAVIを再生する方法 >なるものを見つけました。 いまは VFW ではなく、DirectShow(ActiveMovie) の方がいいですね。こちらだと MPEG ファイルも再生することが可能になりますし。 DirectShow を DirectDraw とともに使うためには、自分でフィルターを 作らないといけないのですが、うまくいっていません。
RE:はじめまして 投稿者:堀 投稿日:10月10日(土)07時34分28秒
きくおさん、こんにちは。 バグ報告どうもありがとうございます。次回リリースで反映させるようにします。
はじめまして 投稿者:きくお 投稿日:10月09日(金)11時44分20秒
こんにちは。
DelphiXはとても便利で助かってます。
もうVC++には戻れない体になってしまいました(^^;。
さてさて、どうもバグらしきものを発見しました。
StretchDrawが失敗するので調べてみた所、
TDirectDrawClipper.SetClipRects
の中で
for i:=Low(Rects) to High(Rects) do
begin
with BoundsRect do
begin
> Left := Min(Rects[i].Left, Left);
> Right := Max(Rects[i].Left, Right);
> Top := Min(Rects[i].Left, Top);
> Bottom := Max(Rects[i].Left, Bottom);
end;
end;
は、もしかして
Left := Min(Rects[i].Left, Left);
Right := Max(Rects[i].Right, Right);
Top := Min(Rects[i].Top, Top);
Bottom := Max(Rects[i].Bottom, Bottom);
ですか?
以上、ご報告まで。
RE:AlphaBlending 投稿者:堀 投稿日:10月09日(金)06時51分03秒
ぼくむらさん、こんにちは。堀です。 >そういえば、アルファブレンディングをしたとき、透明色を指定しても、 >透明抜きがされません。多分、アルファブレンドされてから、 >透明抜きをしようとしているからだと思います。つまり、 >白を透明色としても、アルファブレンドした後は白じゃないってことです。 DelphiX ではアルファブレンディングする前の色を使って、 透明色判定をしています。Graphic\AlpgaBlending サンプルを使って 透明色をいろいろ変えてみましたが、すべてうまくいきました。
DelphiXでAVI再生 投稿者:JOE幕の内 投稿日:10月08日(木)19時47分34秒
はじめまして、Horiさん。 DelphiX、とても素晴らしいです。 これが無くなったら、プログラマ廃業するでしょうね、多分。 ところで。 今日MSDNのライブラリCDを眺めていたら、 [DirectX]DirectDrawサーフェスでAVIを再生する方法 なるものを見つけました。 タイトル通りの内容だったのですが、DelphiXを使ったときに 同じ処理を実現するには、どうすれば良いのでしょうか? 今はMediaPlayerを使って逃げているのですが... もっとよい方法があれば教えてください。
AlphaBlending 投稿者:ぽくむら 投稿日:10月08日(木)17時31分38秒
こんにちは、Horiさん。ぽくむらです。 そういえば、アルファブレンディングをしたとき、透明色を指定しても、 透明抜きがされません。多分、アルファブレンドされてから、 透明抜きをしようとしているからだと思います。つまり、 白を透明色としても、アルファブレンドした後は白じゃないってことです。 どうすれば、透明抜きができるんですか? あと、間違ってたらごめんなさい。
RunTimeの入手 投稿者:ぽくむら 投稿日:10月08日(木)17時09分59秒
Horiさん、どうもありがとうございました。 DirectX6のランタイムが手に入りました。 これで、左右反転とかもばしばし使えます。 ゲーム完成したら送ります(送れたら)。 しばらく、来ないことになると思いますので、それでは。
低電力スタンバイ 投稿者:Hira 投稿日:10月07日(水)23時37分28秒
Horiさん、どうもありがとうございました。
低電力スタンバイを検出する方法ですが、
procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
で、
var
FLowPower: Boolean;
のように宣言しといて、
if SystemParametersInfo(SPI_GETLOWPOWERACTIVE,0,@FLowPower,0) then
begin
if FLowPower then Close;
end;
を適当な場所に入れることでエラーを回避(プログラム終了)
することができました。
どうもありがとうございました。
RE:追加事項 投稿者:Hori 投稿日:10月06日(火)17時57分09秒
ぽくむらさん、こんにちは。 >そういえば、Horiさん、新しいDelphiXは、 >Delphi3 & DirectX5でもコンパイルまたは動作しますか? >DirectX6専用なら、ランタイムがないので....。 Delphi3 でも動作しますが、DirectX6 必須です。 エンドユーザー用の DirectX6 ランタイムは http://www.microsoft.com/japan/directx/resources/dx6end.htm から手に入れられます。
追加事項 投稿者:ぽくむら 投稿日:10月06日(火)16時22分58秒
そういえば、Horiさん、新しいDelphiXは、 Delphi3 & DirectX5でもコンパイルまたは動作しますか? DirectX6専用なら、ランタイムがないので....。
左右反転 投稿者:ぽくむら 投稿日:10月06日(火)16時11分54秒
こんにちは、Horiさん。ぽくむらです。 DelphiXついにバージョンアップしたということで、 上下左右反転が実装されたみたいですね。 早速ダウンロードしてインストールします。 昨日もここに来たんですが、更新を押すのを忘れてて、 バージョンアップしているなんてわかりませんでした。 これで、今作っているゲームのデータ量が半減します。 いやーうれしいです。 まぁ、Blt関数でできなかったことはべつとして。 それでは。
レス 投稿者:Hori 投稿日:10月06日(火)12時44分42秒
えるさん、こんにちは。 >さて、このようなインストール方法でも問題なく利用することはできるでしょうか? 問題在りません。インストーラーを改良した DelphiX 98.10.05a を リリースしましたのでインストールし直してみてください。 >また、パッケージのコンパイルして作成された DelphiX.bpl を配布してもよいものでしょうか? ># もし、ヘルプなどに明記されていたらすみません。 DelphiX.bpl の配布は DelphiX がバージョンアップした場合、 ご自分で責任を持っていただけるなら可です。 まえださん、こんにちは。 >var > CharaFrame: IDirect3DRMFrame2; >begin > DXDraw.D3DRM2.CreateFrame(DXDraw.Scene, CharaFrame); >ここで↑ >「'IDirect3DRMFrame'と'IDirect3DRMFrame2'には互換性がありません」とでてしまいます。 >解決方法を教えてください。 すいません!!! DirectX 6 ヘッダーで IDirect3DRM2.CreateFrame の引数を オリジナルの通りに修正してしまいました。 対策としては var CharaFrame: IDirect3DRMFrame2;begin DXDraw.D3DRM2.CreateFrame(DXDraw.Scene as IDirect3DRMFrame2, CharaFrame); とします。それでは。
Frame2の生成 投稿者:まえだ 投稿日:10月06日(火)02時55分33秒
はじめまして。 DelphiXをバージョンアップして以前組んだプログラムをコンパイルしようとしたら、 エラーが出てしまいました。 var CharaFrame: IDirect3DRMFrame2; begin DXDraw.D3DRM2.CreateFrame(DXDraw.Scene, CharaFrame); ここで↑ 「'IDirect3DRMFrame'と'IDirect3DRMFrame2'には互換性がありません」とでてしまいます。 解決方法を教えてください。
新しいDelphiX 投稿者:える 投稿日:10月05日(月)20時20分58秒
Delphi2→Delphi4に乗り換え、前々から使いたかった DelphiX を先日、 日記に「Delphi4対応に…」とかあったので、ダウンロードしたら対応し てる風なくて、今日みたらDelphi4用アップって書いてあって喜びダウン ロードしました。 ダウンロードし、Install_for_4.exe を実行すると、新しい Delphi が起動して パッケージを開いた状態で停止していました…。しばらくまってもなにもおこらず そんままインストールボタンを押して手動で入れましたが、ディレクトリが c:\temp\... なんてなっていたので、とりあえず消し、自分のいれたいところへもっていって、 DelphiX_for4.* を DelphiX.* にリネームし、そのまま開いてコンパイル・インストールしました。 この状態で、サンプルをコンパイルしようとすると DX* を uses してるところで DX* がみつからな いというエラーで止まってしまいます。確に、「コンポーネントのインストール」で出てくるパスに DelphiX の *.pas のある場所は含まれていません。 手作業で検索パスをいじればよいことなので、これは解決しました。 さて、このようなインストール方法でも問題なく利用することはできるでしょうか? また、パッケージのコンパイルして作成された DelphiX.bpl を配布してもよいものでしょうか? # もし、ヘルプなどに明記されていたらすみません。 ・DelphiX.bpl を単体配付してもいい ・DelphiX.bpl を含んだアプリケーションパッケージを配付してもいい ・DelphiX はパッケージ使用で利用せず実行ファイルとリンクしないといけない などなど、、、です。