HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1022
Tbufferの上限?13解決


T

リンク

2007/10/22(Mon) 19:01:14|NO.11877

キャラの服を変えたりできるゲーム(2Dの一般的?なMMORPG)を作っています。

F1で確認したところbufferの上限がいつの間にかなくなっていたので、
bufferをケチらず、1度読み込んだものはずっと取っておき、
また、キャラグラフィックを服ごとにまとめずに、
同じ服でも各フレームごとにバラバラのバッファを使う仕様にしました。
服*モーションで大量にbufferを食う仕様なので、
どこまでbufferを作れるのかテストを行ってみたところバグが発生しました。

HSPのバグなのかヘルプの記入漏れなのか環境依存なのか、
それとも俺の知らない何かがあるのか、原因が分からなかったため書き込みました。
今後のために原因と、出来ればこういう場合の一般的な作成法も知っておきたいのでご教授お願いします。

以下、テスト用ソースです。1992以降タイトルが更新されず、描画がおかしくなりました。

repeat 2000,1 buffer cnt,1,1 gsel 0 title ""+cnt+"作成" await 1 loop



この記事に返信する


n

リンク

2007/10/22(Mon) 21:01:50|NO.11885

# いじめっ子たちは無視するのが一番の得策です。

メモリの搭載量に依存します。
また、上限がなくなったからといってやり方を変える必要はまったくありません。
やり方を変えて不具合が出れば、不具合のでなかった以前のやり方に戻せばいいだけです。



n

リンク

2007/10/22(Mon) 21:03:05|NO.11886

というより、1フレーム1バッファは尋常とは思えません。



f

リンク

2007/10/23(Tue) 08:30:24|NO.11906

うちもXP pro メモリ512mの環境で1992で止まったんだが、これはメモリの問題だろうか?
全員が全員1992で止まるようなら他の要因かもしれないんでね?


つーか、幾らなんでも無茶だろとは思うが。
流石にそんな事した事ないから良く分からん。



T

リンク

2007/10/23(Tue) 22:15:26|NO.11936

必要かわからなかったので書きませんでしたが
自分の環境はXPhomeの512Mです。

bufferのサイズを変更しても結果は変わらないので
原因はメモリじゃないかもしれません。

1フレーム1バッファは
サイズを自由に出来ることと余白を省ける利点があると思います。
実際はどうなっているのか知りませんが、
1バッファに沢山の画像を並べるのも複数のバッファに1画像ずつでも
どちらもほとんど同じようなものなんじゃないかと思います。

起動時にロードしきれない量のキャラグラフィックを扱うのは初めてなので「以前のやり方」は存在しません。
別のやり方を思いついてはいますが、出来ればどのようなやり方をするのが妥当なのか先人の知恵を拝借したいと思っています。



T-mos

リンク

2007/10/23(Tue) 22:36:20|NO.11938

試しにこちらでも走らせてみましたが、やはり1991まで作成した所で止まりましたね。
こちらの環境はXPhomeのメモリ2GBですが、同じ所で止まるってことはやっぱり制限があるのかも?
1フレーム1バッファというのは、少なくとも私は聞いたことないので、斬新といえば斬新なやり方なのかもしれません。
とりあえず、同じ服毎にひとつにまとめてしまってはいかがでしょう?



n

リンク

2007/10/23(Tue) 22:49:01|NO.11940

僕は752MBで2000まで難なく達しました。



n

リンク

2007/10/23(Tue) 22:49:48|NO.11941

>T-mosさん
斬新な方法が良い方法とは限らないでしょう。



n

リンク

2007/10/23(Tue) 22:56:12|NO.11942

>どちらもほとんど同じようなものなんじゃないかと思います。

同じではありません。
バッファを管理するためのヘッダがバッファの数だけメモリを消費します。



tks

リンク

2007/10/23(Tue) 22:57:47|NO.11943

XPpro メモリ608Mですが、2000完走、10000まで回してみましたが問題ありません。
bufferのサイズを640,480にすると320あたりからスワップ…。



pizza

リンク

2007/10/24(Wed) 00:53:52|NO.11945

hdcが0ならbuffer作成に失敗しているのだと思います。

buffer cnt if hdc == 0 : end // buffer作成失敗

システム リソース(9x系)
デスクトップ アプリケーション ヒープ(NT系)

↑について調べてみると良いかと。
Meではリソースの空き状態によりますが、200あたりでGDIリソースを
食い尽くしてデバイスコンテキストの作成に失敗しています。



n

リンク

2007/10/24(Wed) 01:29:08|NO.11946

ま、パソコンに無限なんてものは無いってことですね。



T

リンク

2007/10/24(Wed) 03:31:38|NO.11949

>デスクトップ アプリケーション ヒープ(NT系)
について簡単に調べてみたところ、
>バッファを管理するためのヘッダがバッファの数だけメモリを消費します。
このヘッダみたいなものを管理する専用の領域が尽きるとバグると解釈しました。
(こういう不正確な表現をnさんは嫌いそうですが・・・)

一般的な方法については謎のままですが、本来の目的である原因については分かったので

「bufferの上限は環境依存」ということで解決にします。



n

リンク

2007/10/24(Wed) 03:44:07|NO.11950

ヘッダ以外にもフォントやブラシなどのGDIオブジェクトを作成するために、pizzaさんの言ってるリソースも消費します。

尽きるとっていうか、ページングファイル(スワップファイル)サイズを大きくすれば、
そのマシンでは上限が増えるでしょうが、
他の方のマシンではそうは行きませんね。



ONION software Copyright 1997-2023(c) All rights reserved.