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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0914
大日本帝国3.6より新しく実装されたlayerobjの使用例4未解決


大日本帝国

リンク

2021/9/14(Tue) 18:25:07|NO.93870

初めまして。
今回、hsp3.6より実装されたlayerobj命令の仕様がよくわからないので質問させていただきます。

1.画像を描画させたいが、その画像のポジションは表示させる座標をposにて定義させるという認識で正しいか
2.命令のp3(レイヤーID)とは、描画前のレイヤーか描画後のレイヤーのどちらであるか
3.例えばボタンを押した瞬間に画像を表示させるスクリプトを作る際はどのようなコードが適しているか(具体的に提示してくださると嬉しいです)

以上について、わかるところだけでも答えてくださると嬉しいです。お願いします。



この記事に返信する


zrs90(5さい)

リンク

2021/9/15(Wed) 03:08:20|NO.93871

正直、説明するのは、難しいです。
(コイツの説明、役に立たないと思ったらスルーして下さい
間違ってる可能性もありますし)


まずは、この3つを、揃えて下さい。

① サンプル(約70行)があります。sampleフォルダ内の
new36\test_leyerobj.hsp
...というファイルです。

② HSP Docs Libraly(以下、HDL)のlayerobj命令のヘルプ

③ エディタのヘルプ(H)メニューから
HSPプログラミング・マニュアル → 5.7.レイヤーオブジェクトを開いて下さい。
(※②で説明のなかったマクロ等の説明がある)

②と③の資料を元に①を改造します。

質問3は、プログラムの組み方次第なので
なんとも言えませんが、このサンプルの改造で何とかなるかと...

質問1です。画像用意するのが面倒なのでテストしてません。
pos指定した、ある程度のサイズのboxf命令を
39行以降のcase文の下に記述します。
後、22行のウエイト調整、66、69行の色指定をしてみて下さい。
これを実行してみれば、動作が理解出来るかと...

-追記-
質問②は、答えられません。読んでるうちにどっちか分からなくなりました。
後、p4パラメータが何を設定してるか分かりませんでした。
プログラミング・マニュアルに説明は書いてあるんですが。



zrs90(5さい)

リンク

2021/9/15(Wed) 09:33:05|NO.93872

補足。

このサンプル自体、未完成?

●1行目、3行目に使ってない変数がある。
まだ他にもあるかも。

●実行時、DELボタンを押さずに終了させると
hsp3.exeは動作を停止しました のウィンドウが出る
returnの処理でループしているのを、無理に終了させる為
エラーになるようです。その辺りの対応も必要かと。


後、質問3の補足、チェックはしてませんが、画像を表示する処理を66、67行の代わりに
書いても、レイヤー処理ですから動作が変わってきます。
それと、17行のp3パラメータを変更した場合とか...

私が、ざっとサンプルを見た所は、こんな感じです。
当方のスキル不足で、間違い等もあるはずなので...
ご指摘、改善点があれば、書き込んでいただけると
助かります。



わたしです

リンク

2021/9/15(Wed) 14:55:03|NO.93874

HSP3.6は入れてないのでサンプルやヘルプがどうなっているのか分かりませんが、
少なくとも①と②は↓(プログラミング・マニュアル)に記載されてますね
https://www.onionsoft.net/hsp/v36/doclib/hspprog.htm#LAYER_OBJECT

①そうです
②"描画後のレイヤー"です。



猪野

リンク

2021/9/15(Wed) 15:28:28|NO.93875

>1.画像を描画させたいが、その画像のポジションは表示させる座標をposにて定義させるという認識で正しいか
そんな感じです。
wparamからレイヤーを設置した時のカレントポジションが取得できるので、
それを参照しながら描画を行うと表示位置を固定することができます。
指定した位置の指定した範囲へだけ自動的に描画される、というものではないです。

>2.命令のp3(レイヤーID)とは、描画前のレイヤーか描画後のレイヤーのどちらであるか
すみませんが、質問の意味がよく分かりませんでした。
レイヤーIDは描画順を定数で指定するものだと認識しています。
objlayer_min,bg,normal,posteff,maxの5つですね。
例えばredraw 0のタイミングではminから順に呼び出されます。

>3.例えばボタンを押した瞬間に画像を表示させるスクリプトを作る際はどのようなコードが適しているか(具体的に提示してくださると嬉しいです)
適しているかは分かりませんが書いてみました。


#enum OBJID_BUTTON=0 #enum OBJID_LAYER *main //ボタンを設置する button gosub "画像表示",*btn //レイヤーを設置する layerobj 640,200,objlayer_normal,*layer;画像はこのサイズで分割される //表示したい画像を指定する picturePath=dir_tv+"hsp3dish.png" exist picturePath if (strsize==-1) { dialog "ファイルが見つかりません。",1,"エラー" end } else { objprm OBJID_LAYER,picturePath } stop *btn //ボタンが押されたら画像を表示する objprm OBJID_LAYER,0;表示したい分割№を指定する return #define ctype getPosition(%1) objinfo(%1,objlayer_info_axis) #define ctype getSize(%1) objinfo(%1,objlayer_info_size) #define ctype getX(%1) (%1&$ffff) #define ctype getY(%1) (%1>>16&$ffff) *layer switch lparam case objlayer_cmdinit //設置された時にレイヤーの位置とサイズを取得する position=getPosition(wparam) size=getSize(wparam) return case objlayer_cmdprms //文字列を渡された時は画像のファイルパスとして扱う loadPicture getX(size),getY(size),refstr return case objlayer_cmdprmi //int値を渡された時は分割画像№として扱う drawPicture getX(position),getY(position),iparam return default //それ以外は何もしない return swend #enum WNDID_MAIN=0 #enum WNDID_BUFFER //画像ファイルをバッファに読み込んで分割する #deffunc loadPicture int xSize,int ySize,str picPath celload picPath,WNDID_BUFFER celdiv WNDID_BUFFER,xSize,ySize return //読み込んだ画像をレイヤー内に描画する #deffunc drawPicture int xPos,int yPos,int picNum pos xPos,yPos celput WNDID_BUFFER,picNum return



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