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


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
0714
hkrHSP3Dish/HGIMGを使用した2Dゲームを作る10解決


hkr

リンク

2025/7/14(Mon) 23:11:37|NO.103663

https://www.hsp.tv/play/pforum.php?mode=all&num=103595
↑スレッドが長くなったので、仕切りなおしてみました。

こちらのスレッドではGPU支援系ライブラリを標準命令の延長として活用できないか
前向きに探っていければなぁと思います。



この記事に返信する


窓月らら

リンク

2025/7/14(Mon) 23:16:33|NO.103664

新スレおめでとうございまーす♪
私もどちらかといえば2D派でHSP3Dishなどを使っていますので
気が向いたらなにかを書こうと思ってます。

とりあえずHSP3Dish/HGIMG4向けに作成した去年のコンテスト受賞作を貼ります。
https://dev.onionsoft.net/seed/info.ax?id=2522
これは将来的には自分でも使ってゲームを開発するために作成したもんです。
いまはドットエディタを開発しています。



hkr

リンク

2025/7/14(Mon) 23:27:54|NO.103665

とりあえず標準命令のみで構成された自作のプログラムをHGIMG4.asに移植させつつ
変換のポイントなんか書いていければいいなぁ。途中で折れるかもしれないけどw

さて早速ですが、HSP3DISHを使うかHGIMG4を使うかの選択肢です。
自分の場合bufferで確保した領域にboxfで矩形を描画(画面塗りつぶし)しているので、
Dishを使用するといきなりエラーが出ましたw
おさらいですが、Dishはbuffer領域はほぼROMと同様の扱いなので、読み込みは出来ても
VRAMの書き換えができません。gselでスクリーン0以外を指定して描画命令を使用したいなら
HGIMG4一択です。

ここまでで実行エラーは解消され、プログラム自体は動作するようになりました。
ただしゲーム画面が表示されずに白画面点滅という状態になっていますorz

次に続く(;´・ω・)



窓月らら

リンク

2025/7/14(Mon) 23:35:33|NO.103666

redraw 0 〜 redraw 1で挟むの必須なのでここは間違えないようにします。
redraw 1 しないと画面に表示されません。



hkr

リンク

2025/7/14(Mon) 23:38:12|NO.103667

>>NO.103664

ありがとうございます。

とりあえず自分が現行使用しているグラフィック系命令は、

screen
buffer
picload
cls
boxf
gcopy
gzoom
grotate
gsquare

これくらいですが、前述の通り画面が白黒点滅していますw

https://www.onionsoft.net/hsp/v36/doclib/support_cmds.txt
※ 全コマンドは互換有り

redraw命令で囲んだりはhspdxfixを使用していたころからの癖でやってるので作法は
合ってるはずですが、何かの命令が標準コマンドと違う動作をしてるんでしょうねぇー



hkr

リンク

2025/7/15(Tue) 21:04:00|NO.103669

テストプログラム書いてみました

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

;#include "HGIMG4.as"
;gpreset

screen 0, 512, 512, screen_fixedsize
buffer 1, 128, 128

gsel 1 : picload "128x128.bmp"

repeat
redraw 0
gsel 0 : pos 0, 0
gzoom 512, 512, 1, 0, 0, 128, 128
redraw 1
await 10
loop

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

128x128のBMPを読み込んで、512x512に拡大表示します。
上の2行のコメントを外すとHGIMG4で動作しますが、
例の画面の点滅が始まります。

コレですねー。
原因わかりませんが、コマンドの仕様変更というよりお作法の問題な気がします。
誰か原因わかります?w



名無し

リンク

2025/7/15(Tue) 21:44:43|NO.103670

HGIMG4では「redraw 0」を入れると画面がクリアされますが(マニュアルに記載あり)、
その後の「gsel 0」の個所で「redraw 1」と同等の処理が入っているようですね。
なので白く点滅してしまうと。

改善するにはrepeat命令内にあるredraw 0とgsel 0の位置を逆にすれば解決しますが、
提示してあるサンプルの場合はループ中にアクティブなウィンドウを変えてないので、
repeatの前にgsel 0を移動するだけで良い気がしますね。
#include "HGIMG4.as"
gpreset screen 0, 512, 512, screen_fixedsize buffer 1, 128, 128 gsel 1 : picload "128x128.bmp" gsel 0;11行目のgselをここに移動 repeat redraw 0 pos 0, 0 gzoom 512, 512, 1, 0, 0, 128, 128 redraw 1 await 10 loop

関係ないのですが、ソースコードは「<pre>」と「</pre>」(<>は半角で)で囲むと良いですよ。



へびぃ

リンク

2025/7/15(Tue) 21:48:08|NO.103671

これ、前に自分も、自分の友達もハマったんですけど(笑)
名無しさんの言うように、redraw 0 の前にgsel 0いれないとちらつきます



hkr

リンク

2025/7/15(Tue) 22:07:36|NO.103672

内部解像度と表示解像度が違うケースを考慮してソースを改変してみました。
一旦バッファに加工した画像を準備しておいて、それをフリップフロップ(厳密には違うが)
して表示する感じにしてみました。
実際今自分が作成しているプログラムは概ねこんな構造です。


;#include "HGIMG4.as" ;gpreset screen 0, 512, 512, screen_fixedsize buffer 1, 128, 128 ;BMP buffer 2, 512, 512 ;FLIP gsel 1 : picload "128x128.bmp" repeat ;表示用の画像をFLIPバッファに作成 gsel 2 : pos 0, 0 : cls gcopy 1, 0, 0, 128, 128 ;画像編集処理 ;表示解像度に拡大 gsel 0 : pos 0, 0 redraw 0 gzoom 512, 512, 2, 0, 0, 128, 128 redraw 1 await 10 loop

gselとredrawの位置も考慮してみましたが、HGIMG4を有効にすると今度は点滅どころか
真っ白になりましたね。なんでやねーん(;´・ω・)



名無し

リンク

2025/7/15(Tue) 22:13:51|NO.103673

真っ白になる理由はバッファ2番へのgcopyが正しく行えていないからですね。
buffer 1に対してはpicloadを行うので画像の読み込みが正しく行えてるわけですが、
基本的にそれ以外のバッファに対する書き込みは
buffer  2,	512, 512,screen_offscreen

のように4つ目のパラメータに「screen_offscreen」を入れてやる必要があるんですよね。 https://www.onionsoft.net/hsp/v36/doclib/hgimg4.html#RENDERBUFFER



hkr

リンク

2025/7/15(Tue) 22:25:39|NO.103674

あーすいません忘れてましたw
これで動作しますね。

ってぇ事は、従来のプログラムをHGIMG4で動作させたい場合、最終的に表示させたい解像度の
bufferをscreen_offscreenオプション込みで準備しておいて、一旦そこにコピーしておいてから


gsel 0 : pos 0, 0 redraw 0 gzoom 512, 512, 2, 0, 0, 128, 128 redraw 1

で表示させれば概ね互換が取れそうな気がしますね。
後程試してみます。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.103663への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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