トップページgamedev
986コメント278KB

HSP - Hot Soup Processor [15]

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2007/06/03(日) 14:49:29ID:15sfFksi
       (  ,,,)
        .(  ,,)      スクリプト言語 HotSoupProcessor について
        ( ,,).        ゲーム製作の視点から、また〜りと語り合うスレ。
     , -──- 、
    (,;::-──-; )-、
     .|` ̄ ̄ ̄´;;|ヽ l   * 質問する前に検索してみる事
     l;    :::;;;l-' /   * ヲチ、ネタなどはスレ違い
    ,-ヽ───.'-、´..   * 歴代スレ、関連サイトは >>2-4 あたり
    ヽ ──── '

  ONION software (本家)
   http://www.onionsoft.net/
0034名前は開発中のものです。2007/06/09(土) 13:15:39ID:DGgDrqAJ
とりあえず2.61見てみようと思ったら、全部消してたw
0035名前は開発中のものです。2007/06/09(土) 13:34:45ID:6q00RRV1
何事も経験・・・事実とは書物よりも奇なり
だからおもしろい
0036名前は開発中のものです。2007/06/09(土) 14:03:19ID:+JVLUy/z
β10・・・なんだよー
ラベル型まわりの機能が完成するのを待ってるのに
#deffunc引数のlabel指定とか、比較判定とか
まだ放置なのかよー


>>33
マッチ演算子のことなら、無い・・・・・・!
無いが・・・

2.61のinstr命令は
バッファから指定文字列を検索することができる

そのことを
どうか初心者君らも
思い出していただきたい

つまり・・・・
我々がその気になれば
#defineなり#defcfunc なりで
比較判定命令を定義することも
可能だろう・・・・・・・・・・ということ・・・・!
0037名前は開発中のものです。2007/06/09(土) 14:40:32ID:D+T1yTCf
バグfixがほとんどっぽ
0038名前は開発中のものです。2007/06/09(土) 18:59:12ID:KoqKXay8
バグだらけで使えない新機能が加えられるよりは善いことだな
0039名前は開発中のものです。2007/06/09(土) 23:57:44ID:6q00RRV1
アナルに勃たないちんぽが入るよりは善いことだな
0040名前は開発中のものです。2007/06/10(日) 21:13:57ID:b7luKUpv
いや・・俺がわるかった・・・
話を続けてくれアナル
0041名前は開発中のものです。2007/06/10(日) 21:32:34ID:vyhWc2Ca
.asファイル…ってか今だと.hspファイルか。
これをpackファイルに入れずに実行ファイルを作ったら
ソフトに同梱した.asファイルを弄るだけで色んな動作を
させることができるソフトになって便利だぜ!

―って使い方を昔、自分でやってた気がする、もしくは聞いたことがある気がするが
数年前のことで忘れた。
無理だったっけ?
久しぶりに記憶を頼りにやってみたら
start.axだけpackファイルに含めて実行ファイルを作っても
#includeで連結した.asファイルの内容ですら反映されて
実行ファイル単体でも動作してしまう。

過去ワード検索してみても該当するのがみつけられんかったので
ボケ老人の夢かな

自分の夢が確かなら
メインのasファイルに#include "hoge.as"の一行だけ書いて
hoge.asにメインのコードをガリガリ書いて
実行ファイル作るときにhoge.asをpackしなければ
hoge.asを同梱しないと動作しない実行ファイルができあがった筈なんだが…
0042名前は開発中のものです。2007/06/10(日) 21:34:26ID:b7luKUpv
今試してみるアナル
0043名前は開発中のものです。2007/06/10(日) 21:41:42ID:sxZB+lji
>>41
hspcmp.dll 使うならまだしも無理だから
たしかに、hsp on hsp は便利そうだけどな
0044名前は開発中のものです。2007/06/10(日) 21:54:48ID:vyhWc2Ca
そうか。
夢だったか。thx
どこで記憶が捻じ曲がったのやら…

たぶん昔公式BBSであった
「.asファイルを入れなくてもstart.axをpackするだけで良い」
ってやりとりに衝撃を受けてからかも

入れないで良い=同梱.asファイルを後から編集できる
0045名前は開発中のものです。2007/06/10(日) 22:26:39ID:8XobPWRt
ボケ老人は run 命令のヘルプを見たら
記憶が戻るんじゃね?
0046名前は開発中のものです。2007/06/10(日) 22:29:35ID:b7luKUpv
>>45
戻らないと思う コムスンに頼まないとだめかもしれんね
0047名前は開発中のものです。2007/06/10(日) 22:59:11ID:vyhWc2Ca
魚いっぱい食べてみる
というか記憶そのものが間違った内容だった

塗り絵してくる
0048名前は開発中のものです。2007/06/12(火) 08:26:31ID:FILJcuty
庭の草取りがいいですよ
0049名前は開発中のものです。2007/06/12(火) 18:04:52ID:KRNdcmTx
>>36
やっぱりありませんか。
回答ありがd

どうにか自分でがんばってみる。
0050名前は開発中のものです。2007/06/12(火) 20:56:41ID:JAHVP1Hw
40  if (MAP.MPX0.MPY0=1)or(MAP.MPX1.MPY1=1) {
41   MDX=0 :MDY=0
42  }


というプログラムなのですが、実行すると
「#Error 7 in line 40 (a.hsp)
-->配列の要素が無効です」
と表示されます。
何がいけないのでしょうか?
0051名前は開発中のものです。2007/06/12(火) 21:23:42ID:MWBeX66r
そのままの意味だろ?
確保した配列の要素越えてたら駄目だぞ
MPX0とか入ってる数値を表示させたりして確かめてみ
0052名前は開発中のものです。2007/06/13(水) 19:30:55ID:Oujmb2sE
>>51
よくわからないです。
プログラム自体は本に入っていたプログラムを丸写ししただけなので、問題は無いと思います。
具体的にどこをどう直せばよいか教えていただけませんか?
0053名前は開発中のものです。2007/06/13(水) 19:34:28ID:Oujmb2sE
ちなみにプログラムはこうなっています。
http://www.borujoa.org/upload/source/upload12298.txt
dim命令で確保した以上の要素は使っていないと思うのですが・・・。
0054名前は開発中のものです。2007/06/13(水) 19:56:33ID:tG+9yLCM
>>53
HSP 2.x用のスクリプトをHSP3で動かしてね?
あのへんを括弧でくくってこうしてみろ↓

MPX0=(MX+MDX)/32 :MPY0=(MY+MDY)/32
MPX1=(MX+MDX+31)/32 :MPY1=(MY+MDY+31)/32
0055名前は開発中のものです。2007/06/13(水) 19:57:24ID:tG+9yLCM
いやいや、 R=RND(5) とか書いてあるからHSP3用だな。
0056名前は開発中のものです。2007/06/13(水) 20:19:45ID:Oujmb2sE
>>54
できました!
ありがとうございます。
0057名前は開発中のものです。2007/06/13(水) 20:50:23ID:PevRBwEM
>>52
>プログラム自体は本に入っていたプログラムを丸写ししただけなので、問題は無いと思います。
本に載ってるからって間違いが無いとは限らんぞ
元々2用にあったサンプルを3用に書き換えて
テストなしで掲載してるように見える・・・

>>53
>dim命令で確保した以上の要素は使っていないと思うのですが・・・。
だから表示して確かめろって言ってるだろ
0058名前は開発中のものです。2007/06/13(水) 21:46:16ID:Oujmb2sE
>>57
表示とはデバッグウィンドウの変数欄で確認するということでしょうか?
内容を見ても何がいけないのかよくわかりません。
0059名前は開発中のものです。2007/06/13(水) 21:52:50ID:tG+9yLCM
>>58
あんまりだな。生命の存在意義も、生きる意味も踏みにじっている。
エラー行の前で
title ""+MPX0+"/"+MPY0+"/"+MPX1+"/"+MPY1
とでもやってみろよ、全部224とか表示されてるぞ。
0060名前は開発中のものです。2007/06/13(水) 21:59:38ID:Oujmb2sE
>>59
32/64/32/56と表示されました。
具体的に、何がどうなると
>-->配列の要素が無効です
と表示されてしまうのでしょうか?
0061名前は開発中のものです。2007/06/13(水) 22:05:21ID:tG+9yLCM
>>60
ちょ
どの行でインターセプトしたらそんな値が出るんだ

まあ、どっちみち、dim MAP,16,16 の範囲超えてると感じないか? 算数的に
0062名前は開発中のものです。2007/06/13(水) 22:51:31ID:PevRBwEM
>表示とはデバッグウィンドウの変数欄で確認するということでしょうか?
まぁ、エラー出てる時とかならそれでも良いけど・・・
mesの使い方も知らないでいきなり仮想マップ使って判定とかやってるのか・・・

>>60
61も言ってるけど各要素16個しか確保してないだろ?
要素の数え方は0からだから最高15になる
これを越えたら
>-->配列の要素が無効です
ってなる(代入時は事情が違う場合があるが)
だからMPX0とかの中身を表示させて超えてないか見ろって言ってたの
(最初に出してきたスクリプトにはMPX0に何が入るかなんてこっちには分からない)
なのに確認もしないで
>dim命令で確保した以上の要素は使っていないと思うのですが・・・。
とか言うなっつーの(結局計算式の問題で超えてただろ)

もしかして、MPX0.MPY0が要素数に使われてるのも分かって無かった?


MPX0=MX+MDX/32
MPX0=(MX+MDX)/32
これの違いと、何で下のにしたら直ったかの理由は分かってる?

>>61
>どの行でインターセプトしたらそんな値が出るんだ
わかんねw
修正後でも修正前でも出ない気がするw
0063名前は開発中のものです。2007/06/13(水) 23:36:56ID:2Tk87HMR
ここまで話が通じないと釣りか?って思うなw
0064名前は開発中のものです。2007/06/13(水) 23:49:57ID:AtNkIAc/
ゲーム製作以前の問題だぜ。

なんだっけ

〜〜ってレベルじゃねーぞ!! か
0065名前は開発中のものです。2007/06/14(木) 08:13:51ID:+1x8xWif
HSP3.0用のDLLの作り方と呼び出し方を解説したサイトを教えてください。
0066名前は開発中のものです。2007/06/14(木) 09:19:31ID:lRwHs4am
HSP-SDK見ればつくれる
C++分からないとか設定の仕方分からない場合はC++自体学んでください

VS2005EEインストール→新規プロジェクト→HSP-SDKをインクルド→コード記述
コンパイル設定→コード生成→DLL→releseビルド→おk
0067名前は開発中のものです。2007/06/14(木) 15:28:43ID:wjp8uCfZ
>>62
なるほど、ようやく理解できました。

>MPX0=MX+MDX/32
>MPX0=(MX+MDX)/32
>これの違いと、何で下のにしたら直ったかの理由は分かってる?
前者だとMX+(MDX/32)になってしまうからですよね?
0068名前は開発中のものです。2007/06/14(木) 21:28:27ID:79qMipSC
HSP2だと加減乗除の優先順位がおかしかったから、
サンプルプログラムとかは常に注意しる。
0069名前は開発中のものです。2007/06/14(木) 22:36:32ID:TC4LCN2u
>>67
>前者だとMX+(MDX/32)になってしまうからですよね?
そう
HSP2だと左から順に計算されるから MX+MDX/32 でよかった
でも、HSP3からは演算子の優先順位が出来たから (MX+MDX)/32 にしないと駄目
だから本に載ってるのは中途半端にHSP3用に書き直してるみたいだから
間違いは無いと思い込まない方がいい

後、配列変数の書式を MAP.MPX0.MPY0 みたいのから
map(MPX0,MPY0) 見たいに添え字を()で囲うように全部直した方がいいかもしれない
0070名前は開発中のものです。2007/06/15(金) 19:57:38ID:4KhtVqY6
添え字は好みもあると思うけどな。HSP3の添え字書式は関数と区別がつかないので見にくい。
せめて map(MPX0)(MPY0) みたいな書式だったらマシだったのに
0071名前は開発中のものです。2007/06/15(金) 21:06:45ID:whR71zbQ
>添え字は好みもあると思うけどな。
HSP3を使うなら()を使った方がいいと思うけどな

dim a,10,10
a(5,5)=10
mes a(5,5)
mes (a.2+3.5) //a(2)+3 になってしまう
mes (a.(2+3).5) //()で囲えば大丈夫だが
//mes (a.5.(2+3)) //これはエラーになる

こんな違いがあるから俺は()を使う
0072名前は開発中のものです。2007/06/15(金) 21:46:50ID:4KhtVqY6
>>71
> mes (a.(2+3).5) //()で囲えば大丈夫だが
ちょw
それ通るのか、知らんかった

> //mes (a.5.(2+3)) //これはエラーになる
ちょww
HSPの実装マジマジカルw
0073名前は開発中のものです。2007/06/15(金) 23:32:13ID:pYMEFYPq
HSPは、basic とマクロアセンブラを足して2で割ったようなものだから。
0074名前は開発中のものです。2007/06/15(金) 23:39:00ID:LEH0ullt
>それ通るのか、知らんかった
HSP2じゃ使えなかったらしいな

>HSPの実装マジマジカルw
でも
a.5=10
mes a.(2+3)
これはエラーにならないと言う不思議w
0075名前は開発中のものです。2007/06/17(日) 22:36:56ID:Edsb0W6a
シューティング作成中だが、さっぱりわかんねえオワタ
0076名前は開発中のものです。2007/06/18(月) 01:36:54ID:xgVDamP4
同じくシューティング作ってる

敵や弾をすべてモジュール化して、毎フレームごとすべてをforeachで回してヒット判定とかしてるんだけど

これはもしかして無駄っつかアホ?
0077名前は開発中のものです。2007/06/18(月) 01:46:46ID:HhkeL6Nb
>>76
オレならそんな無駄は避けるが
それで自分で満足のいくゲーム速度が出るなら、いいんじゃね?
0078名前は開発中のものです。2007/06/18(月) 02:28:37ID:fz3qoeQP
出来る限りプラグインに丸投げしたほうが速いぞ。
0079名前は開発中のものです。2007/06/19(火) 07:18:15ID:kYyyrLp0
公式掲示板の連中はなんなんだ
HSPも笑えないほどユーザーレベル下がったよな

最近、古参が全く出てこなくなっちゃって
HSPdevも参加者減ってるのに糞ユーザーは要望・知ったかぶりばっか
オフでおにたまが微妙な発言したし

HSPも長くないかもしれない
すごくいいプログラム環境だったのに・・・糞ユーザー氏ねよ
とくにKENTAとか不如帰とかよぉ マジで空気嫁よ
0080名前は開発中のものです。2007/06/19(火) 07:37:27ID:CcZ9v5nt
>>79
気持ち悪い
0081おにたま2007/06/19(火) 09:04:32ID:Q3zYXdiI
ひさーしぶりにここ見にきてみた。お前ら相変わらずだな。ごちゃごちゃ言ってねえで
さっさと自分好みの言語作ってみろやボケが。おまえらの言語がすばらしかったらそれ
でHSP4作ってやんよ。
0082名前は開発中のものです。2007/06/19(火) 10:09:38ID:SXhP1T/T
おばか降臨
0083名前は開発中のものです。2007/06/19(火) 14:58:53ID:MSSC2J5g
>>79
公式掲示板のくだらないやりとりの部分(悪い部分)だけとって見れば、
そんなネガティブな印象になるのも無理はないが。
わりと知られてるHSP製ゲームやソフトの作者たちは、公式掲示板には現れてないし、
2003年からのコンテスト作品をざっと見るだけでも、レベルが下がっているとは思えないんだが

あの手合いの連中でも使えるくらいに使いやすくなったってことじゃないのかね
0084名前は開発中のものです。2007/06/19(火) 16:36:57ID:HqFeiaNi
今年もコンテストやるなら、出場してみっか!
0085名前は開発中のものです。2007/06/19(火) 19:09:19ID:qlsq7SL3
>>83
>公式掲示板には現れてないし
というか、もうあんまりな状況で現れづらくなったんじゃないか。
とくに、あの新しい動物掲示板は何だよ。動物園か? (いろんな意味で)
0086名前は開発中のものです。2007/06/21(木) 14:49:40ID:UAkzoNGc
新しいサイトと掲示板は見辛いし、使いづらい。
正直見る気がしない。
流行りだからといって、アフィリエイトblog風にすればいいってものじゃない。
やたら縦に長いし。
以前のほうがすっきりしてて見やすかった。
0087名前は開発中のものです。2007/06/21(木) 17:48:32ID:vclqLVz6
HSP3.0b10からコンパイラ自由配布になったね

コンパイル対象がファイルじゃなくてバッファも指定できるといいな
そしたらモジュールもプラグインみたくコードを見られずに機能提供できるんだが

これでネイティブコード吐き出させたら最強だな
0088名前は開発中のものです。2007/06/21(木) 18:46:35ID:mdAvpvKw
>>87
>そしたらモジュールもプラグインみたくコードを見られずに機能提供できるんだが
アホじゃねーの
用途に応じて改良できないモジュールなんて価値ねーよ
0089名前は開発中のものです。2007/06/22(金) 06:56:47ID:FNJlhwGp
>>87
> HSP3.0b10からコンパイラ自由配布になったね
「準備を進めています」と書いてあるから、まだなんじゃね?
0090名前は開発中のものです。2007/06/22(金) 13:06:49ID:1z4MoKp4
> ・HSP3ライセンスについて(β10)
>
> HSP3.1のリリースに向けて、いくつかのライセンス項目を修正する方向で準備を
> 進めています。ライセンス変更の主な事項は、以下の通りです。
>
>
>        ・HSPランタイム、コードジェネレーターを他のアプリケーション及び
>        システムに組み込み可能な形に変更
>        (ただし、HSPそのものを有償配布することは不可)
>        ・これまで再配布禁止だったhspcmp.dllを自由に配布可能に変更
>        ・同梱されているシステムマニュアル・サンプル、ドキュメント類、
>        及びプラグインをフリー(BSDライセンス)で提供する形に変更
>
> また、HSPコア部分のランタイム、コードジェネレーター、中間言語仕様を
> ソースコードも含めてOpenHSPとして公開できるよう準備をしています。
0091名前は開発中のものです。2007/06/22(金) 19:31:38ID:zyQn23/x
>>90
コア部公開したら逆コンパイラが出回るな
人生オワタ
0092名前は開発中のものです。2007/06/22(金) 19:41:57ID:uMhY8/gp
人生安っぽすw
逆コンしやすいJavaのユーザーなんかみんな死んでるな
0093名前は開発中のものです。2007/06/22(金) 19:48:14ID:jubO/TzM
つーか、そこまで隠蔽したがる奴がわからんが。
不正に他人のコード流用でもしてんのか?w
0094名前は開発中のものです。2007/06/22(金) 20:48:27ID:1z4MoKp4
ソース公開でHSPtoCコンバータみたいなの出てくるとおもう
おにたまさんもいつまでも出来るわけじゃないから良い流れではあるとおもう
0095名前は開発中のものです。2007/06/22(金) 21:56:39ID:mMz9DQRk
標準命令だけでスクロールバーを付けて、テキストをスクロールさせるにはどうすればいいでしょうか?
0096名前は開発中のものです。2007/06/22(金) 22:47:31ID:/onSE/9n
もうやる気なくなってるとかか?
0097名前は開発中のものです。2007/06/22(金) 22:57:03ID:CBh41taG
>>95
テキストって何で表示させてるテキストだ?
0098名前は開発中のものです。2007/06/22(金) 23:36:24ID:UBXd9/qn
>>91
実はもう逆コンパイラ有ったりしてw
少なくとも漏れ以外にhspletの作者は逆コンパイラを作ることができるな、うん
0099名前は開発中のものです。2007/06/23(土) 00:09:15ID:Ag5WBKuA
hspletは暗号化DPMを読んだりはしないが
0100名前は開発中のものです。2007/06/23(土) 00:58:19ID:Vv4zbqST
最強に極まってる俺には
他人のスクリプトを見る必要など無いわけだが
0101名前は開発中のものです。2007/06/23(土) 02:22:33ID:mUPH0N6u
なるほど
0102名前は開発中のものです。2007/06/23(土) 07:15:23ID:OCNm4PKF
>>95
mesboxのことか?
0103名前は開発中のものです。2007/06/23(土) 11:39:44ID:a5M2brbh
配列変数の要素の数が不定なプログラムを組んでいるのですが、
その配列変数の要素をすべて掛け算するにはどうすればいいのでしょうか?
たとえば、A(1)〜A(5)の配列変数にはそれぞれ2が入っていて、それらをすべて掛け算すると32になりますよね?
そういった計算を要素の数が不定な配列変数でも行いたいのですが、可能ですか?
0104名前は開発中のものです。2007/06/23(土) 12:06:11ID:ngSwrVIN
>>103

Palam=0 ;積
count=0 ;カウンタ

repeat
//カウンタ回し
count+1

//空の時に*0で値が0になるのを防止。
if A(count)=0 : A(count)=1
if A(count+1)=0 : A(count+1)=1

//掛け算
Palam=A(count)*A(count+1)

//終了チェック
if count=length(A)-1 : break
loop

mes ""+Palam+""
stop

こんなもんか。テキトーだから微調整とか帳尻あわせは自分でやってくれ。
配列の要素数はlength関数で表せるよ。
0105名前は開発中のものです。2007/06/23(土) 13:29:23ID:Ag5WBKuA
>>104
0排除したら要求仕様と合わなくね?

i = 1
foreach a : i *= a.cnt : loop
mes i

でよし
0106名前は開発中のものです。2007/06/23(土) 15:05:04ID:a5M2brbh
>>104-105
ありがとうございます。
foreach命令は使ったことが無かったので、こんな便利な命令があると走りませんでした。
ちなみに
>i *= at.cnt
この部分はどういう意味ですか?
*は掛け算の記号ですよね?
0107名前は開発中のものです。2007/06/23(土) 15:08:57ID:Ag5WBKuA
複合代入でぐぐれ
0108名前は開発中のものです。2007/06/23(土) 16:40:09ID:f7has2CW
ちなみに、HSPLetはforeachの動作がオリジナルと違うので
使う場合はdim n,5とかをforeachに指定して
エラーに悩むことが無いように注意しないといかんに
0109名前は開発中のものです。2007/06/23(土) 17:03:27ID:tl3cwwx9
p = 6
a.0 = 2
a.1 = 3
p *= a.0
mes p
p *= a.1
mes p

を実行汁
0110名前は開発中のものです。2007/06/24(日) 17:04:04ID:pviiOgcx
さっぱり原因がわからないので力をお貸しください。
hsp3を使っておりfpsを60に安定させるためのスクリプトを書いたのですがうまく動いてくれません。
hspdxfixを使用しes_screenでDirect3D描画をオンにすると次の更新時間に加算される値がおかしくなるのです。
本来は1000/60が加算される筈なのですが倍の32に近い数値が加算されてしまうようです。
Direct3Dを使わなければ問題なく動いてくれるのですがどこがおかしいのかさっぱり分かりません。

#include "hspdxfix.as"
////////////////////////////////////////
es_ini//初期化処理
es_screen 640, 480, 32, 0, 1, 1
if stat=1: dialog "DirectXの初期化に失敗しました",1: end
if stat=2: dialog "スクリーンの初期化に失敗しました",1: end
gsel 0: es_cls: es_sync: wait 50
onexit goto *gameend//終了ボタン時動作
////////////////////////////////////////
es_timer tm//経過時間取得
tmwait=1000.0/60//待ち時間代入
tmnxt=double(tm+tmwait)//次の更新時間
0111名前は開発中のものです。2007/06/24(日) 17:04:49ID:pviiOgcx
//--------------------------------------
repeat
getkey k_esc, 27//esc強制終了
if k_esc==1: goto *gameend
es_timer tm
if tm>=tmnxt: gosub *mainloop//メインループ
await 0
loop
//--------------------------------------
*gameend
es_bye: end
////////////////////////////////////////
*mainloop
es_getfps fps//fps取得
tmnxt+=tmwait//fps管理
//--------------------------------------
es_cls//裏画面
pos 0, 0
es_mes "fps="+fps, -2
pos 0, 16
es_mes "tm="+tm, -2
pos 0, 32
es_mes "tmnxt="+tmnxt, -2
pos 0, 48
es_mes "tmwait="+tmwait, -2
//--------------------------------------
es_sync 0
return
0112名前は開発中のものです。2007/06/24(日) 18:07:32ID:ZU4NTMm1
別にes_timerなんてややこしいことしなくても
repeat
es_sync 16 // ≒ 1000 / 60
await 0
loop

だけで60fpsになるはず。

repeat
es_cls
es_getfps fps
pos 0, 0
es_mes str(fps) + "fps."
es_sync 16
await 0
loop
とでもしてみ。
0113名前は開発中のものです。2007/06/24(日) 18:50:43ID:pviiOgcx
レスサンクス。
ただ少し説明が足りなかったみたいです。
112さんの方法ででうまくいくのは知っていました。
問題が解決しなかった場合はこの方法で行く予定です。
ただ今回教えてもらいたかった所はなぜDirect3Dを使うと値が変わってしまうのか、という所です。
112さんの方法で確かにfps部分はうまくいくと思います。
しかし今後スクリプトを書いていったときまた上と同じ現象が起こるかもしれません。
そういったことの回避、対処方法が知りたかったのです。
0114名前は開発中のものです。2007/06/24(日) 20:15:51ID:kA+DbItR
理由は分からないが、実数の演算精度が変わっちゃうのが原因みたい
HSPの実数は64ビット(16桁ぐらい?)精度を保てるはずなのに
hspdxfixでD3Dを使うと16ビットぐらいに落ちる
(D3D使わなければHSPの実数精度と同じ)

だからタイマーの数値が大きくなると不安定になって
16.6足してはずなのに結果が全然違ったりする

tmwait=1000.0/60//待ち時間代入
tmnxt=double(tm+tmwait)//次の更新時間
↓ ↓ ↓
tmwait=(1000*1000)/60//待ち時間代入
tmnxt=tm*1000+tmwait//次の更新時間



if tm>=tmnxt: gosub *mainloop//メインループ
↓ ↓ ↓
if (tm*1000)>=tmnxt: gosub *mainloop//メインループ


みたいにして実数使わなければいい
(PCの電源切らない人も居るだろうからもうちょい工夫が必要だが)

これは使用なのかバグなのか不明
作者さんに報告した方がいいかもしれい
仕様ならtxtに書いといてもらった方がいいと思うし
0115名前は開発中のものです。2007/06/24(日) 20:44:35ID:kA+DbItR
#include "hspdxfix.as"
tmwait=1000.0/60
es_ini
es_screen 640, 480, 16, 0, 1, 1
es_cls
tm=0
tmnxt=double(tm+tmwait)
repeat 20
tmnxt_=tmnxt
tmnxt=double(tmnxt+tmwait)
pos 0,cnt*16
es_mes str(tmnxt-tmnxt_)
loop

es_timer tm
tmnxt=double(tm+tmwait)
repeat 20
tmnxt_=tmnxt
tmnxt+tmwait
pos 100,cnt*16
es_mes str(tmnxt-tmnxt_)
loop
es_sync 0

自分所ではタイマーは432941777とかだから
tmwait足した後tmnxtの変化を見ると32になってる
0116名前は開発中のものです。2007/06/24(日) 21:09:15ID:kA+DbItR
#include "hspdxfix.as"
a=987654000.000456789
b=987654000.000456789
a+321.123
es_ini
es_screen 640, 480, 16, 0, 1, 1
b+321.123
es_cls
es_mes strf("%10.10f",a)
pos 0,30
es_mes strf("%10.10f",b)
es_sync 0

この方が分かりやすいかな?
es_screen の前と後で実数演算精度が全然違ってる
0117名前は開発中のものです。2007/06/24(日) 21:50:28ID:fXY/Kin5
なんだそれ
fix入れてないんで数字見えんが、本当ならおかしな動作だ
0118名前は開発中のものです。2007/06/24(日) 22:06:28ID:pviiOgcx
レスサンクス。
確認してみました。
確かにDirect3Dを使うと実数の計算の精度がかなり違ってくるようですね。
基本的にPCは付けっぱなしなのでタイマーの数値が大きかったのが原因のようです。
ただ再起動したところで数時間もすればすぐに演算精度が変わってきそうだ。
と言うか>>116は分かりやすいですね、何でこんな値になるんだろう。
これはhspというよりhspdxfixの問題だから作者さんのbbsあたりに書いて置いた方がいいのかな。
0119名前は開発中のものです。2007/06/24(日) 22:08:20ID:ocRSH5bg
>>117
どうもdxfixとは関係ないかもしれないw

#include "hgimg3.as"
a=987654000.000456789
b=987654000.000456789
a+321.123
hgini
b+321.123
setfont 16,16,12,1 ; font Tex select(cx,cy,px,mode)
texload dir_exe+"\\sample\\hgimg3\\fontchr.bmp" ; フォントテクスチャの登録
hgdraw ; 描画
fprt strf("%10.10f",a),8,0
fprt strf("%10.10f",b),8,32
hgsync 10 ; 時間待ち

これでも精度が変わってたw
fvsetとかは32ビットの実数になってるのは知ってたけど
普通の計算も通常とは違ってるのは気が付かなかった・・・
(3.0aでしか試してないけど)
0120名前は開発中のものです。2007/06/24(日) 22:15:28ID:ocRSH5bg
>>118
HSP3でD3Dを使うと実数の精度が変わるって事のような気がする
値としては64ビットを扱えるけど演算は32(16?)ビットみたいな・・・
0121名前は開発中のものです。2007/06/24(日) 22:31:42ID:fXY/Kin5
hginiだけで変わるな

#include "hgimg3.as"
a=0.1111111111111111
hgini
b=0.1111111111111111 / 1.0
mes strf("%.20f",a)
mes strf("%.20f",b)

代入までならいいけど、演算の精度はdoubleからfloat(32ビットだよ)に
変わってる。

これは変だ、あんまりだ
0122名前は開発中のものです。2007/06/24(日) 23:07:48ID:fXY/Kin5
こっちのでhginiの有無で動作を比べたほうがいいな。
#include "hgimg3.as"
hgini
a=0.1111111111111111
b=0.1111111111111111 + 0.0
mes strf("%.20f",a)
mes strf("%.20f",b)
0123名前は開発中のものです。2007/06/24(日) 23:53:48ID:pviiOgcx
あらー、てことはhspでDirect3Dを使う限り実数の演算には気をつけたほうがいいみたいですね。
皆さん検証サンクス。
0124名前は開発中のものです。2007/06/25(月) 00:44:15ID:hRvLfF9s
外部プラグインによってはHSPコアの演算機能が変質するっていうすごい問題がわかった
この功績は大きいな
0125名前は開発中のものです。2007/06/25(月) 12:18:21ID:SB17koxs
修正されるかね
プラグイン側の問題なノアk
0126名前は開発中のものです。2007/06/25(月) 14:39:08ID:m2e8IBAx
e3dhsp3でも演算制度が落ちる事を確認
この事について時に記載なし

0127名前は開発中のものです。2007/06/25(月) 17:22:37ID:sJpJAVN7
速度稼ぐために精度落としてるとかなのかねぇ。
0128名前は開発中のものです。2007/06/25(月) 18:23:06ID:hRvLfF9s
HSPの中間コード解析の重さに比べたら、倍精度と単精度との速度差なんて無いに等しい というか無いよ。
なんか、すばらしい面白い楽しいバグがある予感。
0129名前は開発中のものです。2007/06/25(月) 19:36:08ID:A3wlBBCy
DirectXのライブラリがロードされるときに、勝手にCの実数型を差し替えるんじゃないかな。
0130名前は開発中のものです。2007/06/25(月) 21:33:16ID:KRYRd+kK
HSPじゃなくDirect3Dの仕様と思われ
0131名前は開発中のものです。2007/06/25(月) 21:59:30ID:sJpJAVN7
とするとdouble型しか無いのが問題ということか?
0132名前は開発中のものです。2007/06/26(火) 18:16:05ID:CVUzVtjK
ライブラリがD3D呼んでようがなんだろうが、HSPインタープリタの実数精度とは
関係ないはず。それが変わるのが問題
0133名前は開発中のものです。2007/07/01(日) 02:36:40ID:4RrD3Q8k
pcbnet使って鯖とクライアントでデータ管理するソフト作ることになったんだが・・・
それ以前にHSPで作れんのかね?
■ このスレッドは過去ログ倉庫に格納されています