[過去ログ] Delphiゲームプログラミング相談室 (976レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
555
(1): 551 [sage] 04/07/25 14:40 ID:TtxXwPsH(2/3) AAS
>>554
554(2): 名前は開発中のものです。 [sage] 04/07/25 14:02 ID:y86X+J8o(1/3) AAS
テクスチャの描画毎の生成破棄も相当コスト高いとおもうけど。

ふつうにあらかじめ確保したテクスチャにWriteすべきでね?
やっぱりそうですよね…。
でもそうやってみると、どうしてもリークしてしまうんです。
やり方がおかしいのかな_| ̄|○

・MainFormのprivateでText1: TDGTexture;を宣言。
・FormDestroyでText1.Free;

procedure OnIdle();
begin
  :
Text1 := Sxw.CreateStringTexture();
PushSprite(Text1);
D3DDevice.Present();
// この辺りで何らかの解放処理が必要なのでしょうか。
  :
end;

(今は、SXLibを見ながらTBitmapを使おうと模索中です。)
556
(1): 名前は開発中のものです。 [sage] 04/07/25 15:18 ID:y86X+J8o(2/3) AAS
>>555
ん?それだと
>Text1 := Sxw.CreateStringTexture();
の部分で毎回テクスチャがクリエイトされちゃうじゃん。そりゃリークしまくるでしょ。

Writeすればっつーのは
FormCreateでText1をクリエイトして
>Sxw.Write(0,0,'Score',Text1);
とでもすればっていうこと。
557
(1): 名前は開発中のものです。 [sage] 04/07/25 15:35 ID:y86X+J8o(3/3) AAS
あ、言い忘れた。
当たり前だけど毎描画Writeするのも重いはず。
別に文字列持っておいて変化したらWriteするようにするのが普通だと思う。
558: 551 [sage] 04/07/25 16:26 ID:TtxXwPsH(3/3) AAS
>>556-557
おあーぁぁー、Writeってそういうことだったんですね…。
メソッド名そのままの効果…何故気付かないのか私は_| ̄|○
これなら期待通りの動作をしてくれます!
> 別に文字列持っておいて変化したらWriteするようにする
CPU使用率が(一部)断然下がりました。
おかげさまで、描画系の作成に苦労しなくて済みそうです。

>>552,554
552(2): 名前は開発中のものです。 [sage] 04/07/24 20:45 ID:PnrKgcAc(1) AAS
>551
シーン描画毎にテクスチャとTSXTextWriterをクリエイトする意味あんの?

文字列に変化ある時に書き換えるだけじゃだめなんか。
(=556,557?)さんをはじめ、スレ住人皆さん、
ご教授いただき有難うございました<(_ _)>

QDmanual/ML/sampleの山|λ......
559
(1): 名前は開発中のものです。 [sage] 04/08/04 16:08 ID:ZmvuRdM9(1) AAS
初心者丸出しの質問ですいませんが
ゲームのハイスコア(1位から10位ほど)を保存したいんですけど 何を使えばいいんでしょうか
560: 名前は開発中のものです。 [sage] 04/08/04 17:22 ID:WqrQethy(1) AAS
tstringlist
561
(1): 名前は開発中のものです。 [sage] 04/08/04 23:29 ID:5TXw5Lpo(1) AAS
Quadruple Dを使ってゲーム作っているのですが、
画像の一部だけを描画するにはこの方法でいいのでしょうか?

Scene.PushSprite(
Vector2D(0,0),
[
 SXVertexSP(50,50, $FFFFFFFF, 0.0,0.0),
 SXVertexSP(100,50, $FFFFFFFF, 50/Texture.Width, 0.0),
 SXVertexSP(50,100, $FFFFFFFF, 0.0, 50/Texture.Height),
 SXVertexSP(100,100, $FFFFFFFF, 50/Texture.Width, 50/Texture.Height)
],
 Texture,
 sxbAlpha,
 False
);

もっとスマートな方法ってありますか?
562
(1): 名前は開発中のものです。 [sage] 04/08/12 22:35 ID:lCkZPmie(1) AAS
>>561
それでよし
>>559
漏れもTStringListに一票
桁揃えておけばソートできるしな
暇ならハイスコアコンポーネントでも作って公開してくれ
>>550
550(1): 名前は開発中のものです。 [sage] 04/06/24 12:26 ID:WbJlnPwQ(1) AAS
フルスクリーンとウィンドウの切り替えは、
D3DPresentParametersのWindowedを変更してデバイスをResetするだけでは駄目なんでしょうか。
上記の方法でやろうとすると、フルスクリーンからウィンドウになったときにタイトルバーが消えてしまいます。
FormのBorderStyleをbsNoneにしたような感じですが、この状態でBorderStyleを変更しても変化がありません。
正しく切り替えるにはどのようにしたらいいでしょうか。
変える順番が大事
変える個所は合ってる
>>543
543(1): 名前は開発中のものです。 [sage] 04/06/17 22:57 ID:PyX6xxqm(1) AAS
そもそも内部でRestore用に保持するぐらいなら鼻から
MANAGED使った方がいい気がするんだが。
ほかの個所は使ってる
>>536
536(1): 名前は開発中のものです。 [sage] 04/06/09 07:09 ID:GrePfY40(1) AAS
TDDIDFFXについての質問です
カーソルキーを押しっぱなしにするとTDDIDFFX.Stick.X(又はY)は常に1(又は-1)を返します
カーソルキーを連打しないと動作しないようにするにはどのようにすればできるでしょうか?
前回のキー入力を保存
状態遷移でググると基本的な考え方がわかる
やね本2の解説がわかりやすい
>>528
QDの良い所はVCL連携と3Dオブジェクト(しかもモーション付き)の扱いが楽
563: 名前は開発中のものです。 [sage] 04/08/12 23:43 ID:Ev6Dy7m9(1) AAS
>>562
レスありがとうございます。
でもこれだと解像度の違いのせいか、描画したい元画像の範囲選択が上手くいかないんです。

解像度を800×600にして、元の画像の大きさが50×100だとすると、下のソースでは
画像の Rect(0, 20, 50, 50) の部分が描画されると思うのですが、ずれてしまいます。

Scene.PushSprite(
Vector2D(0,0),
[
 SXVertexSP(0, 0, $FFFFFFFF, 0.0, 0.2),
 SXVertexSP(0, 50, $FFFFFFFF, 1.0, 0.2),
 SXVertexSP(30, 0, $FFFFFFFF, 0.0, 0.5),
 SXVertexSP(50, 30, $FFFFFFFF, 1.0, 0.5)
],
 Texture,
 sxbAlpha,
 False
);

ゲームでたくさんの画像を使うときには皆さんどうしているのですか?
一つ一つテクスチャを作るか、それとも一つのファイルに画像を収めて
一部だけを描画するようにしているのでしょうか。
564: 名前は開発中のものです。 [sage] 04/08/13 01:22 ID:y25szJtr(1) AAS
そりゃずれると思われ
565
(2): 名前は開発中のものです。 [sage] 04/08/14 10:53 ID:ennbBjlN(1) AAS
微妙に間違えてますた。
でも、これでもずれますが、どのようにパラメータを指定すればいいんでしょう。

Scene.PushSprite(
Vector2D(0,0),
[
 SXVertexSP(0, 0, $FFFFFFFF, 0.0, 0.2),
 SXVertexSP(50, 0, $FFFFFFFF, 1.0, 0.2),
 SXVertexSP(0, 30, $FFFFFFFF, 0.0, 0.5),
 SXVertexSP(50, 30, $FFFFFFFF, 1.0, 0.5)
],
 Texture,
 sxbAlpha,
 False
);
566: 名前は開発中のものです。 [] 04/08/15 02:11 ID:PuiE5qNp(1/4) AAS
>>565
画像のサイズが2のn乗じゃないから。

テクスチャのサイズは読み込んだ画像と同じとは限りません。
TDGTextureのプロパティTotalWidthなどで確認できます。
Widthとの値の差を見比べるとよいでしょう。

読み込んだ画像が2のn乗に満たない場合は自動的にテクスチャのサイズが拡張されます。
そのサイズは読み込んだ画像以上でなおかつ最小の2のn乗になります。
50x100の場合は64x128になります。

たとえば50x100の画像を読み込んで作ったテクスチャの左上から32x32を表示したい場合は
テクスチャが64x128に拡張されているので以下のようにしてUVを求められます。
U=1/64*32
V=1/128*32

ここからは余談ですがグラフィックボードによってはテクスチャに色々な制限があります。
・256x256以下のサイズしか扱えない
・正方形でないとならない
・2のn乗サイズでないといけない
・32bit色が使えない

記憶を頼りに書いてるので間違ってたらツッコミおながいします。
ちなみにVoodooシリーズがこれらの制限に全てひっかかるカードです。
567
(1): 名前は開発中のものです。 [sage] 04/08/15 04:22 ID:PuiE5qNp(2/4) AAS
>>565
とりあえずサンプル
外部リンク[lzh]:gamdev.org
568
(1): 名前は開発中のものです。 [sage] 04/08/15 09:35 ID:moZoUrx5(1/2) AAS
丁寧な解説ありがd

>>567
起動してくれません。デバッグログには、
「Direct3DDeviceオブジェクトの生成に失敗しました(Error Code D3DERR_OUTOFVIDEOMEMORY)」
とあります。
569
(1): 名前は開発中のものです。 [sage] 04/08/15 13:01 ID:PuiE5qNp(3/4) AAS
>>568
たぶんビデオカードのメモリが不足してるだけだからテクスチャのサイズが小さくなれば解決すると思う
サンプルでは512キロバイト使ってるからグラフィックボードを買い足していない環境じゃつらいかも

思いついた対策を書いておきます
これでもダメならグラフィックチップの種類やVRAM容量、エラーログの全文がわかればもう少し詳しく調べられるかも

・画像編集ソフト(ペイントなど)で画像のサイズ(今は288x256)をもっと小さくする(試しに32x32ぐらいに)
・画像編集ソフト(ペイントなど)で画像の色数を減らす(16ビット色に)
・TDGCarad(女の子のアイコンのコンポーネント)のプロパティUseSoftwareVertexProcessingをTrueにする
570
(1): 名前は開発中のものです。 [sage] 04/08/15 18:34 ID:moZoUrx5(2/2) AAS
>>569
全部試してみたけどダメでした。ファイルサイズは630バイトくらい。

ビデオRAM : 4MB
グラフィックアクセラレータ : ATI社製RAGE(TM) Mobility-CL(AGP)
ノートパソコンなので画像系には弱いのですかね? Lavie Lシリーズです。

前略(特に問題ナシ)
#00013 | ■■■画面モードを初期化します■■■
#00014 | Driver : ati2drab.dll
#00015 | Description : ATI RAGE MOBILITY AGP
#00016 | VendorID : 00001002, DeviceID : 00004C4D, SubSysID : 81581033, Revision : 00000064
#00017 | ウィンドウモード 640x473で初期化します
#00018 | ハードウェアアクセラレーションを利用します
#00019 | 希望のデプスステンシルサーフェスのフォーマットが見つかりませんでした
#00020 | デプスステンシルサーフェスのフォーマット...UNKNOWN
#00021 | ソフトウェアT&Lを利用します
#00022 | Direct3DDeviceオブジェクトの生成を行います
#00023 | Direct3DDeviceオブジェクトの生成に失敗しました(Error Code = D3DERR_OUTOFVIDEOMEMORY)
#00024 |
#00025 | ■■■お別れの時がやってまいりました■■■
以下略(特に問題ナシ)
571: 名前は開発中のものです。 [sage] 04/08/15 21:05 ID:PuiE5qNp(4/4) AAS
>>570
RAGEのグラフィックボードを使って試してみました。
同じエラーがでるし原因究明は楽かなと思いました
……がその前にちゃんと計算すればよかった orz

バックバッファ:640x480x3(=900kbyte)
フロントバッファ:640x480x3(=900kbyte)
windowsの解像度:1024x768x3(=2.25Mbyte)
テクスチャ:512x256x3=(384kbyte)
合計:4.3828125Mbyte
テクスチャのサイズを変えた所で足りません。

Form1のClientWidthとClientHeightを320x240にすると
バッファ2つあわせても450kbyteになるので合計で4Mbyte以下に抑えられます。

とりあえずこっちでは動きました。
572: 名前は開発中のものです。 [sage] 04/08/16 09:15 ID:WpFw0zco(1) AAS
> ビデオRAM : 4MB
さすがに、これはキツイと思われ
573
(1): 名前は開発中のものです。 [sage] 04/08/16 13:37 ID:tdeixu8e(1/2) AAS
Formを小さくしてみてもダメでした。
BIOS設定でもVRAM増やせないみたいだし。
_/ ̄|○モウダメポ・・・
574: 名前は開発中のものです。 [sage] 04/08/16 14:54 ID:OSpqsJ8k(1) AAS
>>573
動かないサンプルを動かそうとするよりすでに動いているものがあれば
それを改造していったほうが早いんじゃないかと思います
(質問ではテクスチャがズレてしまったとあるのでそのプログラムのUV値をいじるだけでいいはず)

もともとの問題はテクスチャがずれる理由の解明で
それは解決してるはずです

なぜ動かないかは気になるのでもし改造していって動かなくなったり
動くものが完成したら教えてください
575: 名前は開発中のものです。 [sage] 04/08/16 19:04 ID:tdeixu8e(2/2) AAS
そうですね。
今動いているもので全く問題ないので、それでやっていこうと思います。
丁寧にありがとうございました。
576
(1): 名前は開発中のものです。 [sage] 04/08/17 05:24 ID:+sFdTfOm(1) AAS
外部リンク[html]:deliverer.s5.xrea.com

//u,v : single;

u := texture.u;
v := texture.v;

Scene.PushSprite(
Vector2D(0,0),
[
 SXVertexSP(0, 0, $FFFFFFFF, 0.0 * u, 0.2 * v),
 SXVertexSP(0, 50, $FFFFFFFF, 1.0 * u, 0.2 * v),
 SXVertexSP(30, 0, $FFFFFFFF, 0.0 * u, 0.5 * v),
 SXVertexSP(50, 30, $FFFFFFFF, 1.0 * u, 0.5 * v)
],
 Texture,
 sxbAlpha,
 False
);

とするのが正しい。
texture.uとtexture.vは、1.0とは限らない。
又、元の画像の一辺の長さは4の倍数にするべき。
トラブルを避ける意味では、辺が2のべき乗の長さの正方形の画像がいいかもしれない。
また、テクスチャに関しては、複数作る場合も一つしか作らない場合もどちらもあり。
577
(1): 名前は開発中のものです。 [sage] 04/08/17 09:30 ID:kgt5GdeF(1) AAS
>>576
参考になりました。ありがとうございます。
リンク先も見てみましたが、変なレスって・・・。
578
(1): 名前は開発中のものです。 [] 04/08/21 04:12 ID:rcQjHDLj(1) AAS
QD3.00が入っている環境にQD3.01をインストールするにはどうすればいいですか?
579: 名前は開発中のものです。 [sage] 04/08/21 13:18 ID:53W2Uy5k(1) AAS
>>578
今までインストールされていた3.00に、3.01のファイルを上書きすればOKです
1-
あと 397 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.026s