HSP3プログラミング入門講座
powered by Let's HSP!
HSPエラー33 「オブジェクト数が多すぎます」
HSP(Hot Soup Processor)のエラーメッセージ「HSP Error」(HSP内部エラー)。エラー番号は「33」。エディタ上のコンパイル実行では『オブジェクト数が多すぎます』のメッセージ。実行ファイルでのエラーメッセージは『内部エラーが発生しました(33)』。
HSPが標準でサポートする各種GUIオブジェクト、ボタン(button命令)、チェックボックス(chkbox命令)、入力ボックス(input命令)、
メッセージボックス(mesbox命令)、リストボックス(listbox命令)、コンボボックス(combox命令)、の設置数が
1,024個に達した時点で表示されるエラーです。
また、Win32 API関数のCreateWindowEx関数を内部で呼び出すwinobj命令によるコントロールの設置もカウント対象
です。
1,000個を超えるオブジェクトを意識して設置してる
1,024個というのはあくまで1ウィンドウ上での制限になります。screen命令やbgscr命令でウィンドウを複数 用意すれば、一応1プログラム内で数千個のオブジェクトを用意できることになります。
ただ、1ウィンドウ内にオブジェクトを1,000個近くも故意に表示させてるというのは異常と言えます。多くて 2ケタ数というのが普通でしょう。プログラムを利用するユーザーの立場からすれば、ユーザビリティに 支障が出てきてもおかしくないUI(ユーザーインターフェイス)なので、作り直しをお勧めします。
ちなみに、1ウィンドウ内でオブジェクトがどのくらい設置されてるかは、HSPのBMSCR構造体の「objmax」(72) から取得できます。ただ、clrobj命令の処理分は差し引きされません。(参照、BMSCR構造体についてはぷまさん)
// オブジェクト設置数カウント mref BMSCR, 67 repeat chkbox "", a wait 1 title ""+BMSCR.72 loop
なお、「objlimit」(73)がその制限数なので、いじろうと思えばいじれます。(Max. 16,384個まで)
1,000個を超えるオブジェクトなぞ設置してない
このオブジェクト多すぎHSPエラーでもっとも多い発生理由がこれでしょう。「自分はそんな大量のオブジェクトは 表示させてない!」という人です。
「gotoループ」や「repeat〜loopループ」になっており、その中でオブジェクトの表示位置を指定するpos命令の 存在がポイントです。見た目には表示数は増えてないわけですが、オブジェクトの真上に同じオブジェクトがどんどん 重なって設置されていきます。
// オブジェクト大量設置・・・ repeat pos 100, 100 chkbox "", a chkbox "", b wait 50 loop
また、下のような実質ループのような処理でもそうです。スクリプトの先頭付近に「*main」という名前のラベルを 用意して、いろいろな処理を行った後に、常にそのラベルへとジャンプする処理を書いてしまう人に多いです。
// ボタンを押すたびにボタンがどんどん増えていく・・・ *main pos 100, 100 button "あ", *jump stop *jump ; 〜 いろいろな処理 〜 goto *main
オブジェクトを複数個設置してることに気づいてない人にとっては、たとえば、オブジェクトの内容(表示文字列)を objprm命令でいざ変更しようとすると、対象となるオブジェクトIDをミスることになるため、「objprm命令が機能しない」 と勘違いすることになります。(実際には重なったオブジェクトのうちの最も下に設置されたオブジェクトが書き換わってるワケ)
ちなみに、cls命令を使ってオブジェクトを削除(撤去)する人がいますが、基本的には専用のclrobj命令を使ってください。 cls命令は用意したウィンドウ全体を初期化するので、ループ中にcls命令を連発するような処理にすると、ムダにパフォーマンス を食い、場合によってはウィンドウの表示がちらつきます。
キーワード de HSP
- 無料プログラミング
- HSPダウンロード
- 実行ファイル作成
- HSP動作環境
- 演算子
- 文字列操作
- 命令・関数一覧
- アイコン変更
- PACKFILE
- PACKFILE編集
- #packopt
- #deffunc
- HSPエラー
- HSPエラー番号
- HSPエラー7
- HSPエラー12
- HSPエラー13
- HSPエラー33
- HSPエラー38
- HSPエラー41
- ホームページ作成
- バージョン
- フォント
- オブジェクト
- ボタン
- 入力ボックス
- オブジェクト非表示
- Win32 API
- メニュー
- HSPLet
- サウンド再生
- 画像
- PNGファイル
- HSP質問掲示板
- デバッグ
- ドラッグ&ドロップ
- ブラウザ作成
- HSP書籍本