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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0706
匿名希望HGIMG3 - setpos/setang8解決


匿名希望

リンク

2010/7/6(Tue) 15:14:28|NO.33551


repeat 32 ix = cnt repeat 32 iy = cnt repeat 4 if map(ix,iy,cnt)==1 { addsplate mid_w(ix,iy,cnt), , 16.0, 16.0, tid_w setpos mid_w(ix,iy,cnt), , 16.0*ix+8.0*(2-abs(cnt-1)), 16.0*iy+8.0*abs(cnt-2) setang mid_w(ix,iy,cnt), , deg2rad(((4-cnt)\4)*90) } loop loop loop

map() : マップデータを格納した配列
mid_w() : オブジェクトIDを格納する配列
tid_w : テクスチャID(αPNG:256x256)

上記のスクリプトを起動すると、(ix=0, iy=5, cnt=1)のタイミングで
setposの行でエラー3「パラメータの値が異常です」が出ます(stat=4)
第4パラメータ(z)や第3パラメータ(x)をコメントアウトしても同様のエラーが出、
setposの行をコメントアウトすると今度はsetangの行で同様のエラーが出ます

setangの行もコメントアウトすると何事もなかったようにループを全て抜けます
その際に登録されたオブジェクト数は約450程度です

ちなみに
map(0,5,1) = 1 (当然ですね)
mid_w(0,5,1) = 2
tid_w = 4
が代入されています

何か問題があれば教えていただけますでしょうか?



この記事に返信する


購入者

リンク

2010/7/6(Tue) 16:17:39|NO.33552

ぱっと見ただけですが
setpos

setang
も、
基本的な書式は、
「オブジェID」1つと、「x y z」3つ、
計4つのパラメータ記述が基本になっていると思うのですが。



匿名希望

リンク

2010/7/6(Tue) 16:30:08|NO.33553

>購入者さん
せっかく回答いただいたのにすみませんが、仰ってる意味がよくわかりません

基本的には4つですが、省略された場合は0で補完されますし、ヘルプにもデフォルト値が書いてあります
試しに省略した全てのパラメータに0.0を指定して見ましたが、やはり同様のエラーが出ました

何か意図を取り違えてますでしょうか?
よろしければもう少し詳しく教えて下さい



晩御飯

リンク

2010/7/6(Tue) 19:15:26|NO.33556

一重以上のループだとcntの挙動が面白い事になる事を今日知りました。



木村

リンク

2010/7/6(Tue) 19:17:20|NO.33557


#include "hgimg3.as" #define FAC_X 32 #define FAC_Y 32 #define FAC_W 4 #define Q_POINT 0,5,1 hgini dim map, FAC_X, FAC_Y, FAC_W dim mid_w, FAC_X, FAC_Y, FAC_W map(Q_POINT) = 1 mid_w(Q_POINT) = 2 tid_w = 4 for ix,,FAC_X for iy,,FAC_Y for iw,,FAC_W if map(ix,iy,iw)==1 { addsplate mid_w(ix,iy,iw), , 16.0, 16.0, tid_w setpos mid_w(ix,iy,iw), , 16.0*ix+8.0*(2-abs(iw-1)), 16.0*iy+8.0*abs(iw-2) setang mid_w(ix,iy,iw), , deg2rad(((4-iw)\4)*90) } next next next
 匿名希望さんのソースを上記の形にしてHSPエディタに流してみたのですが、普通に滞り無く
流れてしまい、匿名希望さんの言われるエラーが発見できませんでした。
 他の皆様は、そもそも匿名希望さんのソースでエラーが発生できましたのでしょうか?

 ちなみに、当方の環境はHSP3.2のWindows7HomePremiumの32Bitでした。



KA

リンク

2010/7/6(Tue) 21:23:25|NO.33558

>>上記のスクリプトを起動すると、(ix=0, iy=5, cnt=1)のタイミングで

 エラーの起こった配列の中身を、誰も分かりません。

 エラーのタイミングが分かっているのなら、試しに REPEAT を使わずに
 直接値を入れてみてはどうでしょうか?

 その結果により、原因を絞り込めることが多いです。

>>木村氏
 元のスクリプトを(内容が同じでも)変えてしまっては、余計分からな
 くなるような・・・
  for は内部マクロで、 repeat に置き換えられていたっけ。



匿名希望

リンク

2010/7/6(Tue) 21:30:20|NO.33559

回答ありがとうございます
肝心の環境を書くのを失念しておりました
HSP3.21のWin7-Ult(x86)です
念のためHSPのバージョンを3.2に戻してみましたが、結果は同じでした

ためしに木村さんのソースをコピーして動かしてみると正常に動作しました
それで色々試して見たのですが、
どうもsetpos/setangの第1パラメータ(OID)に2以上の値を指定するとエラーが出るようです

いきなり
setpos 2

とやってもエラーが出ますし(1だと生成されてなくてもエラーにはならない) setangでも同様です (
mid_w(Q_POINT) = 2
は、新しいオブジェクトIDが代入されてしまい0になるため無駄になってしまいます)

もしよろしければ、試しに
	map(Q_POINT) = 1
mid_w(Q_POINT) = 2
の部分を
	map = 1, 1, 1

に変更して実行してみてもらえますでしょうか



M

リンク

2010/7/6(Tue) 22:24:01|NO.33562

addsplate で登録されるのは、モデルIDです。
setposで指定するのは、オブジェクトIDです。

このソースだと、本来オブジェクトIDを指定しなければならない部分に、モデルIDを指定しています。
addsplateでモデルIDを登録したあとに、regobjなりを使って、そのモデルを利用したオブジェクトIDを登録する必要があります。

本来の流れ
addsplate モデルID
regobj オブジェクトID,モデルID
setpos オブジェクトID

いまの流れ
addsplate モデルID
setpos モデルID



匿名希望

リンク

2010/7/6(Tue) 22:38:23|NO.33563

回答ありがとうございます

ものすごく基本的なところを見落としていたのがわかりました
お騒がせしました



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