過去ログ


[870]HSPDXFIX.DLLにαチャンネル付きPNGを読み込める機能を追加していただきたいのですが……
焼き芋
2009/03/03 01:38:35

こんばんは、焼き芋という者です。
HSPDXFIX.DLLについて質問がありましたので書き込ませていただきました。

HSPDXFIX.DLLではPNG(αチャンネル付きも含む)形式の画像を読み込めないとの
ことですが、今後PNGに対応する予定はありますでしょうか?
是非とも対応していただきたいです。
またHGIMG3.DLLのようにアンチエイリアスのかかった文字などが表示できる機能も
是非ともお願いしたいです。

宜しくお願い致します。


[869]cwsdrv.as について
Sky Fish
2009/03/02 00:05:17

一年前、こちらの掲示板でお世話になった、Sky Fishです。
お陰様で、開発も順調に進んでおります。その節は、レスを頂きましてありがとうございました。
今回は、サウンド系の質問をさせて頂きたく、書き込みをさせて頂きます。
wavデータを再生した時、チャネルを割り当てますが、そのチャネルが
再生中かどうか確認する方法は、ありますでしょうか? 関数をみたところ、
ないようなので、多分、無理かなと思っていますが、もしかしたら上手い方法が
あるかもしれないと思ったので、質問をさせて頂きました。
ゲーム中では、その効果音が鳴り終わった後に、次の効果音を鳴らすという表現を
したいのですが、是非とも、Directx7もサポートしたいと考えています。
何か上手い方法がありましたら、ご教授を頂ければ幸いです。どうぞ宜しくお願いします。


[868]Visual Studioにひっかかる
Takanashi
2009/01/07 10:16:46

初めまして、hspdxfixを利用させていただこうとしている者です。

ちゃんと分かってないためなのかもしれませんが、hspdxfixを使ってフルスクリーンモードのプログラムを作ると、終了時にVisual Studioというソフトのデバッガが起動して、『Win32でサポートされていない例外が発生しました』というメッセージが出ます。
デバッグの言い分を下にコピペします。
hsp3.exe の 0x736ddcdc でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x736ddcdc を読み込み中にアクセス違反が発生しました。

デバッグモードでは特におかしくなっている点は見られないし、プログラム自体もちゃんと動いているのですが。しかもウィンドウモードだと普通に終了します。

問題のプログラムは下の通りで、ほぼ説明書にあったものと同じです。
ここから
#define HSPDXFIX_DEBUG
#include "hspdxfix.as"

    es_ini                    ; system初期化
    onexit *owari
    es_screen 640,480,32,,0    ; スクリーン初期化
    if stat=1 : goto *dderr1
    if stat=2 : goto *dderr2

    goto *start                ; 正常に完了

*dderr1
    dialog "DirectXの初期化に失敗しました。",1
    end
*dderr2
    dialog "スクリーンの初期化に失敗しました。",1
    end
    ;------------------------------------------------------------------

*start
    gsel 0
    es_cls
    es_sync
    wait 100

    repeat 100
    es_cls 255,0,0
    
    es_sync
    await 25
    loop
    
    end

ここまで。
directXのバージョンは2007年11月のものです。
今のところ実害はないので無視しても構わないような気はするのですが、やはり気持ち悪い感じがするので質問させていただきました。
長々と申し訳ありません。


[867]システムの初期化(es_ini)でエラー
Nita
2008/08/13 20:50:52

hspdxfixを利用させていただいている者です。
感謝いたします。

私はhspdxfixを使用し、ゲームを製作していますが、
最近、ユーザの方からエラー報告を頂きました。
私なりに調べた結果、es_iniを実行した時点で
エラーが発生しているようです。
エラー番号は38で、外部DLLの呼び出しに失敗しているようです。
もちろんhspdxfix.dllは実行ファイルと同じフォルダにおいて
配布しています。私の環境や、その他のユーザさんの環境では
エラーが発生しません。
本来は私自身で解決するべきですが、手も足も出ません。
よろしくお願いします。

エラー原因究明のために、ユーザの方に実行していただいたプログラム。
ok(1)までは表示されるようです。
#include "hspdxfix.as"
dialog "ok(1)"
es_ini
dialog "ok(2)"




[866]全画面フルスクリーンでチラつく
buri
2008/06/02 22:41:21

はじめまして、hspdxfixには大変お世話になっています
以下報告です

「winampで曲再生時」に「hspフルスクリーン」で次のどちらかの条件を満たすとき
画面が時々チラつきます(たぶん

 ・es_fmesで文字を表示したとき2〜5秒間隔でチラつく
   (es_drawで何かスプライトを描くと10〜30秒間隔くらい)

 ・es_putを使用したとき画面がまれにチラつく
  64*48個の画像を置いて試すと5〜10秒間隔くらい
   (es_set / es_exputではチラつきはなかった)

もし万が一自分と同じ症状で困っている人がいたら、と思いまして
検索用に投稿させていただきました。


[865]拡大&縮小について
リン
2008/05/30 18:17:11

はじめまして、
最近hspdxfixを使用させていただいております。

製作する上で気付いたのですが、
スプライトのサイズを変更する場合、
例えば座標 x100y100 に x48y48 のスプライトを x24y24 サイズにするとグラフィックは左上の頂点座標(x100y100)に表示されますよね?

この場合、ゲーム中リアルタイムに拡大したり縮小したりする演出をした場合、
頂点座標を計算して変えないと縮んだ場合は左上に移動していく様に見えてしまいます。

こうならないように、縮小&拡大しても画像の中心位置が変わらないような命令はありますか?

前回使ってた別のプラグインには実装されており大変便利だったので、質問させていただきました。

分かりにくい説明ですいません;

よかったらレス下さいm(_ _;)mオネガイシマス・・・


[864]ありがとうございました
cat_syoya
2008/03/24 02:14:40

返信ありがとうございました
アニメーションに関しては、その仕様に沿ったデータやプログラムを載せる事にしました


[863]Re:hspdxfixのスプライト機能について
Sinagawa
2008/03/21 00:01:29

>スプライト機能を使用しDirect3Dを有効にすると
>それぞれ違うサイズの画像パターンをリンクさせてアニメーションさせた時に
>最初に表示された画像のサイズに揃えられて表示されてしまうのですが
>回避する方法は無いのでしょうか?
どこで間違えたかそういう動作になってしまっているようです。
アニメーションさせるスプライトのサイズを全て合わせる以外に対処法はありません。

>es_copyの速度がスプライトを使用した時に比べて遅すぎるのは改善されないのでしょうか?
初期から指摘されていることですが、はっきりとした原因がわからないため劇的な改善が
見込めない状態です。一応、若干の手間と引き替えに多少は改善することが出来るのですが。

>それと、スプライトのパターンごとに表示する座標を調整(中心位置の設定)をできるようにはなりませんか?
es_excopyもそうですが、回転軸は変更できるようにしたいと思っています。
長らく動きがない状態でご迷惑をかけておりますが、今しばらくお待ちください。


[862]hspdxfixのスプライト機能について
cat_syoya
2008/03/17 22:42:34

質問と要望なのですが
スプライト機能を使用しDirect3Dを有効にすると
それぞれ違うサイズの画像パターンをリンクさせてアニメーションさせた時に
最初に表示された画像のサイズに揃えられて表示されてしまうのですが
回避する方法は無いのでしょうか?

また、自作のアニメーション表示ルーチンをhspdxfixのスプライト用に調整していて思ったのですが
es_copyの速度がスプライトを使用した時に比べて遅すぎるのは改善されないのでしょうか?
それと、スプライトのパターンごとに表示する座標を調整(中心位置の設定)をできるようにはなりませんか?
(hspdxのシンプルな設計に反するものかもしれませんが)
要望を長々とすみませんでした


[861]Re:画面描画で発生する問題について
Sinagawa
2008/01/07 22:55:23

新年早々レス遅れてすみません。

>(1)es_byeが、スクリプト中に含まれていると、
>   実行されない処理の流れであっても、処理が異常終了する。
>   また、同様に、フルスクリーンから復帰の際、処理が落ちる。
>
> → end命令で、内部的に処理されるため、記述を中止することで
>   現象の発生は抑制できるようですが、このような措置で
>   大丈夫でしょうか?
実行されなくてもスクリプト中に記述が含まれるだけで強制終了してしまうというのは
不思議ですが、es_byeの挙動には現在不具合を抱えております。
記述をやめることで動作が改善されるのであれば、それでも問題はありません。

なお、(3)について補足しておきますと、ウィンドウモード時にパレットが扱えるかどうかは、
そのときの画面モードがパレットを持っているかどうかに依存します。
で、WindowsXPの場合(互換性の設定なしには)パレットモードを持っていませんので基本的に
ウィンドウモードではパレットを扱えない、ということになります。


[860]RE: 画面描画で発生する問題について
Sky Fish
2008/01/03 16:06:52

自己レスですいません。

(2)は、バッファを保持するとき、パレットモードで
明示的に初期化することで解決できました。マニュアルの中に
しっかりと書いてありました…。また、処理落ちするようなので
GZOOMで事前処理し、オフスクリーンバッファに転送してもうまくいきました。

(3)は、ウインドウモード利用のときに、パレット操作が出来ない仕様のようだ
ということが分かりました。そのため、(2)と同じ方法で、パレット操作後、
オフスクリーンバッファに転送することで、解決できました。

どうもお騒がせしました…。

しかし、(1)だけは、相変わらず、ダメでした…。なぜでしょうか…?
ご存知の方がおられましたら、ご教授を頂きたいと思いますので
どうぞ宜しくお願いします。


[859]画面描画で発生する問題について
Sky Fish
2008/01/02 15:22:39

いつも利用させて頂いております。(hspdxfix.as)

色々な機能を使った結果、下記の現象が発生して困っています。
マニュアルを熟読しましたが、解決できませんでした。


(1)es_byeが、スクリプト中に含まれていると、
   実行されない処理の流れであっても、処理が異常終了する。
   また、同様に、フルスクリーンから復帰の際、処理が落ちる。

 → end命令で、内部的に処理されるため、記述を中止することで
   現象の発生は抑制できるようですが、このような措置で
   大丈夫でしょうか?


(2)es_zoomで、8ビットカラー画像を拡大・縮小するとき、
   ウインドウモードでは正常に処理できるが、フルスクリーン時、
   正常な処理できず、画像が化けてしまいます。

 → 初心者なので、何かおかしなことをやっている可能性が
   高いのですが、原因がよくわかりません…。この機能利用時に
   利用条件や制約はありますでしょうか?


(3)8ビットカラーのパレット操作がうまくいきません。
   ウインドウモードやフルスクリーンでの利用時に、
   利用条件や、制約はありますでしょうか?

 → やりたい処理としては、表示した画像のパレットを変更して
   色を変えたりといったことを実現したいのですが、
   なかなかできません。予め色を変更した画像を準備して
   差し替えるといった処理が適切なのでしょうか?
   皆様は、どのようにプログラムを書かれますでしょうか?


質問ばかりで申し訳けないのですが、どなかたお分かりになる方が
おみえでしたら、ご教授を頂けないでしょうか。どうぞ宜しくお願いします。


[858]あ、すいません。
HKR
2007/10/21 22:26:38

すぐひとつ下に同様の質問がありましたね(汗
どうもすいませんでした・・・orz


[857]ありがとうございました
HKR
2007/10/21 22:24:32

レスありがとうございました。なるほど、そういう事なんですね。

すいません、もうひとつよろしいでしょうか?
内部画像処理を320*240で行い、最終的に640*480に拡大して出力させようと思って
いるのですが、スプライトをオフスクリーンバッファに描画する事は可能でしょう
か?現在以下のようなことをやってるのですが、なんとなく無駄なような気がして・・・

es_draw:pos 0, 0
es_xfer 1, -2, 0, 0, 320, 240 ;バッファに退避
es_exboxf 0,0,SCR_SIZEX,SCR_SIZEY,0 ;スクリーン消去
es_zoom SCR_SMIX, 0, 0, 320, 240, SCR_SIZEX, SCR_SIZEY    ;拡大コピー


[856]レス
Sinagawa
2007/10/21 11:14:48

すみません、レス遅れました。

>&さん
現状ではスプライトをバッファに書き込む機能はありませんので、毎フレーム
全画面書き直しするしか方法はありません。

>HKRさん
基本的にほとんどのハードウェアは8bitモードでのDirect3D使用はサポートしていない
(少なくともHALは使用できない)はずなので、それが正常な動作です。
hmm.dllも8bitモードでの初期化は推奨していませんので、単にHELでの初期化に成功している
だけかもしれません。


[855]es_bufferでシステムエラー(その後)
HKR
2007/10/19 13:21:28

度々すいません、今es_screen命令のstatを参照したら2が返ってました。
即ちスクリーン初期化に失敗しているみたいです。

色々試してみましたが、p3=8(8bitパレットモード)とp6=1(Diretc3Dを使用する)を
同時に設定したときのみ発生するみたいです。
hmm.dllを使用していたときには有効だった設定なのでシステム的な問題ではない
と思うのですが・・・

本当はp6=0にしたい所なのですが、既知の問題もあるようですので、とりあえず
16Bitカラーで使ってみたいと思います。screen設定パラメータにコツみたいなのがある
のかもしれませんね(涙


[854]es_bufferでシステムエラー
HKR
2007/10/19 12:47:54

本日使わせていただこうと思いダウンロードしてみたのですが、es_bufferの行で
システムエラーが発生してさっぱり前に進みません。
ちなみにフルスクリーンモードをウィンドウモードにするとエラーは発生しないよう
なのですが、以下のソースコードに問題は御座いますでしょうか?
# 実際にはbufferとes_bufferの間にpicloagが入っています

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#include     "hspdxfix.as"

    es_ini
    es_screen 640,480,8,0,0,1
    buffer 1,640,480,1
    es_buffer 1,2
    es_bye
    end
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

WindowsXP HSP3.1 HSPDXFIX0.19c GeForce4Ti4200 DirectX9


[853](無題)
&
2007/10/18 18:17:30

今、アクションRPGを作っています。マップ移動の時1600回程回転させて、スプライトを書いているんですが。hspdxfixでバッファにスプライト書き込んでその絵だけをメインに描いてスクロールする事は、可能ですか?

[852](無題)
ƒダック
2007/10/18 18:10:47

>>Sinagawa さん
有難うございます。gsel 0が抜けていたみたいです。^^;


[851]サンクスです
高田
2007/09/27 12:22:17

>>Sinagawaさん
レス参考になりました
別ウィンドウで試してみます


[850]レス
Sinagawa
2007/09/24 23:21:27

>高田さん
すいません、レス遅くなりました。
現状ではDirectXで描画した画面にオブジェクトをかぶせる事はできません。
(オブジェクトの周りを更新しないようにすれば使えるはずですが、実現させるための
機能がそろっていません)
ウィンドウモードならば別にウィンドウを出し、そっちにオブジェクトを描画させることで
一応回避はできるのですが。

>ダックさん
システム変数mousex、mouseyを使えばウィンドウ上の座標を取得できます。


[849]マウスの座標
ダック
2007/09/24 15:49:15

スクリーン上のマウスの座標ではなく、ウィンドウ内のマウスの座標を取得する事は、不可能なのでしょうか?API関数を使えば出来るのでしょうか?教えてください。

[848]HSPDXFIXを使いながらオブジェクトを表示する方法
高田
2007/09/16 22:14:47

メッセージボックスやボタンなどを表示したいのですが
やはり、DirectXを使うとオブジェクトは表示できないのでしょうか?
標準命令を使わずに表示する方法ありましたら教えてください


[847]Re:CWSDRVについて
Sinagawa
2007/09/02 23:48:19

>多量の敵を撃破などの場面で、同じバッファの音を連続で
>再生していると、途中でそのバッファの音が二度と鳴らなくなってしまいます。
まだこちらで検証していませんが、CWSDRVに限らず発生するとのことですので、
ハードウェアの方が怪しいと思います。
他のDirectSoundを使ったゲームなどでその症状が発生するなら間違いないです。


[846]CWSDRVについて
Mezzo
2007/09/02 20:01:25

はじめまして。突然ですが質問させてください。

現在シューティングゲームを制作しておりまして、こちらで発表
されておりますCWSDRVにて効果音をWAVEで鳴らそうとしているのですが
多量の敵を撃破などの場面で、同じバッファの音を連続で
再生していると、途中でそのバッファの音が二度と鳴らなくなってしまいます。

長いソースなので、こちらでお見せするのは難しいのですが
一応使い方としては

1.drv_iniで初期化
2.snd_loadでWAVEデータをバッファにロード
3.snd_playで、鳴らしたいタイミングでループなし再生。
(1フレーム毎に同じバッファを連続して鳴らすような場面あり)

といった手順で行なっております。もしかして、おかしいところや
抜けてる手順等あるのでしょうか。

この件こちらで質問していいものかどうか、少々迷いまして…
実は、同種の他のプラグイン(hmm.dll)でも同様の症状が
発生してしまうのです。なので、自分自身にDirect Soundの
知識が不足しているゆえの症状である可能性もあると考えてます。

もし解決方法、もしくは何かお心当たり等ありましたら
是非ともご教示いただければ大変幸いに思います。


[845]Re:es_screenと終了時エラー
Sinagawa
2007/08/27 00:15:02

>HSP3.1環境下でes_screenの第6パラメータに0を指定(もしくは省略)すると
>終了時にエラーが出ます。
一応既知問題なのですが(#674参照)、原因不明のままほったらかしになっています(申し訳ございません)。


[844]es_screenと終了時エラー
K-s
2007/08/25 23:14:17

HSP本家の掲示板にもエントリされていたのですが(NO.10191)
HSP3.1環境下でes_screenの第6パラメータに0を指定(もしくは省略)すると
終了時にエラーが出ます。
プラグインのバグではと思い報告致しました。


[843]ありがとうございます
白米
2007/07/12 20:34:22

どうもありがとうございます!!!

ゲームずくりマジで楽しいです

ありがとうございます


[842]Re:無料ゲーム作り教えてください!!
Sinagawa
2007/07/09 23:52:37

とりあえずHSPをどうぞ。完全無料です。
http://hsp.tv/


[841]無料ゲーム作り教えてください!!
白米
2007/07/08 00:05:40

あの
無料でゲーム作る方法ってないですかwww?
一応真剣に考えてるのでお願いします


[840]Re:HSPDXFIXについていくつか質問があります
とどぼん
2007/06/20 19:35:49

Sinagawa様、お忙しい中サンプルまで作成していただいてありがとうございます。
さっそく実行してみましたところ、動作に問題はありませんでした。
そこでご返答やサンプルを参考にして、スプライトのフラグ値を参照してから当たり判定を行うように処理してみたところ、あるはずのない衝突現象はなくなりました。今まで、消去されたスプライトはすべてリセットされるものと勘違いして処理をしていたせいで起きていたようです。
またexnewに関しましても、正常動作するようになりました。
このたびは当方の不手際でご迷惑をおかけしまして申し訳ありませんでした。
どうもありがとうございました。


[839]Re:es_screen/es_window命令について
kt.
2007/06/20 01:22:00

ご対応ありがとうございますm(_ _)m
ちゃんと修正されているのを確認出来ました。
開発は大変だとは思いますが、これからも頑張って下さい。

ちなみにフラグ値を調べるスクリプトですが、当方では問題なく動作しているようです。
(画面にリンゴがある時は0300。消滅で0000。空いてる所からまた0300に変わります)
OS     Windows 2000 SP4 
CPU    Mobile Pentium4 1.70Ghz 
ビデオ  Mobility Radeon 16MB 
DirectX DirectX 9.0c 


[838]レス
Sinagawa
(http://www.hspdx.net/junk/flagdump.lzh) 2007/06/19 19:58:55

>とどぼんさん
すいません、レス遅れました。

>その上での質問なのですが、まずes_exnewですが、例えば「es_exnew 320,400,1」と書きます。
>この場合、本来ですとスプライトNo320から400まで順番に空きを検索して行くのだと思いますが、
>実際の動作を追ってみると間を大きく飛ばしてしまったり、空きがあるにもかかわらず
>「-1」を返したりすることがあります。

>また、ときおり画面外で存在していないはずスプライト同士の衝突が起きているような現象があります。

>そこでお伺いしたいのですが、es_killやes_clearでスプライトを削除した場合、内部パラメータは
>すべてリセットされるのでしょうか?
>それとも一部のパラメータは上書きされるまで残るものなのでしょうか?
>また、「es_area」の範囲外に出たスプライトは「es_kill」と同じ削除のされ方をするのですか?
通常、領域外にはみ出たりes_killで削除されたスプライトは、フラグ値を0にすることによって
生存していないと見なされます。
しかし、一部の環境でこの情報が壊れるのか表示に不具合が出るなどの症状が現れるとの報告を
何軒か頂いています。

そこで、スプライトのフラグ値を調べるスクリプトを作ってみましたので、実行してどうなるか教えてください。
スクリプトの説明をしますと、画面上部にスプライトNo.479〜511の32個のスプライトのフラグ値が
16進数4桁で表示されています。
スペースキーを押すとこの32個の中から空いているスプライトを探してリンゴを発射、
このときフラグ値が0300に変わります。
そして、敵に当たるなどして消滅するとフラグ値はまた0000に戻ります。
正常に動いていればこのようになるはずです。

>kt.さん
>es_windowの第3もしくは第4パラメータをes_screenで指定した解像度と同じに指定すると、
>本来はes_windowで指定した範囲外にはスプライトは表示されないはずなのですが、実際には表示されてしまいます。
es_windowで画面外を指定すると正常にクリッピングされないようです。
修正したものをアップしましたので、確認をお願いします。
ちなみに、画面外を指定すると有効範囲は通常より広くなるようになっています。


[837]es_screen/es_window命令について
kt.
(http://ktstg.blog.shinobi.jp/Entry/167/) 2007/06/19 02:01:47

こんにちは。es_screen/es_window命令についてなのですが、例えば
es_screen 640,480,16,0,0,1
es_window 150,0,490,480
と言うような感じでes_windowの第3もしくは第4パラメータをes_screenで指定した解像度と同じに指定すると、本来はes_windowで指定した範囲外にはスプライトは表示されないはずなのですが、実際には表示されてしまいます。

これを
es_screen 640,480,16,0,0,1
es_window 150,0,490,479
このような感じでes_windowの第3、第4パラメータのどちらか一方をes_screenで設定した解像度よりも小さくすると、ちゃんとes_windowで指定した範囲でスプライトは消えてくれます。
逆にes_windowの第3、第4パラメータのどちらかをes_screenで設定した解像度よりも同じか大きくすると、es_windowで指定した範囲を超えて表示されてしまうようです。

これがDLL側の不具合かどうか私にはわからなかったのですが念の為、ご報告させて頂きます。
当方のブログに詳しく書いていますので、よろしければ御検証頂ければ幸いです。
HSP3.0+HSPDXFIX Ver 0.19bを使用しています。


[836]HSPDXFIXについていくつか質問があります
とどぼん
2007/06/11 11:30:46

はじめまして、昨年ごろからHSP3を覚えまして、HSPDXFIXのおかげでゲーム作りがとても楽になって助かっております。
その上での質問なのですが、まずes_exnewですが、例えば「es_exnew 320,400,1」と書きます。
この場合、本来ですとスプライトNo320から400まで順番に空きを検索して行くのだと思いますが、実際の動作を追ってみると間を大きく飛ばしてしまったり、空きがあるにもかかわらず「-1」を返したりすることがあります。
上限を越えるころになると頻繁に「-1」が出るようになります。
実際に表示されているスプライトは30枚にも満たないのですが、これを回避する方法はありますか?

また、ときおり画面外で存在していないはずスプライト同士の衝突が起きているような現象があります。
具体的には、STGで自分の弾をただ空撃ち(敵は出現していない)しているだけなのに、当たり判定が発生してスコアが加算されてしまうといった現象です(type値やes_killもきちんと処理しているつもりです)。
そこでお伺いしたいのですが、es_killやes_clearでスプライトを削除した場合、内部パラメータはすべてリセットされるのでしょうか?
それとも一部のパラメータは上書きされるまで残るものなのでしょうか?
また、「es_area」の範囲外に出たスプライトは「es_kill」と同じ削除のされ方をするのですか?

以上についてご解答いただければ助かります。
お忙しいでしょうが、よろしくお願いいたします。

環境:
CPU:アセロン 3200
メモリ:1GB
ビデオ:GeForce6600 
HSP3.1β10 HSPDXFIX Ver 0.19b   


[835]Re:スプライトの優先順位について
エコQ
2007/06/10 19:40:03

お疲れ様です。HSPDXFIX Ver 0.19b での修正、確認しました。

HSP3.1β10は、タイミングが悪かったですね。
1時間に1本のバスに、数秒差で乗り損ねたような…(;^ω^)


[834]表示化け
Sinagawa
2007/06/08 22:17:48

>HSPDXFIXの、バッファ0が表示化けする件ですが、
>HSP側のバッファのほうでしたら、個人的には、許容範囲内です。
「HSPDXFIX側のバッファ0が、画像サイズに関わらず640*480で登録されてしまう」という
結構重傷なバグなのでさすがにこれを許容するわけにはいかないかと思います。


[833]Re:プラグインへの要望(XORSHIFT)
エコQ
2007/06/08 20:54:16

XORSHIFTの要望の件、お聞き届けいただき、ありがとうございます。
これまで、無理矢理な処理(前もって配列に乱数を用意しておいて、順番に引き出す等)を
していた部分の記述が、たいへん楽になりました。

HSPDXFIXの、バッファ0が表示化けする件ですが、
HSP側のバッファのほうでしたら、個人的には、許容範囲内です。


[832]Re:プラグインへの要望(XORSHIFT)
Sinagawa
2007/06/07 00:14:03

>─標準関数の rnd と、XORSHIFTプラグインの xs_rnd と mr_rnd とを合わせれば、
>再現性のある乱数列を、3つ並行して使えることになりますが、
>より多くの乱数列を、平行して使える機能があれば良いなと思いました。
ご要望ありがとうございます。今後のバージョンアップで検討させていただきます。
なお、リンクは修正しておきました。


[831]Re:CWSDRV.DLLが上手く導入出来ない
鳥人
2007/06/06 09:57:48

わかりました、やって見ます。
丁寧な回答どうもありがとうございました。


[830]プラグインへの要望(XORSHIFT)
エコQ
2007/06/06 01:00:53

こんばんは。乱数処理は、個人的に腐心していた部分なので、
乱数生成プラグインを、興味をもって拝見させていただきました。
(現在、XORSHIFTのファイルへのリンクが間違っているようです。)

少し試しているときに、浮かんだ要望がひとつありまして─

─標準関数の rnd と、XORSHIFTプラグインの xs_rnd と mr_rnd とを合わせれば、
再現性のある乱数列を、3つ並行して使えることになりますが、
より多くの乱数列を、平行して使える機能があれば良いなと思いました。

(説明がヘタで申し訳ありません)
xs_randomize2 乱数シード1 , 列番号2
xs_randomize2 乱数シード2 , 列番号2

という感じで初期化しておいて、
a = xs_rnd2(最大値 , 列番号1)
b = xs_rnd2(最大値 , 列番号2)

で、列番号別に、再現性のある乱数を発生させられれば─という事なのですが。

メインで使う乱数列とは別に、メインの乱数の発生に影響を与えないように
補助的な乱数を発生させたい、という場面があったので…

XORSHIFTプラグインを製作された勢いに残余がございましたら、お願いします。


[829]Re:CWSDRV.DLLが上手く導入出来ない
Sinagawa
2007/06/05 23:34:55

>サンプルプログラムも途中でPCがフリーズします。
>DSOUNDEXのサンプルも白いウィンドウが出ただけで音が鳴りませんでした。
>ハードウェアの相性と言う事になるみたいです。
>その場合はDirectSoundは諦めた方が良いのでしょうか?
コントロールパネルから[サウンドとオーディオデバイス]→[詳細設定]→[パフォーマンス]と
進んで、「ハードウェア アクセラレータ」のレベルを問題が発生しなくなるまで
下げてみてください。
これでだめなら別のバージョンのドライバを入れてみることで改善されるかもしれませんが、
これ以上打つ術はないと思ってください。


[828]Re:CWSDRV.DLLが上手く導入出来ない
鳥人
2007/06/05 17:21:33

サンプルプログラムも途中でPCがフリーズします。
DSOUNDEXのサンプルも白いウィンドウが出ただけで音が鳴りませんでした。
ハードウェアの相性と言う事になるみたいです。
その場合はDirectSoundは諦めた方が良いのでしょうか?


[827]Re:CWSDRV.DLLが上手く導入出来ない
Sinagawa
2007/06/04 23:53:05

>こう書いたのですが
>何度やっても"…サウンド設定"のこの部分で
>パソコンがフリーズしてしまいます。
以下の点に問題はないか確認してみてください。
・サンプルプログラムなど、CWSDRVだけを使うスクリプトはうまく動くか
・DSOUNDEXなど、ほかのDirectSoundを使うプラグインで問題は起きないか
どちらもうまく行かないのならハードウェアとの相性、どちらかがうまく行くのなら
同時に使っているプラグイン、もしくはCWSDRV自身の相性問題と言うことになるかと思います。


[826]CWSDRV.DLLが上手く導入出来ない
鳥人
2007/06/04 19:20:24

すいません、連投です。
画像反転は凄く上手く行ったのですが
CWSDRV.DLLを導入しようと思って
CWSDRV.DLL関連のファイルを全部所定の位置に置いて
スクリプトの一部を

*sound_set
TITLE GAMETITLE+"…サウンド設定"
drv_ini
if stat=DS_FAILURE:dialog stat:end
if stat=DS_OUT_OF_MEMORY:dialog stat:end
mus_ini CWS_ENABLE_WAVE

こう書いたのですが
何度やっても"…サウンド設定"のこの部分で
パソコンがフリーズしてしまいます。

やり方が悪いのかな、と思ったのですが
どこが悪いのかわかりません。
どうすれば導入出来るでしょうか。

環境:
OS Windows XP SP2
HSPversion3
DirectX 9.0c


[825]Re:画像反転が出来ない
鳥人
2007/06/03 00:43:22

わかりました。
左右反転した画像を用意してそれを呼び出す事にします。
回答どうもありがとうございました。


[824]Re:画像反転が出来ない
Sinagawa
2007/06/03 00:25:07

>左右を反転させるにはどうすれば良いでしょう。
es_zoom命令は反転コピーに対応していませんので、どうしてもという理由がないので
あればDirect3Dを使ってes_exzoomでコピーするか、あらかじめ反転した画像を用意して
対応してください。
なお、DirectDrawでの反転コピーのサポートは全てのハードウェアで対応されているとは
限らないので未定となっています。


[823]画像反転が出来ない
鳥人
2007/06/02 03:24:46

X64,Y64のサイズの画像を
左右反転させて表示したいのですが
es_zoom 1,0,0,64,64,-64,64
とやっても画像が表示されません。
es_zoom 1,0,0,64,64,64,64
だと画像は表示されます。
左右を反転させるにはどうすれば良いでしょう。


[822]Re:スプライトの優先順位について
エコQ
2007/05/31 22:14:40

了解です。
お手数おかけしますが、よろしくお願いします。


[821]Re:スプライトの優先順位について
Sinagawa
2007/05/29 00:29:09

>ヘルプの説明と逆の結果(優先順位の値が大きいものが手前)になるようなのですが、
>これは環境依存の現象でしょうか。(HSP3.1β9 + HSPDXFIX Ver 0.19aで実行しています。)
確認したところ、スプライトの描画順序が優先順位と逆になっていました。
修正したものを後日アップします。


[820]スプライトの優先順位について
エコQ
(http://www1.to/iyabomb) 2007/05/27 17:46:09

おひさしぶりです。エコQです。標題の件について、質問なのですが、
es_setのヘルプには、
「優先順位は値が小さいほど手前」、「同一値の場合はスプライトの小さい方が優先」
とありますが、
http://exxq.hp.infoseek.co.jp/lab/DXFIXtest_SPRpriority.hsp
のスクリプトで、スプライト優先度について確認してみると、
・[Space]で 優先順位を同じ(0)にすると、スプライト番号が大きいほうが手前になる。
・[Enter]で 優先順位=スプライト番号にすると、ソート機能On/Offで表示結果が 逆転する。
・[Tab] で 優先順位=(15-スプライト番号)にすると、ソート機能On/Offで表示結果が 逆転しない。
─ということで、
ヘルプの説明と逆の結果(優先順位の値が大きいものが手前)になるようなのですが、
これは環境依存の現象でしょうか。(HSP3.1β9 + HSPDXFIX Ver 0.19aで実行しています。)


[813]Re:当たり判定命令系について
Sinagawa
2007/04/06 00:01:52

>いまいち当たり判定系の命令が思うように動作しません。
>症状的には、敵にミサイルをぶつけようとすると素通りして
>当たらないという現象がおきています。
スプライトの移動速度に対して当たり判定が小さい場合、見た目に当たっていても
判定が重ならずに抜けてしまう事があります。
当たり判定を大きくするか、あるいは移動速度を遅くしてみてきちんと当たるか確かめてみてください。
また、スプライトのtype値が正しく設定されていないとes_checkで判定の対象になりませんので
その当たりも問題ないか確認してください。
それでも解決しない場合、ひょっとしたら内部パラメータが壊れている可能性があります(環境依存、原因不明)。


[812]当たり判定命令系について
ショーグン
2007/04/05 21:52:43

はじめまして。
このサイトにはいろいろとお世話になっております。
ショーグンと申します。hspdxfix0.19使わせていただいてますが、
いまいち当たり判定系の命令が思うように動作しません。
症状的には、敵にミサイルをぶつけようとすると素通りして
当たらないという現象がおきています。
本当は私が書いたソースをお見せできればよいのですが、
コメントが異常に少なく多分読み解いている暇もないと思いますので
何かサンプルを紹介していただけたらと思っています。
初心者の質問のようで申し訳ありません。
よろしくお願いします。


[811]Re:斜め移動の命令
ao
2007/04/04 14:43:20

お返事どうもありがとうございます。
やっぱりそうするしかありませんか…
まあ、特に不便ということもないので
そうさせていただきます。
どうもありがとうございます。


[810]Re:斜め移動の命令
Sinagawa
2007/04/04 00:04:17

>es_iniで指定した一周の角度に基づいて
>スプライトを移動させる命令はあるのですが、
>スプライトを介さずに座標のみを
>求めるような命令はないのでしょうか。
「現在の座標からn度の方向にmドット移動させた位置を求めたい」ということでしたら、
三角関数を使って自力で計算すればよいと思います。


[809]斜め移動の命令
ao
2007/04/02 11:56:54

どうも、はじめまして。
HSP3.0で使わせて頂いています。
es_iniで指定した一周の角度に基づいて
スプライトを移動させる命令はあるのですが、
スプライトを介さずに座標のみを
求めるような命令はないのでしょうか。
私はsin,cosから求めるようにしていますが…
よければダイレクトに算出できるような
命令をお願いします。


[808]ありがとうございました
初級者
2007/02/14 11:46:21

Sinagawaさんありがとうございました。
無事に動きました。


[807]Re:No DLL:cwsdrv.dllと出てしまう
Sinagawa
2007/02/08 00:06:41

>CWSDRV.DLLについているサンプルを実行すると
>
>No DLL:cwsdrv.dll
>
>と出てしまいます。
そのエラーはCWSDRV.DLLが見つからなかったときに出ます。
HSP本体と同じディレクトリにCWSDRV.DLLをコピーしてください。


[806]No DLL:cwsdrv.dllと出てしまう
初級者
2007/02/06 22:19:37

CWSDRV.DLLについているサンプルを実行すると

No DLL:cwsdrv.dll

と出てしまいます。
HSP本体があるcommonフォルダにはasファイルが入ってます。
どうすればサンプルが実行出来ますか?


[805]Re:HSP3.0との比較
チップ
2007/01/20 23:54:35

速度差、気にする必要がないのですね!
そして機能も全部使えるなら今までのように2.6でプログラムできます。
3.0で動かしてみようといろいろやってみましたが、やはり次から次へとエラーが出て修正不可でしたので、聞いてみて良かったです。

ありがとうございました。


[804]Re:HSP3.0との比較
Sinagawa
2007/01/18 01:06:40

>以前のプログラムを動かしたいので、HSP3.0での使用をあきらめようと
>思っているのですが、スピードは3.0で動かすのと、2.6で最新の
>hspdxfixを動かすのと差がでるでしょうか?
ベンチマークを取ったわけではないのではっきりとしたことは言えませんが、
速度差に関しては気にするほどの差はないはずです。

>また、機能的には3.0で動かすのも、2.6で動かすのも変わらないでしょうか?
どちらのバージョンで動かしてもHSPDXFIXの機能は全て使えますので、変わりはありません。


[803]HSP3.0との比較
チップ
2007/01/17 22:02:55

はじめまして。
HSP2.6でHSPDXFIXを使わせてもらっていたのですが、
このたびHSP3.0で使用してみようと思い、ダウンロードしました。

しかし、HSP2.6で動いていたプログラムが動かなくなってしまいました。

2.6に今のhspdxfix最新版に差し替えて動くか試した所、正常に動きました。

どうやら3.0だとダメみたいです。

ここから本題です。

以前のプログラムを動かしたいので、HSP3.0での使用をあきらめようと
思っているのですが、スピードは3.0で動かすのと、2.6で最新の
hspdxfixを動かすのと差がでるでしょうか?

あきらかに2倍は3.0の方が早く動作するとかだったら、また考え直さない
といけないですが、PCの性能の範囲程度でしたら、2.6で使用していこう
と考えています。


また、機能的には3.0で動かすのも、2.6で動かすのも変わらないでしょうか?

どうかよろしくお願いします。


[802]Re:Re:es_copyの不良点
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2007/01/12 21:45:18

了解しました。
それでは、es_excopyを使うこととします。


[801]Re:es_copyの不良点
Sinagawa
2007/01/10 00:52:39

すいません、レス遅れました。

>es_copy命令を使ってコピーをしようとしたのですが、何故かgmode 2としているのに、RGB色(0,0,0)のドットがそのままコピーされました。
以前報告をもらったときには調査していませんでしたが、おそらく環境依存の問題だと思います。


[800]es_copyの不良点
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2007/01/06 18:38:17

どうもこんばんは。たまに来るRDですf^^;

es_copy命令を使ってコピーをしようとしたのですが、何故かgmode 2としているのに、RGB色(0,0,0)のドットがそのままコピーされました。
こちらの過去ログを参照したところ、es_excopyを用いてRGB色(0,0,0)のドットを抜き出してコピーできたのですが、これは何故でしょう・・・?


[799]Re:HSP歴半年
Sinagawa
2006/12/24 00:27:28

>es_buffer命令を使うといっつもエラー1が出るんですけど
>何でですか?(聞く場所間違えたかな・・・)
これはどのスクリプトを実行しても起こりますでしょうか?
エラーが出る主な原因としては
・VRAMが足りない
・画像サイズがグラフィックボードのサポートしているサイズを超えている
・9/12以前のバージョンを使用していて、es_bufferを実行する前にほかの命令を実行している
のどれかで、特に2番目がよくあると思いますが、少なくとも同梱のサンプルスクリプトでは
大きな画像を扱っていないため問題なく動作するはずです。


[798]HSP歴半年
???
2006/12/20 17:59:56

こんな質問はだめなのかもしれないんですけど、
es_buffer命令を使うといっつもエラー1が出るんですけど
何でですか?(聞く場所間違えたかな・・・)
初心者なので、まだまだ分からないことばっかりです。
良ければ何かアドバイスをください。


[797]ありがとうございます
万年素人
2006/12/18 06:51:54

なるほど、バージョンによってプログラムの書き方が少し違うんですねー

>if((S&16)=16)&(T=0) : T=1:A=X:B=Y
たしかにこの方がみやすいですね^^;
if文を積み上げてしまうと見にくい気もしますし・・・
私の今後の課題は、いかに短く分かりやすくプログラムをくめるのかですね。


[796]Re:さっき始めた超初心者ですが・・・
Sinagawa
2006/12/14 00:26:27

>12行目 (stick s,31) とありますが、←・→・スペースの3つですと21になるような気がします・・・
あのスクリプトだと不要なキーの入力に関しては何も処理を行っていませんので特に害はありませんが、
確かに3つのキーだけを取得するのなら21でも良いです。

>18行目 (if(S&16=16)&(T=0) : T=1:A=X:B=Y)とありますが、このままだと←を押したときに一緒に弾が出てしまうので、色々検討して・・・
>if T=0 : if S&16 : T=1:A=X:B=Y
>となるような気がします・・・
HSP3.0だと(S&16=16)の部分を(S&(16=16))、つまり(S&1)と解釈してしまうようです。
HSP2.5だと((S&16)=16)として解釈されるのでこちらの想定通りの動作になります。
(当サイトの講座は基本的にver 2.4〜2.5をベースにした古いものです。さらに言えば、
コーディングスタイルまで古いです)
万年素人さんの記述でも問題ありませんし、条件式を一つにまとめるなら
if((S&16)=16)&(T=0) : T=1:A=X:B=Y
という書き方になります。


[795]さっき始めた超初心者ですが・・・
万年素人
2006/12/13 04:26:55

はじめまして!
さっき始めたばかりの超初心者なのですが、こちらのホームページを参考にさせていただいております。
ひとつ確認をさせていただきたいのですが、
HSPをやろうの弾を撃ちながら移動するの巻きに掲載されています2つめのプログラムにて・・・

12行目 (stick s,31) とありますが、←・→・スペースの3つですと21になるような気がします・・・

18行目 (if(S&16=16)&(T=0) : T=1:A=X:B=Y)とありますが、このままだと←を押したときに一緒に弾が出てしまうので、色々検討して・・・
if T=0 : if S&16 : T=1:A=X:B=Y
となるような気がします・・・初心者の解釈ですみません。


[794](無題)
ウィンド
2006/12/12 17:50:05

すみませんしばらくネットが使えなくなってから書き込んだことを失念してました。
今更ですがありがとうございました。

>正式版ですとVer 0.19はVC++6.0でコンパイルしたものなのでMSVCR71.DLLは必要ありませんが、


[793](無題)
FE
2006/12/07 13:06:56

お返事ありがとうございます!
前にも同じ質問があったんですね、すみません。
では#720を参考にさせていただこうと思います。


[792]Re:es_fmesで、改行が認識されない!
Sinagawa
2006/12/06 13:05:50

>さて今回es_fmesのメッセージ内で"\n"を入力してみたところ、
>なぜか改行されずに処理されてしまいました。
現在、HSPDXFIXの文字表示命令は改行コードを解釈しない仕様になっています。
以前にも同じ質問があった際に作成した、自前で改行を行うサンプルが#720にありますので
そのような方法で対処してください。


[791]es_fmesで、改行が認識されない!
FE
2006/12/05 09:56:36

はじめまして、いつもhspdxfixを使わせていただいています。

さて今回es_fmesのメッセージ内で"\n"を入力してみたところ、
なぜか改行されずに処理されてしまいました。

es_fmes "ああああ\nああああ"

と入力すると

"ああああああああ"

になってしまうのです。
何か解決法があればいいのですが。(;^^)
もし忙しくなければ、どうか返信をよろしくお願いします。


[790]Re:MSVCR71.DLL無し版
Sinagawa
2006/11/30 00:26:04

>現バージョンですとMSVCR71.DLLが必要とのことですが、
>配布のことを考えて必要の無いバージョンが欲しいのですが、
>そのなかで一番新しいバージョンは残っていますでしょうか。
正式版ですとVer 0.19はVC++6.0でコンパイルしたものなのでMSVCR71.DLLは必要ありませんが、
それより新しいものだと#697#700でアップしたものが最後になります。


[789]MSVCR71.DLL無し版
ウィンド
2006/11/29 00:39:36

以前お世話になりましたウィンドです
現バージョンですとMSVCR71.DLLが必要とのことですが、
配布のことを考えて必要の無いバージョンが欲しいのですが、
そのなかで一番新しいバージョンは残っていますでしょうか。


[786]ウィンドウモードの解像度について
2006/11/08 18:28:22

お返事ありがとうございます。
screen命令で変えることができました。
これで何とか完成させられそうですw


[785]Re:ウィンドウモードの解像度
Sinagawa
2006/11/07 23:57:19

>ウィンドウモードでのウィンドウサイズは
>640*480以上にならないのでしょうか?
本来p1,p2に任意の数値を入れればそのサイズにウィンドウが変更されるはずなのですが、
なぜか初期のウィンドウサイズより大きくはならないようです。
これについては後日調査しますが、es_screen実行後にscreen命令を使ってウィンドウサイズを
変更することで対処することができます。


[784]ウィンドウモードの解像度
2006/11/06 22:11:22

es_screenについて質問があります。

ウィンドウモードでのウィンドウサイズは
640*480以上にならないのでしょうか?


[782]解決しました@減算コピーについて
唯趣
2006/10/27 00:38:41

うまく動作しました。
こういった方法があるとは、目から鱗です。
すばやい回答ありがとうございました。



[781]Re:減算コピーについて
Sinagawa
2006/10/26 23:51:54

>そこで質問なのですが、es_excopy命令を使って減算合成をするにはどうすればいいのでしょうか。
Direct3Dには減算合成に相当するブレンドファクターが存在しませんが、
加算合成(ESB_ADD)と反転(ESB_NEGATIVE)を組み合わせることでそれを表現することができます。

やり方としては、
1.減算合成を行いたい部分を白の四角で反転合成する。
2.画像を加算合成する。このとき、暗くしたい部分ほど色が明るくなるようにする。
3.再度反転合成を行い、元に戻す。
このようになります。


[780]減算コピーについて
唯趣
2006/10/26 15:31:38

hspdxfixには大変お世話になっております。

そこで質問なのですが、es_excopy命令を使って減算合成をするにはどうすればいいのでしょうか。

回転・拡大縮小処理を施しているのでgmode 6->es_copyという方法がとれません。
また、ブレンディング係数を調べてみたのですが、こちら側の力量不足により、理解にいたっておりません。
es_xfar -> es_excopy といった方法も試したのですが、処理が重すぎて実用にはほど遠い状態です。

現在、背景画像をy軸について回転させて、奥行きを表現しています。
その際、背景画像が遠方(z方向)にいけば行くほど暗くなるエフェクトを想定して実装しようとしているのですが、同等の効果が得られるようであれば他の方法でもかまいません。

ご多忙と思いますが、返信をよろしくお願いします。



[779]Re:es_sin と es_cos の結果が逆
Sinagawa
2006/10/11 12:41:29

>es_sin と es_cos の動作が逆になっているようです。
調べてみました。完全に逆になっているので、各命令の呼び出しを書き換えることで
とりあえず修正できますのでそれで対応してください。
HSPDXFIX.ASの79行目
#func global es_sin        es_cos            $202
#func global es_cos        es_sin            $202

根本的に修正しようとするなら、HSPDXの角度の扱いが通常と違う事を直すべきだと思います。


[778]es_sin と es_cos の結果が逆
Rosh
(http://r-revery.hp.infoseek.co.jp/) 2006/10/10 22:53:49

es_sin と es_cos の動作が逆になっているようです。
ダウンロードできる幾つかを試してみた所、どれも同じ結果でした。
混乱するので直していただけるとありがたいです。


[777]自己解決してしまいました
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/10/07 09:39:27

失礼しました。
サイズは変わっていたのですね。
中途半端に自機の当たり判定を小さくしていたので気付いていませんでした。

大変失礼しました。


[776]es_effectの当たり判定
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/10/07 09:30:13

どうもお久しぶりです、RuthlessDragonです。

今回、es_effectについての質問なのですが、
es_effectのp2,p3に数値を入れてやってサイズを変更してやっても
そのスプライトの当たり判定は変わらないようなので質問させていただきます。
es_effectでサイズを変えたスプライトの当たり判定のサイズを変えることはできますか?


[775]Re:順番が変になる
–‚魔法合金
2006/10/03 19:45:12

試してみましたが、2箇所ともうまくいきませんでした…。
ちなみにes_xferを使ってからes_copyを使っている箇所のところもes_excopyなら通常
通り表示されました。
それから、es_xferを使う前にgmode 0を指定していたのをたまたま(?)みつけたのでそ
の後のes_copyの前でgmode 1を指定したらこれも通常の順序で表示されました。
なので今のところes_excopyを使うことで一応回避はできるのですが…


[774]Re:順番が変になる
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20061003.dll) 2006/10/03 00:17:05

>es_boxfを使ってからes_fmesを使うとなぜか文字より四角形の方が上にかぶさる形に
>なってしまいました。これはes_exboxfで同じ処理をしたらちゃんと文字の下に表示
>されました。
確証は持てませんが、DirectDrawがグラフィックボードにコマンドを送ってから実際に
実行されるまでにラグでもあるんだと思います。
うちでは症状を確認できませんでしたがそのあたりに手を加えたものを用意しましたので
これを使ってどうなるか試してみてください。


[773]順番が変になる
魔法合金
2006/10/01 19:48:18

こんにちは、hspdxfixを使っている者です。
で、さっそく質問なんですが、自分のパソコンではなぜか描画命令で順番の逆転現象
のようなものが起こって困っています…
es_boxfを使ってからes_fmesを使うとなぜか文字より四角形の方が上にかぶさる形に
なってしまいました。これはes_exboxfで同じ処理をしたらちゃんと文字の下に表示
されました。
es_xferを使ってからes_copyを使っている箇所も描画順序が逆になっていました。
自分の新しいパソコンの方で開発していた時はそんなことは起こらなかったのです
が、他のパソコンで試したら表示が変になっていました。

これは環境によって描画順序が逆になったりするってことなんでしょうか?


[772]Re:es_exboxf のバグ?解決 そして要望
Rosh
(http://r-revery.hp.infoseek.co.jp/) 2006/09/20 23:17:11

>調べてみたところどうやら実装できそうなので、時間ができたら試してみます。
「DirectXの制限で無理」とか言われそうでちょっと気が引けてたんですが
大丈夫そうで良かった…
厚かましい要望かも知れませんがよろしくお願いします。


[771]Re:es_exboxf のバグ?解決 そして要望
Sinagawa
2006/09/20 00:49:44

>話は変わってちょっとした(?)要望です。
>「es_excopy のコピー先指定版」というのは実現可能でしょうか?
調べてみたところどうやら実装できそうなので、時間ができたら試してみます。
これさえあればウィンドウモードでのボケなし拡大ができるようになるので、そこそこの
需要はあるのではと思います。


[770]es_exboxf のバグ?解決 そして要望
Rosh
(http://r-revery.hp.infoseek.co.jp/) 2006/09/19 21:18:14

すいません。
少し下の記事でリンクされてる修正版のDLLでは不具合は起きませんでした。
お騒がせして申し訳ありません。

話は変わってちょっとした(?)要望です。
「es_excopy のコピー先指定版」というのは実現可能でしょうか?

今現在 es_excopy で描画中の画面に回転コピーして
それを別のバッファに es_xfer でコピーして
今度はそれを加工して描画中画面に es_excopy でコピーという
荒業というか力技な処理をかましてる所があります。

指定バッファに直接 es_excopy が出来ると
es_xfer が省けてスマートになるし表現力も増すと思います。
(こんな使い方するのは少数かも知れませんが…)

一考して頂けたら、と思います。


[769]Re:es_exboxf のバグ?
Sinagawa
2006/09/19 00:28:29

>es_exboxf でブレンドファクターを指定すると描画されません。
>省略してるとアルファ値は無効になるようですが描画されます。
>ブレンドファクターの指定できる他の命令では同じ不具合が出ないので
>環境依存のバグでは無さそうです。
こちらでも確認してみましたがHSP2.61、3.0ともに正常に表示されました。
es_exboxfとes_excopyでは内部での描画方法が微妙に違うため、もしかしたらその部分で
なにやら問題が起きているのかもしれません。


[768]es_exboxf のバグ?
Rosh
(http://r-revery.hp.infoseek.co.jp/) 2006/09/18 23:14:01

どうも初めまして。
HSPDXFIX.DLLを使ってゲームを作っています。

es_exboxf でブレンドファクターを指定すると描画されません。
省略してるとアルファ値は無効になるようですが描画されます。
ブレンドファクターの指定できる他の命令では同じ不具合が出ないので
環境依存のバグでは無さそうです。

ちなみにHSPは2.61を使ってます。


[767](無題)
ƒ‹ルーイヨッシー
(http://luilab.b7m.net/) 2006/09/13 17:03:54

無事、動作を確認しました。
ありがとうございました。


[766]Re:差し替えについて
Sinagawa
2006/09/13 11:38:04

>差し替えって、普通にファイル名を「hspdxfix.dll」に
>変えて、エディタのあるディレクトリに置けばいいんですよね?
はい、そうです。
MSVCR71.DLLについては、コンパイラを変更した関係で必要になるランタイムです。
当サイトのダウンロードページに置いてありますので、ダウンロード後Windowsの
システムディレクトリにコピーしてください。


[765]差し替えについて
ルーイヨッシー
(http://luilab.b7m.net/) 2006/09/13 07:40:22

差し替えって、普通にファイル名を「hspdxfix.dll」に
変えて、エディタのあるディレクトリに置けばいいんですよね?

するとコンポーネントが見つかりません、というエラーが出るんですが・・・
MSVCR71.dllが見つからないって・・・
DLL内で呼び出していて、アドレスが違うとか?
その上無限ループでエラーが出ます。

DLLを旧バージョンのものに入れ替えるとエラーは出なくなりましたが・・・


[764]Re:hspdxfixの質問
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20060912.dll) 2006/09/12 02:44:20

ファイルをダウンロードして実行したところ、こちらでもエラーが発生したのを確認し、
さらに調査を進めていくうちに原因が判明しました。
どうやら2.61仕様のプラグインで、実行後内部でウェイトを取るようになっている命令を実行すると
直前の命令で返されたstatがクリアされないようです。
つまり、この場合ですとes_syncのstat値をチェックしてエラー扱いにしていた、ということです。
上記リンクにその問題を修正したものを置いておきますので差し替えてみてください。


[763]Re:hspdxfixの質問
ƒ‹ルーイヨッシー
(http://luilab.b7m.net/) 2006/09/11 18:29:28

分かりました。
自分のサーバーにアップロードしておきます。
なお、アクセス規制のため、コピーペーストして
アクセスしてください。

http://luilab.b7m.net/temp/kankyo_file.zip


[762]Re:hspdxfixの質問
Sinagawa
2006/09/11 01:36:02

>それで、たかだか288×288の画像を読み込むと、VRAMの
>容量が足らない、とエラーになりました。
その昔、環境によってこのような現象が起こったことがあった記憶があり、
結局のところ原因がわからないままになっていました。
調査のために、再現性のあるファイル一式とデバッグモードで実行した際に
生成されるログをお願いします。


[761]hspdxfixの質問
ルーイヨッシー
(http://luilab.b7m.net/) 2006/09/10 13:40:48

始めまして。HSPDXFIXを使ってプログラミングしています。
それで、たかだか288×288の画像を読み込むと、VRAMの
容量が足らない、とエラーになりました。

前まではこれで大丈夫だったので、VRAMの容量が足らないという事はありません。

環境は
HSP3.0α
WindowsXP HomeEdition
グラフィックボード オンボードなので詳細不明
DirectX 最新版

です。ちなみに、最大スプライト数などはちゃんと足りています。
statには230〜280、たまに800程度が返って来ています。
これはes_syncのベンチマークと思いますが・・・

必要ならばソースと画像をアップロードしますが・・・

何がいけないのでしょうか?


[760](無題)
Leo
2006/08/29 19:18:25

ありがとうございました
これからも応援するので頑張ってください


[759]Re:CWSDRV for HSP3.x
Sinagawa
2006/08/29 00:09:03

>CWSDRVを使わせてもらったのですが、mus_loaddrumでドラムの音色を決めるとき
>mus_loadtoneと同じようにプログラムNOを設定する事は可能でしょうか?
残念ながらCWSDRVはドラムセットを一つしか持っていませんので、曲ごとにドラムデータを
読み直すか、使わないノートに別キットの音を割り当てて対応してください。


[758]CWSDRV for HSP3.x
Leo
2006/08/28 18:16:03



はじめまして
CWSDRVを使わせてもらったのですが、mus_loaddrumでドラムの音色を決めるとき
mus_loadtoneと同じようにプログラムNOを設定する事は可能でしょうか?
ドラムキット毎に音色を変えたいのですが…


[757]レス
Sinagawa
2006/08/28 00:11:49

>途中変更不可能ですか。何か他の方法はないでしょうか?回避作というか・・・。
今更確認しますが「途中のウィンドウモードの変更」というのはフルスクリーン<->ウィンドウ
モードの切り替えや、フルスクリーン時の解像度の変更と言うことでいいですよね?
そうであれば、前のレスに書いたとおり一度es_byeを実行して再度初期化するしかありません。
ただ、その方法も現時点では何度も繰り返すとクラッシュするという報告があるのであまり
おすすめはできません。
ウィンドウモードで動作中に見た目のサイズだけ変えたいのであればscreen命令でウィンドウサイズを
いじるだけでよいのですが。


[756]ありがとうございます
JJ
2006/08/26 22:00:55

Sinagasaさんありがとうございました。
es_bufcheckの命令を見落としていました。すみません・・・。
メインループ内に入れて動作確認しました。
というか、ALT + F4って間違ってますね(^-^;)ALT + TABですね・・・。

途中変更不可能ですか。何か他の方法はないでしょうか?回避作というか・・・。


[755]Re:途中のウィンドウモード変更
Sinagawa
2006/08/25 23:54:33

>タイトルの通りなのですが、途中のウィンドウモードの変更は可能でしょうか?
現段階では一度HSPDXを終了させて、再度初期化しないと無理です。

>それと、フルスクリーン中に ALT + F4で他のタスクをアクティブにするとHSPの画面が真っ黒になって二度と画面が描画されません。
DirectXはフルスクリーンモード中にアクティブなウィンドウが変わるとVRAMがロストして
しまいますので、es_bufcheckを使って復元を行う必要があります。
一応使い方を書いておきますと、es_bufcheckモジュールをメインルーチンの最初に実行するだけです。
後はモジュール内部でフォーカスの監視とロストしたバッファの復元が行われます。
このとき、バッファに入っていた画像はたいてい消失していますので再度読み直してください。


[754]途中のウィンドウモード変更
JJ
2006/08/25 06:46:30

Sinagawaさん始めまして。

タイトルの通りなのですが、途中のウィンドウモードの変更は可能でしょうか?

それと、フルスクリーン中に ALT + F4で他のタスクをアクティブにするとHSPの画面が真っ黒になって二度と画面が描画されません。
repeat 〜 loopでまわしてるので、戻ってきた時も表示されてると思ったのですが・・・。

上記2点について、お忙しいと思いますがご教示下さい。
宜しくお願い致します。


[753]es_bufferについて
Funa
2006/08/23 17:07:46


確認せずに質問してしまいすいませんでした。
管理方法は別を考えてみます。


[752](無題)
utu
2006/08/23 00:44:50

オフスクリーンバッファIDは0〜127番まで、という事はマニュアルに書かれていますよ。


[751]Funa
es_bufferについて
2006/08/22 23:51:25


es_bufferで大きい数値のIDを作るとシステムエラー1が出ます。
管理しやすいように桁を上げてIDを作成してるのですが、何番まで作成可能なんでしょうか?


[750]ありがとうございます
Beth
2006/08/16 02:52:11

サンプルを参考にいろいろ試したところ半透明コピーできました!

原因は… テスト用に組んだスクリプトのes_screenで、
Direct3D使用フラグが0になっていたと言う単純ミスでした…

素早い回答ありがとうございました。


[749]Re:半透明コピーについて
Sinagawa
2006/08/16 00:17:01

>半透明コピーがしたくてes_excopyを使ってみたのですが、
>画面に変化が無く、使い方が分かりませんでした。
11番目のパラメータにブレンドファクター(合成する演算方法。単純な半透明ならESB_ALPHA)を、
12番目のパラメータにα値(合成する度合い。0に近くなるほど重ねる画像が薄くなる)を指定すれば
半透明になります。
ダウンロードしたファイルの中にあるSAMPLE.LZHに、半透明コピーを使ったサンプルがあるので
それを参考にいろいろいじってみてください。

ただ、環境によってはα値が反映されず、半透明処理が行われないと言う報告を過去にいただいており、
ダウンロードページから入手できるものはその問題を修正していませんので、その場合は
ここの過去ログにあるリンクからDLLを落として差し替えてみてください。
最新のものは#735にあります。


[748]半透明コピーについて
Beth
2006/08/15 19:01:13

また初歩的な質問です。

半透明コピーがしたくてes_excopyを使ってみたのですが、
画面に変化が無く、使い方が分かりませんでした。

お忙しいところ大変申し訳ないですが、
半透明コピーの簡単なサンプルがありましたら教えてください。


[747]ありがとうございました
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/08/14 21:06:17

変数と配列変数のミスでしたね。
教えてくださり、ありがとうございました。
そして、単純ミスで失礼しました。


[746](無題)
KIMU
2006/08/14 19:14:15

>もしかするとモジュール以外のものが関係しているのかもしれませんが、
最低限自分で出来る事をしてませんね。
主要部分だけ抜き出して検証すれば
モジュール化には、何も問題が無いのが分かるはず。

        ;//////
        if b_n(get@-651) ! 0 : b_t(get@-651) = b_i(get@-651) + time_n@

    }
    loop
    repeat 250    ;敵の銃弾発射

    es_exnew@ get@,651+cnt,651+cnt

    if (get@ = -1) & (b_t(cnt) <= time_n@) & (b_n(cnt) ! 0) {

    es_get@ b_ex,cnt+651,3
    es_get@ b_ey,cnt+651,5

>見ている限りでは他に間違った点は見当たらないのです。
4箇所間違いがありました。
どこが可笑しかったか見比べてください。


[745]モジュール内でのes_getでのX座標取得は不可能?
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/08/13 21:06:21

以前、hspdxfix_20060701.dllをいただいた者です。
あれからシューティングゲームの作成を暫く続けていたのですが、
敵銃弾を発射させる為にモジュール内でes_getを用いてX,Y座標を取得しようとしたら、
何故かX座標だけ取得できませんでした。
http://www.geocities.jp/kouten2_ruthlessdragon/tmp/disillusion.lzh
このアドレスにあるものです。
moduleフォルダ内のmodule_dn.hsp96行目のes_getです。
もしかするとモジュール以外のものが関係しているのかもしれませんが、
見ている限りでは他に間違った点は見当たらないのです。
解法を教えてくださるとありがたいです。


[744]ありがとうございます
Beth
2006/07/24 06:06:45

わかりやすい回答とサンプルありがとうございました!

また初歩的な事をお聞きするかもしれませんが、その時はよろしくお願いします。


[743]Re:es_palfadeについて
Sinagawa
2006/07/23 23:31:36

>32bitカラーでDirectXの画面のフェードアウトをやろうとして es_palfade を使ってみたのですが、
>画面に全く動きが無くて何が悪いのか分からない状態です。
ループ処理の中にes_syncが組み込まれていないせいで画面の更新が一度しか行われて
いないことが原因です。
HSPDXを使う場合は(というか、標準命令のみでも場合によってはそうですが)画面の更新を
自動的に行うようにはなっていませんので、描画を一通り行うごとにes_syncを実行してやる
必要があります。

es_palfade -256,1,$000000
repeat
    stick s
    if s : es_bye:end
    es_sync 16
    await 0
loop


[742]es_palfadeについて
Beth
2006/07/23 10:16:39

最近HSPを始めたばかりで初歩的な質問で申し訳ないのですが、
32bitカラーでDirectXの画面のフェードアウトをやろうとして es_palfade を使ってみたのですが、
画面に全く動きが無くて何が悪いのか分からない状態です。

#include "hspdxfix.as"

es_ini
es_screen 640,480,32,0,1,1

es_cls 255,0,0
es_sync

es_palfade -256,1,$000000
es_sync

簡単に書くとこんな使い方をしてるのですが、
使い方が全然違うのでしょうか?
32bitカラーでes_palfadeが動くサンプルがありましたら教えてください。


[741]見落としていましたf^^;
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/07/19 20:17:14

不透明にするにはα値を255にすればいいのですね。
テストの方は、一部微妙に色合いが違うようです・・・。
なので、こちらで問題の出ないhspdxfix_20060701.dllを使うこととします。
ありがとうございました。


[740]738のテストスクリプトを実行してみた
KIMU
2006/07/18 22:40:06

Windows XP sp1
DirectX 9.0c
RADEON 9800 PRO
hspdxfix_20060717.dll
hsp3.0a
の環境で、
>実行すると、こちらではこんな感じに表示されます↓
>http://www.hspdx.net/junk/test_20060718.lzh
と、同じような表示がされて、問題はありませんでした。(デスクトップを16ビット色でテスト)

>>739
>・・・そちらのアドレス、違いますよね?
アドレスの.lzhを.jpgに直してみてw

>#hspdxfix_20060701.dllでα値256ではes_exboxfが出てこないのですが、
691にその答えが・・・


[739]サンプルのキャプチャ
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/07/18 20:28:31

サンプルのキャプチャと、症状が出ている部分のキャプチャをひとまとめにして
出してみました。
hspdxfix_20060717.dllを用いているもので、その部分のスクリプトも載せておきました。
http://www.geocities.jp/kouten2_ruthlessdragon/tmp/re_sample.PNG
このように表示されます。同条件の32bitウィンドウモードです。
・・・そちらのアドレス、違いますよね?

#hspdxfix_20060701.dllでα値256ではes_exboxfが出てこないのですが、
これも環境依存でしょうか?


[738]Re:DLLを差し替えると
Sinagawa
(http://www.hspdx.net/junk/test_20060718.lzh) 2006/07/18 13:36:02

>hspdxfix_20060717.dllに差し替えると半透明ではありますが黒っぽくなってしまいました。
>hspdxfix_20060701.dllならば半透明の青色が出るのですが・・・。
一応こちらでは動作確認したので、環境依存のバグが出てしまったようです。
で、試しに上記リンクのようなテストスクリプトを作ってみました。
実行すると、こちらではこんな感じに表示されます↓
http://www.hspdx.net/junk/test_20060718.lzh
(32bitウィンドウモードでキャプチャ)


[737]DLLを差し替えると
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/07/17 18:45:48

color 255,0,0
es_exboxf 6,6,106-damage,26,,,,,ESB_ALPHA,128
と言う風に構文していたのですが、
hspdxfix_20060717.dllに差し替えると半透明ではありますが黒っぽくなってしまいました。
hspdxfix_20060701.dllならば半透明の青色が出るのですが・・・。

にゃーさん>
お役に立てて光栄です(^^)


[736](無題)
おばか改めにゃー
2006/07/17 14:44:37

RuthlessDragonさん>
教えてくれたありがとうございます
あと、HN変えておきましたw


[735]Re:半透明のコピーと矩形、そしてバグ?
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20060717.dll) 2006/07/17 12:12:12

colorで指定されているRGB色だと赤色になるはずですが、
>es_exboxfの後ろの方を削って
>    pos 0,0 : es_excopy 5,0,0,112,33,112,33,,,,ESB_ALPHA,100
>    color 255,0,0
>    es_exboxf 6,6,106-damage,26
>とすると、何故か青色になります。
>これはバグでしょうか?
BMSCRが渡すカラーデータがBGRの並びになっているのを直さずにそのまま使っているのが
原因でした。
上記リンクに修正したものがありますので差し替えてみてください。


[734]修正されたようです
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/07/17 06:28:06

KIMUさん>
ありがとうございます。
動作してくれました。
ですが、やはりcolor 0,0,255で赤色が表示されるのはそのままです。
もしかするとこれはHSPDXFIXの仕様なのでしょうか?

おばかさん>
HSP上で#include "hspdxfix.as"すればいいだけですので、
DirectX SDKを持ってこなくても大丈夫ですよ。
それにしても、HNにおばかさんは止めたほうが・・・f^^;


[733]DirectX
おばか
2006/07/17 01:32:00

DirectX SDKがなくてもHSPDXFIX for HSP2.6x&3.x
があればHSPでDirectXを使えますか?


[732][731]の名前
KIMU
2006/07/16 16:32:33

あら・・・
名前を書き間違えたw
KIKU>KIMU


[731]Re:半透明のコピーと矩形、そしてバグ?
KIKU
2006/07/16 13:48:39

>と、しているのですが、es_exboxfで描かれるはずの矩形が出てこないのです。
多分ここの[689]に貼られてるアドレスのをDLすれば問題は解決するかも
(728のがローカルバージョンの最新版って所かな?)


[730]半透明のコピーと矩形、そしてバグ?
RuthlessDragon
(http://www.geocities.jp/kouten2_ruthlessdragon/) 2006/07/16 12:41:12

始めまして、シューティングの為にHSPDXFIXを使わせて頂いている者です。
HSPDXFIX.txtを見てもよく分からなかった為、質問させていただきます。

es_excopyやes_exboxfを使って、自機がライフゲージと重なった場合に半透明にするようにしたいのですが、
半透明にする為にはどのようにプログラムすればよいのでしょうか?
現在は
    pos 0,0 : es_excopy 5,0,0,112,33,112,33,,,,ESB_ALPHA,100
    color 255,0,0
    es_exboxf 6,6,106-damage,26,,,,,ESB_ALPHA,100
と、しているのですが、es_exboxfで描かれるはずの矩形が出てこないのです。
es_excopyの方は、大丈夫なようなのですが・・・。

#試行錯誤しているときに見つけたのですが、
colorで指定されているRGB色だと赤色になるはずですが、
es_exboxfの後ろの方を削って
    pos 0,0 : es_excopy 5,0,0,112,33,112,33,,,,ESB_ALPHA,100
    color 255,0,0
    es_exboxf 6,6,106-damage,26
とすると、何故か青色になります。
これはバグでしょうか?


[729]Re:Re:es_clip+es_zoom
cat-syoya
2006/07/02 03:08:31

導入してみたところ
クリッピング後も問題なく拡縮表示されるようになりました。
すばやいご対応、ありがとうございました。


[728]Re:es_clip+es_zoom
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20060701.dll) 2006/07/01 10:26:09

というわけで、こちらが修正したDLLになります。
ダウンロード後リネームして差し替えてください。


[727]Re:es_clip+es_zoom
Sinagawa
2006/07/01 02:20:46

>質問なのですが、es_clipでクリッピングした後にes_zoomを使用すると
>拡大コピー元の範囲までes_clipで設定した値の影響を受けてしまうようなのですが
>これはバグなのでしょうか?
はい、確かにこれはバグですね。明日(日付が変わっているから今日か)にでも修正したものを
用意したいと思います。


[726]es_clip+es_zoom
cat-syoya
2006/06/29 23:40:28

はじめまして、いつもHSPDXFIXを使わせていただいています。
質問なのですが、es_clipでクリッピングした後にes_zoomを使用すると
拡大コピー元の範囲までes_clipで設定した値の影響を受けてしまうようなのですが
これはバグなのでしょうか?

環境
OS:WindowsXPSP2 DX:9.0c CPU:AthlonXP2500+ VGA:Radeon9800pro
HSP:2.6 DLLのバージョンは1.9、Direct3D使用はオフ


[725]Re:困ってます
Sinagawa
2006/05/28 01:22:24

HSPセンターのHSP教室[実践編]に、その当たりを網羅した講座があります。
http://hspcenter.com/


[724]困ってます
カズキ
2006/05/27 17:03:33

こんにちは〜、ゲームをつくりたいんですけど。
キャラクターのつくりかたとか、マップの作り方とかキャラクターをまっぷであるかしかたとかがよく分からないんですけど教えてくれませんか?


[723]自己レス
KIMU
2006/05/01 01:05:28

必要としてる人には、うまく行かなかったもよう(^^;

[722]8ビットフルスクリーンD3D未使用の終了時にエラー問題
KIMU
2006/04/30 21:22:36

こんばんは、過去レスになってしまいますが
自分の所ではD3Dを使用してるので、放置してたんですけど
他の所でも問題が出る人がいたので、解決策を考えてみました。

http://www.onionsoft.net/hsp/beta/betabbs.cgi?mode=allread&no=5269&page=#2
これで、一応エラーは出なくなりました。


[721]Re:Re:es_fmesで改行コード
Funarin
2006/04/23 12:07:05


レスありがとうございます。
例を出していただいてとても助かります。
手動で改行すると行幅をセットできるんですね。
とても参考になりました、ありがとうございます。


[720]Re:es_fmesで改行コード
Sinagawa
2006/04/23 10:37:13

>改行して表示させるにはどうすればいいのでしょうか?
HSPDXFIXの文字表示命令は制御コードを解釈しませんので、自力で改行するしか
方法はありません。

例:
sdim msg,128
sdim tmp,128
msg="改行テスト\n2行目\n3行目\n\n終わり"
offset=0
x=0
y=0
repeat
    getstr tmp,msg,offset,'\n'
    offset+=strsize+1
    pos x,y
    mes tmp
    y+=16
    if offset>=strlen(msg) : break
loop


[719]es_fmesで改行コード
Funarin
2006/04/23 05:56:35


es_fmesで\nが入った文章を出力すると、その部分が無視されて改行されずに表示されます。
es_mesでは\nが文字化けしてそのまま表示されてしまいます。
改行して表示させるにはどうすればいいのでしょうか?


[718]Re:スプライトの透過色当たり判定について
Sinagawa
2006/04/04 01:06:28

>oya_binさん
既出意見の繰り返しになりますが、HSPDXFIXではスプライトの伸縮回転が絡んでくるので
目的に対して膨大な量の計算が必要となり、効率が悪すぎるために実装は無理と言うことになります。
(単純転送されたスプライト同士でならマスクデータを用意してビット演算で・・・ってできるので
実用レベルでの実装は可能かもしれませんが)
現状の当たり判定の持たせ方ではいろいろと制約が出てしまうので、今後は仕様の見直しも
視野に入れていきたいと思います。


[717]re:スプライトの透過色当たり判定について
oya_bin
2006/04/03 21:39:25

>横レスですが…さん
レスありがとうございます。
私も無理だと思いつつ質問させていただいた次第です。^^;
そうですね、確かに全ピクセルに演算しなければならないですね。
無茶を言って申し訳ないです。

ただ、透過色が1色の場合単純な演算で済む
(あくまで当たるか当たらないかなのでRGB値を無視できる)
と思ったので、書いてみました。

横レスですが…さんの仰る通り代替方法でやってみたいと思います。
あくまで「希望」でしたので、Sinagawaさんに無理を言っては
いけないですね。

互いにプログラム頑張りましょう!
(未練はありますが、とりあえず)失礼致します。


[716]re:スプライトの透過色当たり判定について
横レスですが…
2006/04/03 15:09:44

横レスですが連続面のすべてをピクセル単位で判定する必要があるので、事実上不可能だと思いますよ。
2Dゲームの常識から考えると代替方法として述べられているやり方が普通だと思われます。


[715]スプライトの透過色当たり判定について
oya_bin
2006/03/31 22:19:56

初めまして。
Hspdxfixを利用してプログラムを組んでいます。
環境はI945Gマザー、オンボードグラフィックス、DirectX9.0c、
HSP3.1β1、画面モードはes_screen、扱う画像とも16bモードです。

私の勘違いなら申し訳ないですが、
透過色だけのスプライトでも、
当たり範囲が%の部分に有効になります。
透過できるのは便利なのですが、
透過した部分を当たり判定から除外できないでしょうか?
つまり、透過色をes_checkで除外するモードがほしいのです。

例えば、大きな円のスプライトを作り、中心を透過します。
その中に小さなスプライトを表示して、
その透過されていない部分だけが当たる(透過されたところは当たらない)
のような使い方を出来たら便利なのですが……

Hspdxfix側で無理なら代替方法は考えてあります。
スプライトを小分けに定義し、
中心を空白にする方法です。
ただ手間のかかり具合が違うので、
それをしたくないのです。(一枚絵でパターンを作りたいのです。)

もしマニュアルなどの読み飛ばし、
過去ログに回避方法などがありましたら、申し訳ありません。
実装されていないのなら、是非実装してほしいです。
ご回答を期待しています。


[714]re:強制シングルプロセッサ
ウインド
2006/03/22 11:27:36

ありがとうございます、上手くいきました。
これで問題なくFPSも安定したようです。
いろいろと本当にお世話様でした。


[713]強制シングルプロセッサ
Sinagawa
2006/03/21 20:23:59

>ウィンドさん

以下のスクリプトを使えばシングルCPUに強制変更できますのでお試しください。

#include"kernel32.as"

;立っているビットが使用されるCPU
usecpu=%00000001
; statはたいてい-1になるので決め打ちすればGetCurrentProcessはいらないが
; 念のために実行しておく。
GetCurrentProcess
SetProcessAffinityMask stat,usecpu

stop


[712](無題)
ウインド
2006/03/20 11:17:24

検証ありがとうございます。
私のほうでもシングルタスクで動作させて安定するのを確認しました。

できればスクリプトレベルで強制的にシングルタスクで動作させるよう
切り替えたいのですが、それは可能なのでしょうか?


[711]レス
KIMU
2006/03/20 02:12:05

>周りの色の影響を受けてしまうのはDirect3Dの仕様なので挙動としては問題ないと思われます。

なるほど、分かりました。お手数かけました。

まとめると
・補間時には範囲外の影響を受ける>D3Dの仕様(設定によって影響の度合いが違う)
・透明色と補間されるとドットは透明になる>D3Dの仕様?
・回転無しの時に補間有りの影響を受けない>環境依存

こんな感じかな?
とりあえず、これを踏まえて制作していきたいと思います。
では、ありがとうございました。


[710]レス
Sinagawa
(http://www.hspdx.net/image/20060318.png) 2006/03/18 12:49:21

>ウインドさん
ちょうど自分もAthlon64 X2ユーザーだったので調べてみました。
1.適当なスクリプトを実行
 → FPSは62〜64(まれに65も)でバラつく。
2.そのままタスクマネージャを呼び出し、シングルコアで動作するように設定する
 (プロセスタブでhsp3.exeを右クリック→関係の設定でCPU1のチェックを外す)
 → FPSは61でほぼ安定する
3.再度デュアルコアで動作させる
 → 1.と同様FPSはバラつく
何度か試してみて毎回このようになるわけではありませんでしたが、デュアルコアCPUを使う場合は
シングルコアで動作した方がウェイトが安定しているような印象を受けました。
(ちなみに、es_syncのウェイトを0にしてawait 16でウェイトをとるようにすると
コアの設定にかかわらず40FPSという問題外の数値がでました)

>KIMUさん
こちらで実行してみた結果を上記リンクに置いておきます。
比較してみると元絵96の画像を補間ありにしたときに緑の枠が出ていない以外はおおむね
同じ挙動をしているようです。
というか、自分が前にレスしたときに微妙に読み違えていたような気がするのですが補間ありにしたときに
周りの色の影響を受けてしまうのはDirect3Dの仕様なので挙動としては問題ないと思われます。


[709]透明色との補間が問題か、-1ドットとの補間が問題か・・・
KIMU
2006/03/17 23:55:59

検証&レスありがとうございます。
>描画されているのが確認できます。

こちらでも正常に表示されてしまいました(^^;。

あれ?と、思って色々検証してみました。

使ったスクリプト
http://gamdev.org/up/img/5046.zip

3つ重なった画像は 補間無回転無:補間有回転無:補間有X軸180度回転 
縦に 上:元画像 中:不透明表示 下:透明表示
マウスカーソル位置を拡大して表示

実行画面
http://gamdev.org/up/img/5047.jpg

とりあえず、分かった事を・・・

es_excopyやスプライトは、不透明設定の場合は、補間時回転しても正常に近く表示

透明色設定しても
コピーやes_sizeのサイズ外に、透明色以外又は、バッファ外の場合
補間時回転しても正常に近く表示(絵に透明色が使われていると・・・)

挙げてもらったスクリプトは、この両方に合致してますね(^^;

正常に近く表示って言うのは、反転した時に-1ドットの位置にある色と
補間してる感じに見える事です。

-1の座標がバッファ外の場合は白と補間
-1の座標が使用サイズ外ならその位置にある色と補間
-1の座標が透明色だと補間後透明に(1ドットのラインの場合消える・・・)

以上報告でした。

>なので、環境依存の問題だと思われます。
環境依存でしたら申し訳ありません。


[708](無題)
ウインド
2006/03/17 10:07:43

>Sinagawaさま
レスありがとうございます。
あの後いろいろな環境で試してみたのですが、
P4のHTやAthlon64x2等の、OSが複数CPUを認識する環境で不安定に
なることが分かりました。後者は1回起動ごとに特定の数値が出るわけでは
なかったですが。

手動でいじって安定させられるように実験してみます。


[707]レス
Sinagawa
(http://www.hspdx.net/junk/20060316.lzh) 2006/03/17 00:02:05

レス遅くなりました。申し訳ございません。

>KIMUさん
上記リンクのようなテストスクリプトで検証してみました。
実行するとX軸を180度回転した65*65の画像の上に64*64の画像が表示されます。
左が補間なし、右が補間ありでスペースキーを押すと上の画像の表示を切り替えるようになっています。
これを自分の環境で実行すると下の画像が縦横1ドットずつはみ出し、かつ65*65で
描画されているのが確認できます。
なので、環境依存の問題だと思われます。

>ウインドさん
こちらで何度か検証してみましたが、16を指定するとたまに62になるものの基本的に61で落ち着き、
-16を指定すると同様にたまに64になるものの基本的に63で落ち着く、といった結果になりました。
原因はわかりませんでしたが、何にせよWindowsのタイマーの信頼性が怪しいのは周知の事実ですので
FPSの安定する方法を模索しなければならないことだけは確かでしょう。


[706]hspdxfixで
ウインド
2006/03/09 11:24:26

ウインドと申します。
プラグイン使わせていただいております。

hspdxfixについてですが、描画ウェイトをたとえば
es_sync 16,1
としたとき、私のPCで実行するとFPSが61前後の時と64前後の時があります。
続けて実行すると、61→64→61→と交互に結果が変わるようです。

なにかお心当たりがあれば検証していただきたいのですが…。
直前にテストしたPCのスペックを載せておきます。

CPU:Pentium4(3.0GHz)
VGA:GeForce6600GT
OS:WindowsXP Home/DirectX9.0c

p.s.
過去ログを参照しまして、マイナスの値を入れたところ、
es_sync -16,1
としたら今度は
63→65→63→…
となりました。


[705]704を修正
KIMU
2006/03/05 18:39:45

>es_patに32*32で登録した物を回転あり32*32で表示した物と
回転は180度で完全に反転した状態です。

これが、補間時の仕様でしたらpat登録時に反転したり
常にx軸を、180度回転させたのを、使用したいと思います。

>あと、家の環境だと線形補間なしの時に範囲外の画像が周りに表示されます。
これは違いました。
線形補間有効時にはpat登録範囲いっぱいに、絵があると回転時に隣接してる
画像との補間を、してる感じでした。
xを180度回転させると左と上だけ範囲外と補間されて、範囲外に絵がないとその
部分の表示がなくなる感じ(これが回転させると絵が小さくなる原因かな・・・)

線形補間なしだと、ちらちら数ドット出る感じでした。


[704]回転表示されている物としてない物の違い(線形補間有効時)
KIMU
2006/03/03 04:08:52

こんにちは、さっそくですが、仕様か既知の不具合なのか
判断がつかない現象があるので、報告します。

es_effect等で回転させた時の表示が少し小さくなるようです。
es_patに32*32で登録した物を回転あり32*32で表示した物と
es_patに33*33で登録した物を回転なし32*32で表示した物と同等でした。

そして、33*33で登録して回転あり33*33で表示が、32*32登録回転なし32*32表示
と、同等でした。線形補間なしの場合は表示サイズに違いは見られません。
(今は最初からxを180度回転させて回転時に表示サイズが変わらないようにしてる)

>・線形補間を有効にするとテクスチャ範囲外の画像が周りに表示される。
この問題と関係ありそうなので、既知の問題かな・・
あと、家の環境だと線形補間なしの時に範囲外の画像が周りに表示されます。

以上報告でした。


[703]Re:DIPSW 1.00について
Sinagawa
2006/02/15 00:13:50

>さっそくHSP3.0aに導入して、同梱のSAMPLE1と2を実行してみたのですが
>両者ともに、閉じるボタンクリックなどで終了した際、エラーが発生しました。
こちらでは問題なく終了できたので、環境依存の問題だと思います。
end命令を実行するようにしたら直るというのも妙と言えば妙ですけど。


[702]DIPSW 1.00について
エコQ
2006/02/14 08:38:02

プラグインDIPSW.DLL Ver 1.00リリースおめでとうございます。
便利な機能が実装されてて、また重宝できそうです。ありがとうございます。
さっそくHSP3.0aに導入して、同梱のSAMPLE1と2を実行してみたのですが
両者ともに、閉じるボタンクリックなどで終了した際、エラーが発生しました。

(エラー報告に記述されていたメッセージ)----------------------------------
AppName: hsp3.exe     AppVer: 0.0.0.0     ModName: dinput.dll
ModVer: 5.1.2600.1106     Offset: 00014bd2
--------------------------------------------------------------------------

onexit goto〜 を使って、終了前に end 命令を実行するように書き換えたら、
エラーは起こらなくなりました。
環境の差異によるものかもしれませんが、報告させていただきます。 以上です。


[701](無題)
2006/02/12 10:27:23

完璧でした!ありがとうございます。

[700]レス
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20060208.dll) 2006/02/08 23:12:55

>負荷がかなりかかっているのと、スプライト周辺に赤や青の四角が表示されます。
すいません、デバッグ用のコードを潰すの忘れてました。
URL同じですが差し替えてありますのでダウンロードし直してください。


[699]ごめんなさい
(http://upld3.x0.com/upload.cgi?mode=dl&file=343) 2006/02/08 20:59:27

画像のURL入力ミスしました。Dlkeyはdxfixです。

[698]es_effectについて2
2006/02/08 20:56:52

迅速な回答に感謝いたします。es_effectのxy軸回転の方法で一応解決はしました。
修正版をあげていただいたので、早速試してみました。
当たり判定については、きちんと直っているようです。
ただし、画像を(Dlkey:dxfix)見ていただくとおわかりになるかと思いますが
左が以前のバージョン、右が修正版使用時のものです。
負荷がかなりかかっているのと、スプライト周辺に赤や青の四角が表示されます。
いろいろ試してみたところ、es_checkで”回転を考慮して判定”した場合に
この現象が起きているようでした。


[697]Re:es_effectについて
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20060208.dll) 2006/02/08 02:31:22

>自分はes_effectの表示サイズに負の値を入力する事で左右反転をさせました。
>表示自体は登録してあるキャラパターンのドットが1ドットずれる以外
>問題無かったものの、当たり判定が
>表示されるキャラクターとは全く別の場所に出てしまいます(一応人型の判定は持っているようです)
内部処理の計算式に問題があるのが原因です。修正したものを上記URLに置いておきます
のでこれと差し替えてみてください。


[696]es_effectについて
2006/02/08 00:03:42

はじめまして。HSPDXFIXを使って楽しくプログラミングしております。
スプライトを組み合わせて多関節キャラの左右反転を作っていました。
(es_effectのxy軸回転を利用すれば良いと過去ログにありましたが)
自分はes_effectの表示サイズに負の値を入力する事で左右反転をさせました。
表示自体は登録してあるキャラパターンのドットが1ドットずれる以外
問題無かったものの、当たり判定が
表示されるキャラクターとは全く別の場所に出てしまいます(一応人型の判定は持っているようです)

この方法もできれば使いたいので原因などについて何かお分かりになる事があれば
お教え頂きたいのですが。


[695]693&694は、やっぱりこっちの環境のせいだったみたいです・・・
KIMU
2006/01/29 17:48:13

DXの設定変えたからか現象は起きなくなりました。
どうも、すみませんでした。m(__)m


[694]693は、こちらの環境が悪いだけかも・・・
KIMU
2006/01/29 01:45:24

es_timer timb
es_mes ""
es_timer tima
tim=tima-timb
es_sync

es_sync 0〜15,0 だとtimは16前後
es_sync 16〜,0 だとtimは0〜1
es_sync 0〜,1 だとtimは0 

後es_drawの場所や描画された個数でtimは変わります。
環境依存だったら気にしないでください(^^;


[693]es_fmesとes_mes
KIMU
2006/01/28 18:37:57

こんにちは、また気になる事が出て来たの報告です。

;B----------------------
*main
 ・
 ・
 ・
es_timer timb
tim=timb-tima
es_mes ""+tim
es_sync 0,0
await 0
es_timer tima

goto *main

;B----------------------
*main
 ・
 ・
 ・
es_mes ""
es_timer timb
tim=timb-tima
es_mes ""+tim
es_sync 0,0
await 0
es_timer tima

goto *main

この二つでtimの値はes_mes ""の命令一個分しか変化がないはずですが
実際には1フレーム分(次のVSync迄)ぐらい差が出ます。
es_mes は実際の描画を待つような仕様ですか?
ウィンドウモードの場合AとBでの値に違いは有りませんでした。

以上です。


[692]es_exboxfとes_boxfの違い
KIMU
2006/01/24 04:30:56

>動作が微妙に変わることになって気持ち悪いので今後両命令とも0〜255で統一することにします。

了解です。

で、もう少し他と動作が違う所がありましたので報告を・・・
es_boxf 100,0,100,100 1ドットのライン
es_boxf 100,0,99,100 2ドットのライン

es_exboxf 100,0,100,100 1ドットのライン
es_exboxf 100,0,99,100 表示なし(z軸を回転させると点線状態で表示)
es_exboxf 100,0,98,100 1ドットのライン

後、es_excopyの回転とes_exboxfの回転は少し違う感じです。

http://49uper.com:8080/html/img-s/107314.bmp
SSです。左がes_exboxf右がes_excopyのラインです。

以上報告でした。
(es_exboxfの仕様って感じもしたけど一応^^;)


[691]レス
Sinagawa
2006/01/23 00:15:20

>KIMUさん
検証ありがとうございます。うまく動いているようでよかったです。

>でも、ちょっと気になる事が出てきました。
>命令によってα値の範囲、動作が違うみたいです。
es_excopyがα値を256で割ったものをDirect3Dに渡しているのに対して
es_exboxfはパラメータを8bitで切り捨てたものを色情報と一緒に渡しているのが原因です。
ただし、今まで問題が起きなかった環境ではes_exboxfもes_excopyと同じく0〜256での指定に
なりますので、そうなると従来のes_exboxfが問題なく動いていた環境とそうでない環境で
動作が微妙に変わることになって気持ち悪いので今後両命令とも0〜255で統一することにします。


[690]hspdxfix_20060121.dll
KIMU
2006/01/22 23:13:10

お疲れ様です。検証してみました。

正常に表示されているようです。ありがとうございました。

でも、ちょっと気になる事が出てきました。
命令によってα値の範囲、動作が違うみたいです。

es_excopy(説明ではα値0〜256)
0,1,2・・・,255,256,257,258 α値
0,1,2・・・,255,255,255,0 見た目(実際にα0かは不明)
0,1,2・・・,255,256,  0,1  実際には257の倍数でループしてるみたい
α0〜256の257種類でα257で一周してるけど見た目はα255と同じ
(他のα0〜256とされてる命令は全部かも)

es_exboxf(説明ではα値の範囲は書いてない)
α0〜255の範囲で256種類
α256で一周してα0と同じに見える

以上です。
まぁ、es_excopyとかもα0〜255として扱えば問題無いと思いますが一応・・・


[689]レス
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20060121.dll) 2006/01/22 00:09:08

>KIMUさん
検証ありがとうございます。
やはり頂点カラーの方のα値だけが反映されていたようです。
一昨日アップしたものは意図的にαを256で固定していたので、今度はパラメータが
反映されるように変更したものを用意しました。
もし、今まで問題なく動作していたけどこのバージョンを使用して逆におかしくなった
という人がいましたら教えてください。


[688]Re:es_exboxf
KIMU
2006/01/20 06:06:26

ども、開発お疲れ様です。
早速試してみました
ESB_MULTIPLE
ESB_NEGATIVE
この二つは変わらずOKみたいです(正常に表示されてるかは不明(^^;)

ESB_SHADOWは0.19で表示無し
今回のではα値に関係無く黒でした。

ESB_ALPHA    
ESB_ADD    
この二つには変化がありました。
でも、正常では無いみたいです。
α値に関係無く
ESB_ALPHA>α値256
ESB_ADD>α値128
の状態で表示されてるように見えます。(0にしても)
α値128&256で0.19と119のSSを下のアドレスにUPしてみました。

http://49uper.com:8080/html/img-s/106538.jpg


[687]es_exboxf
Sinagawa
(http://www.hspdx.net/junk/hspdxfix_20060119.dll) 2006/01/20 00:00:07

前から気になっててそのままになっていた部分をいじったものを上記リンクに置いておきます。
(右クリックで保存したあとリネームして普段使っているHSPDXFIXと置き換えてください)
es_exboxfがうまく表示されないと言う人はこれを使ってみてどうなるか教えてください。


[686]re:[631]es_exboxfでのα合成表示について
KIMU
2006/01/19 04:21:14

こんにちは、かなり過去レスになって、
申し訳ないのですが、自分も同じ結果でした。
ESB_MULTIPLE
ESB_NEGATIVE
表示されたのは上の二つなのですが、共通点としては
α値の影響を受けないって事ぐらいですかね?

α値が0で実行されてるとか0に見えるから実行しないとか
それなら環境によって違いが出るようにはならないか・・・
とりあえず報告でした。


[685]Re:マップの表示
Sinagawa
2006/01/10 00:44:03

>HSPDXFIXで画像を読み込むとき、256色以下じゃないといけないから、16色で
>画像を作成して読み込むと、白黒になります。
おそらく256色モードで使用しているものと思いますが、HSP3では画像をHSPのバッファに
読み込んだ際にパレットが反映されないようになっていますので、
hsp3util.as(HSP本体に同梱)のbmppalette命令を使ってパレットを読み出す必要があります。
フルカラーモードで使用している場合はHSPのバッファもフルカラーにしてやれば色数に関係なく
色化けが起こることはなくなります。


[684]Re:マップの表示
Funarin
2006/01/08 01:37:06


>dddさん
>HSPDXFIXで画像を読み込むとき、256色以下じゃないといけないから

そもそも256色以下なら256色でも大丈夫だと思いますが…。
ちなみに私もアクション作ってますがフルカラーの背景は普通に読み込めます。


[683]マップの表示
ddd
2006/01/07 19:52:54

Sinagawaさん、返信してくれてありがとうございます。
この方法でやってみます。
あと、この質問にも答えてくれますか?
-----------------------------------------------------------------
HSPDXFIXで画像を読み込むとき、256色以下じゃないといけないから、16色で
画像を作成して読み込むと、白黒になります。
-----------------------------------------------------------------
以上です。


[682]レス
Sinagawa
2006/01/05 12:25:41

さて、2006年も残すところあと72/73となりましたが今年もよろしくお願いします。

>エコQさん
スクリプト実行してみました。
>HSP3.0aでは、es_screenのサイズ指定を無視した(?)
>内部800×600で、見た目のサイズは640×480なウィンドウになります。
これは元々ウィンドウのサイズに合わせて拡大縮小する仕様になっているので表示は正確ですが、
本来変更されなくてはならないウィンドウサイズがそのままになっているのは紛れもないバグです。
あと、フルスクリーンだとes_dialogの挙動がおかしいことに気づきました。
(画面が消えてスクリプトエディタのメニューバーなどが見える)
これらから、BMSCRの情報が正しく受け取れていないまま処理を行っているせいで不具合が
発生しているのではないかと仮定しました。

>dddさん
>マップの表示の仕方を教えてください。 
まず配列変数にマップパーツの番号を記録したものをマップデータとして持たせます。
次に、バッファにマップパーツの画像を読み込んでおきます。
これで準備ができましたので、あとは自キャラの座標からパーツのサイズを割ってマップの位置を割り出し、
先述の配列変数を読み出して画面左上から順番にパーツを表示していけば完成となります。
と、おおざっぱに説明してみましたが時間と要望があれば簡単なサンプルを作成しますので
遠慮なく申し出てください。
また、若干やり方が異なりますがHSPセンター(http://hspcenter.com/)にも解説がありますので
そちらも参考にしてみてください。


[681]DDフルスクリーン時のエラーの件(訂正)
エコQ
2006/01/03 03:11:26

すみません、またやってしまいました…。
投稿したスクリプトに、自分なりにみつけたエラー対策(のつもり)の部分がまじってしまいました。

[678]のスクリプトだと
「HSP3.0a、D3D使用フラグ=0、フルスクリーン」の場合でも終了時のエラーは発生しないのですが、
endの前の es_dialog 〜 をなくすと、前述(↑)の条件でのみ、エラーが発生するのです。


[680]マップの表示
ddd
2006/01/02 19:41:59

はじめまして&あけましておめでとうございます。
HSPDXFIXを使ってマップ型アクションを作っています。
でも、マップの表示できません。
マップの表示の仕方を教えてください。


[679](無題)
Ricky
2006/01/02 07:54:28

>HSPDXFIXで、D3D使わない人は、いない気がするので

そ、そんなことはないぞ、俺作ってるの2DシューティングでD3D無しだぞ。
そもそもHSPDXFIXの0.14でずっと作ってたからD3Dなんて無かったんだ、有っても使わないけど。
(色々あって1年くらいほったらかしなんで作ってるとか言えたものじゃないけど)
メガドラやX68kあたりの性能を再現する内容だとそんくらいで十分なんだ。
むだに3D搭載して高スペック要求するのもよくないと思うんだ。
こういう作り方してる人の事もたまには思い出してあげてください。


[678]DDフルスクリーン時のエラーの件
エコQ
2006/01/02 02:40:40

あけましておめでとうございます。CWSDRVの完成、楽しみに待っております。
KIMUさんが報告されたD3D未使用&フルスクリーン時のエラーの件、
自分も気づいていながら、また勘違いかもと思って報告を保留していたのですが、
他にも合わせて気づいた点があったので報告させていただきます。

--------------------------------------------------------------------------
#include "HSPDXFIX.AS"
D3D使用フラグ=0
stick ky,64:if (ky&64):f=1:else:f=0    ;Ctrlキーが押されていればフルスクリーンに。
es_ini 512,1024,64
es_screen 800,600,32,0 ,1-f ,D3D使用フラグ
if stat : dialog"DirectXの初期化に失敗"
es_cls:color 200,255,255:es_boxf 0,0,640,480:es_sync
es_dialog "ok",0,"ok":end
--------------------------------------------------------------------------

HSP2.61では、上記のスクリプトは問題なく実行されるのですが
HSP3.0aでは、es_screenのサイズ指定を無視した(?)
内部800×600で、見た目のサイズは640×480なウィンドウになります。
(これはちょっと面白いので、残す or 正式仕様にしてほしい不具合ですが。)
また、
HSP3.0aでCtrl押しながら実行してフルスクリーンにした時、終了時エラーが発生します。
2行目を 「D3D使用フラグ=1」に書き換えた場合、終了時のエラーは起こりません。
以上です。


[677]Sinagawaさんへ
KIMU
2006/01/02 01:25:47

あけまして、おめでとう
レスありがとう御座います。

>遅くなることがあったので、相性問題なのかもしれません。
そうですかぁ、検証どうもでした。
HSPDXか、特定の命令で、相性問題があるのか、確かめる方法ないかな・・・
因みにhgimg3使用のサンプルでは、5時間ぐらい放置しても
時計の遅れは出ませんでした。

>このような不具合があるのではまずいのでできるだけ早く開始するようにします。
ありがとう御座います。

>>es_bye後のendでエラーが出るみたいです。
>これについては後日確認します。
HSPDXFIXで、D3D使わない人は、いない気がするので
あまり重要じゃ無い気もしますが、他のバグに繋がってる
可能性もあるので、よろしくお願いします。
(他に同じ報告が無いから環境依存な気もしますが(^^;)


[676]レス
Sinagawa
2005/12/30 00:29:29

>それで、HSPDXFIXのサンプルを動かしてみたのですが、たまに
>ガクッと止まるのにFPSは通常と変わらないと言う現象が起きました。
こちらではそのような現象は発生していません。
関係ないかもしれませんが、昔HSPDXを使っていたときに処理速度がカクッカクッと周期的に
遅くなることがあったので、相性問題なのかもしれません。

>es_bufferで、転送が成功した場合 statは、0とありますが
>成功した場合でも es_buffer実行前と後で statの値は同じでした。
>es_bufferの前に statが0にならない命令を使って
>es_buffer 0
>if stat : goto *plderr 
>とかやるとエラー処理に飛びます(^^;
こちらは正常に動作しないことを確認しました。もしかしたらHSP3ではstatへの値の渡し方が変わっているかもしれません。
HSPDXは以前からHSP3専用に移行する計画を立てていて、CWSDRV完成後に着手予定だったのですが
このような不具合があるのではまずいのでできるだけ早く開始するようにします。

>もう一つはD3Dを使わない設定でフルスクリーンを使用すると
>終了時にアプリエラーが出ます。
>es_bye後のendでエラーが出るみたいです。
これについては後日確認します。


[675]自己レス
KIMU
2005/12/29 03:34:23

>>674
>こんばんは、672を書いた後にもう少し調べてみようと思い
672じゃなくて673でした・・・(^^;



[674]時計が遅れる2 と es_buffer使用時のstat値
KIMU
2005/12/29 03:30:05

こんばんは、672を書いた後にもう少し調べてみようと思い
PCを再起動してから、サンプルを起動すると、673の時よりは
遅れが少なくなりました。(1時間で1秒ぐらい)
でも、何回かテストしてると、開始直後にガクッと止まります。
その分時計も遅れました・・・
使用したサンプルはHSPDXFIXに付属してるのを自機判定100%にしてやりました。

この現象が自分だけなら諦めます・・・

あとバグっぽいのを二つ
es_bufferで、転送が成功した場合 statは、0とありますが
成功した場合でも es_buffer実行前と後で statの値は同じでした。
es_bufferの前に statが0にならない命令を使って
es_buffer 0
if stat : goto *plderr 
とかやるとエラー処理に飛びます(^^;

もう一つはD3Dを使わない設定でフルスクリーンを使用すると
終了時にアプリエラーが出ます。
es_bye後のendでエラーが出るみたいです。
イベントビューアのコピペ
イベントの種類:    エラー
イベント ソース:    Application Error
説明:
エラー発生アプリケーション hsp3.exe、バージョン 0.0.0.0、エラー発生モジュール unknown、バージョン 0.0.0.0、エラー発生アドレス 0x5101f879

以上報告でした。


[673]時計が遅れる
KIMU
2005/12/27 21:16:16

はじめまして。最近HSPを使い始めた者ですが、
ちょっと気になる現象があるので、質問させてください。

スプライトを簡単に使えていいと思い最初はHSPDXを選んだのですが
半透明など使いたくなったのでHSPDXFIXに乗り換えました。
それで、HSPDXFIXのサンプルを動かしてみたのですが、たまに
ガクッと止まるのにFPSは通常と変わらないと言う現象が起きました。

最初はes_getfpsが旨く動いてないだけと思って気にしてなかったのですが
自前でFPSを数えてもガクッと止まった時でもFPSの変化はありませんでした・・・

それで別アプリでPCの時間を秒単位で表示しながら
テストしたらガクッと止まったのと同じく時計も止まりました。
だいたい一分で2秒ぐらい遅れます・・・

それでHSPDXでも試してみたらこっちも同じく時計が遅れてました。
他のスプライトを使える拡張プラグインでも試したらhgimg&hgimg3は
問題ありませんでした(付属のサンプル使用)

これは限られた環境でしか起こらないものなのでしょうか?
又、これを回避する方法などありましたら教えてください。
よろしくお願いします。

家の環境はこんな感じです
XPsp1,AMD Athlon,DX9.0c,RADEON9800
HSP3.0a,HSPDXFIX0.19

そうそう、サンプルがes_sizeの仕様変更で当たり判定が0%です(^^;


[672]半加算合成について
Funarin
2005/12/23 16:43:08


es_bfcalcで半加算合成がみごとできました。
どうもありがとうございます。


[671]レス
Sinagawa
2005/12/23 11:03:46

>hr6nさん
実はまだ2.61をメインで使っていたのでその方法は知りませんでした。
今更ですが情報ありがとうございます。

>Funarinさん
>DirectXなどを解説しているサイトで半加算合成を見つけました。
>半透明+加算合成/2をするらしいのですが、es_excopyを使って同じような処理はできるのでしょうか?
http://www.platz.or.jp/~moal/tblend.html にある、4番目の組み合わせの合成でよいでしょうか?
これでしたら、記載されているブレンドファクターを適用して、
es_bfcalc(ESB_ONE,ESB_INVSRCALPHA)=56を指定すればできます。


[670]半加算合成について
Funarin
2005/12/21 21:45:11

DirectXなどを解説しているサイトで半加算合成を見つけました。
半透明+加算合成/2をするらしいのですが、es_excopyを使って同じような処理はできるのでしょうか?
ブレンドファクターの値を計算すればできそうな気がするのですが・・・?


[669]Re:Re:モジュールのこと
hr6n
2005/11/27 19:10:31

>TKSさん
遅いですが、HSPDXFIX.ASの内容を、

#func es_ini   es_ini   $202

#func global es_ini   es_ini   $202

のように全部の関数について修正すれば、モジュール内でもプラグインの命令を使えたと思いますよ・・?


[668]Re:Re:es_bufcheckで
XI
2005/11/25 17:12:31

即レスありがとうございます、
もう少しいじってみてダメだったら別な環境で試してみることにします、
どうもありがとうございました。


[667]Re:es_bufcheckで
Sinagawa
2005/11/25 13:21:57

>es_bufcheckでウインドウフォーカスを動かした際にバッファ落ちする件の対策をしようと思ってるんですが、
>statに1が返るのはいいんですが、そこから画像を転送しなおしても、その後うまく画像が描画できないのです(bufcheckを使っても使わなくても、真っ白になってしまう・・・)。
>グラボの関係もあるんでしょうか?それとも転送のしなおし方が悪いんでしょうか?
es_bufcheckの使い方や、画像の転送し直しについては問題ありませんので、
内部処理の問題の可能性が高いですが、こちらでは正常に動作していますので
原因は不明です。


[666]es_bufcheckで
XI
2005/11/25 03:31:24

es_bufcheckでウインドウフォーカスを動かした際にバッファ落ちする件の対策をしようと思ってるんですが、
statに1が返るのはいいんですが、そこから画像を転送しなおしても、その後うまく画像が描画できないのです(bufcheckを使っても使わなくても、真っ白になってしまう・・・)。
グラボの関係もあるんでしょうか?それとも転送のしなおし方が悪いんでしょうか?
ちなみにグラボはRADEON9000IGPです。

そもそも画像転送しなおしとは、
es_bufcheck
if stat {
    buffer3
    picload "xxxx.bmp"
    es_buffer 0
}
みたいにすればいいんですよね?


[665]Re:Re:モジュールのこと
TKS
2005/11/13 00:49:56

実際に試してみたら正常に動作しました!ありがとうございます!

[664]Re:モジュールのこと
Sinagawa
(http://www.hspdx.net/software/hspdxfix/hspdxfix.as) 2005/11/11 00:17:00

>#moduleが二重に使用されているからエラーが出るのでしょうか…
>ひとまず今の時点ではモジュール内でプラグインを使う方法がわからないので、
>モジュール内でプラグインを使用できるかできないか、
>もしできるならばその方法を教えて下さればありがたく思います。
原因はお気づきの通り、モジュールのネストによるものです(場合によっては多重宣言も関係しますが)。
したがって、es_bufcheckモジュールをモジュール内で宣言しないようにすることでモジュール内でも
プラグインを使用できるようになります。
やり方はいろいろありますが、一例として上記リンクに対策を施したヘッダファイルを置いておきます。
この場合ですと、モジュール内で「#define HSPDXFIX_IN_MODULE」の一行を書いてから
ヘッダファイルをインクルードすることでモジュールのネストを防ぐようにしています。
ただし、es_bufcheckを実行できるのがグローバルエリアに限られてしまいますので注意してください。


[663]モジュールのこと
TKS
2005/11/10 02:34:07

Sinagawaさん、こんばんは。
少しモジュールのことで確認したいことがあって書き込みました。

過去ログに
>>モジュールでes_boxfやes_copyを使うと『文法が違います』というエラーがでてしまいます
>>モジュールでは、これらの命令は使えないのでしょうか?

>モジュール内でプラグインを使う場合、その中でヘッダファイルをインクルードする必要が
>あります。

>#module"hoge"
>    #include"hspdxfix.as"
>        :
>        :
>#global 
とあって、この方法を使ってhspdxdix ver0.17までは上手く動作しましたが、
ver0.18以降で使用すると結果レポートのウィンドウが現れて
#Error:not in global mode in line 172 [C:(略)hspdxfix.as]
というようなエラーが表示されます。(ちなみにこのエラー表示はver0.19のもの)

#moduleが二重に使用されているからエラーが出るのでしょうか…
ひとまず今の時点ではモジュール内でプラグインを使う方法がわからないので、
モジュール内でプラグインを使用できるかできないか、
もしできるならばその方法を教えて下さればありがたく思います。


[662]Re:Re:αブレンドについて
Funarin
2005/11/02 13:03:47

レスありがとうございます。

現在アクションRPGをhspdxfixで作っていまして、その斬撃エフェクトに
gmode 7のようなブレンドを使いたいと思っています。
gmode 7だとマスク画像を隣に置かなければならなくて、それだと絵を描くのが少し面倒なので、今後の実装には別ファイルから読み込む形式を希望します。


[661]Re:αブレンドについて
Sinagawa
2005/11/02 10:49:30

>gmode 7のようにマスク画像を隣に置いたり、別のファイルで用意したりして
>部分ごとにブレンド率を変えたいのですが、hspdxfixではできないのでしょうか?
すいません、勘違いしていました。
現状ではピクセル毎にα値を設定することはできません。
最近バージョンアップが停滞していますが、一応今後のバージョンアップで予定していますので
今しばらくお待ちください。


[660]αブレンドについて
Funarin
2005/11/01 22:21:53

>659
この方法はブレンド率を固定してブレンドする方法ですよね。
gmode 7のようにマスク画像を隣に置いたり、別のファイルで用意したりして
部分ごとにブレンド率を変えたいのですが、hspdxfixではできないのでしょうか?


[659]レス
Sinagawa
2005/11/01 13:01:06

>エコQさん
>es_get は 多数あるスプライト情報のうち、一度に一つの情報を取得しますが、
>これを拡張した、全部、あるいは指定範囲(とくにinfo number 0〜12)の情報を
>一度に配列に取り込める命令があると便利そうだな、と思いました。 
現在公開中のプラグインはすべてHSP2.6仕様で作成していて、その中のDIPSWにジョイスティックや
マウスの入力を取得して配列変数へ代入する命令があるのですが、その命令をHSP3.0で使うと
変数に値が代入されない問題があり、これがプログラムの問題なのかHSP3.0の互換性の問題なのか
はっきりしていません。
一応CWSDRVやDIPSWの製作が一段落ついたらHSP3.0への以降並びに仕様の見直しを考えていますが、
おそらくそれまでは実装できないのではと思います。

>Funarinさん
画面モードを16bit以上、Direct3D使用ありで初期化し、アルファブレンディングを行いたいバッファを登録します。
後はes_excopy命令でp11にESB_ALPHAを、p12にα値を指定すればよいです。
例(エラーチェックは省略):
es_screen 640,480,16,,0,1                  ;最後のパラメータがDirect3D有効の指定
buffer 2
picload"picture.bmp"                       ;画像ファイルを読み込んで
es_buffer 0                                ;テクスチャとして登録
gsel 0
*main
stick s
if s : es_bye:end
es_cls
es_excopy 0,0,0,128,128,,,,,,ESB_ALPHA,128 ;アルファブレンド
es_sync
await 0
goto *main


[658]αブレンドについて
Funarin
2005/10/29 16:53:15

gmode 7のアルファブレンディングと同じような描画方法はhspdxfixでどうやるんでしょうか?

[657]上塗り
エコQ
2005/10/29 02:03:38

本当にすみません。ひどい勘違いをしておりまして…。
有効エリアは等は関係なくて、ただ単に
定義されていないパターンを表示しようとしてエラーになっていただけでした。

アニメーションの最後のつもりのパターン(番号 p)に、待ちフレームを設定しておきながら
その次のパターン(番号 p+1)を定義していなかったのが原因です。重ね重ねすみません。


恥かきついでに、あつかましく要望をひとつ。

es_get は 多数あるスプライト情報のうち、一度に一つの情報を取得しますが、
これを拡張した、全部、あるいは指定範囲(とくにinfo number 0〜12)の情報を
一度に配列に取り込める命令があると便利そうだな、と思いました。


[656]レス
Sinagawa
2005/10/29 00:12:17

>エコQさん
解決されたようですが、いずれにしても「アニメーションがループしないスプライト」が
有効エリア外に出るとシステムエラーが発生すると言うことでよいでしょうか。
そうだとするとそのままにしておくのはまずいので確認してみます。

>みのさん
すみません。自分の使っているモニターは調整が不十分でやや暗めに出力されていて
あまり気にならなかったので問題ないと思っていました。
後日色の調整を行います。


[655](無題)
みの
2005/10/28 18:51:13

sinagawaさん、こんにちは
ちょっと意見があるんですが
このBBSの背景色をダークブルーにしたらどうですか
眩しいですので


[654]Re:アニメ+移動命令のバグ?
エコQ
2005/10/27 15:41:52

すみません。自己解決いたしました。

「 nフレーム後に消失するアニメーションパターン」を設定したスプライト板に、
さらに es_flagで、nフレーム以上のカウントダウンタイマーを設定しており、
これが有効エリア外に出たときに、システムエラーが発生していました。

こちらの定義ミスが原因だったようです。お騒がせして申し訳ありません。↓


[653]アニメ+移動命令のバグ?
エコQ
2005/10/27 14:28:15

はじめまして。HSP3.0a+HSPDXFIX0.19でバグらしきものに遭遇しましたので報告します。

シューティングで爆発パターンが四散する効果を作成していて気づいたのですが、
ループしない(最後のパターンを表示したら消失する)アニメーションパターン
を設定したスプライト板を、es_adir や es_apos などの移動命令で移動させると、
スプライトが有効エリア外に出たときの es_draw でHSPがシステムエラーを吐くようなのです。

es_linkでアニメーションのループを適当に閉じたら、エリア外に出てもエラーになりませんでした。
ループを閉じない場合でも、アニメ表示時間を短くする・移動速度を落とす等して、
画面外移動してしまう前に消失するように設定すればシステムエラーは回避できるので、
当面はやりすごすことができるのですが、意図した効果とは違ってきます。

CWS等の開発に水をさすようで心苦しいのですが、報告させていただきます。


[652]Re:es_windowについて
ZAP
(http://www.kit.hi-ho.ne.jp/zapzap/) 2005/10/26 22:09:36

やはり絶対座標が正しいということでよかったんですね。
疑問が解けてすっきりしました。ありがとうございました。


[651]Re:es_windowについて
Sinagawa
2005/10/25 11:45:22

>p3、p4は基点からの相対座標を
>指定するようになっていますが、実際の挙動では、
>p3,p4はそれぞれ「スプライト表示終点X(Y)座標」
>として絶対座標を指定するようになっているのでは
>ないでしょうか?
更新履歴に明記されていないのでいつからかは忘れましたが、
es_windowはスプライトのクリッピング領域を指定する命令なので
(その方が記述がわかりやすいのではと思って)範囲指定ではなく
絶対座標での指定に変更した覚えがあります。
なので、マニュアルの変更忘れと言うことになります。


[650]es_windowについて
ZAP
(http://www.kit.hi-ho.ne.jp/zapzap/) 2005/10/22 15:08:47

サイト移転作業お疲れ様です。

さて、HSPDXfixのes_window命令ですが、
マニュアルでは、

es_window p1,p2,p3,p4
p3=スプライトを表示するX方向の範囲
p4=スプライトを表示するY方向の範囲

となっており、p3、p4は基点からの相対座標を
指定するようになっていますが、実際の挙動では、
p3,p4はそれぞれ「スプライト表示終点X(Y)座標」
として絶対座標を指定するようになっているのでは
ないでしょうか?

私の勘違いかもしれませんがご確認頂ければと思います。


[649]復旧おめでとうございます
たかのん
(http://homepage1.nifty.com/takanon/) 2005/10/13 23:28:24

復旧おめでとうございます。
そして、移転作業ご苦労様でした。
リンク修正作業は週末にやりますね。
ひとまず改めてご挨拶まで。


[647]Re:CWSの音色のサンプリングについて
ZAP
(http://www.kit.hi-ho.ne.jp/zapzap/) 2005/08/26 19:01:18

早速のお返事ありがとうございます。
つまりワンショットサンプルの場合は、総データ量が決まっているため、
高音で再生=サンプリングレートが上がる=その分再生時間が短くなる
という考え方でいいということですね。

当方でもいろいろ試してみたいと思います。


[646]Re:CWSの音色のサンプリングについて
Sinagawa
2005/08/24 20:10:50

>「CWS音源用音色作成ガイド」のワンショットサンプルについてなのですが、
>具体的に、どの程度の長さのサンプルを作成すれば良いのでしょうか?
原理上音程によって音長が変わるのと、ワンショットサンプルは鳴らし終わったらそこで
音が切れるので、一概にどの程度の長さにするのが適切とは言えないです。
参考までに自分のやり方を書いておきますと、減衰する音はだいたい-48〜-64dbあたりまで
落ちたところでカットしています。ピアノでこのやり方を適用するとだいたい長さは
4〜6秒くらいになります。


[645]CWSすごいっス
masa77s
2005/08/22 23:59:48

CWS開発お疲れ様です。 m(_ _)m
UPされるの楽しみにしてました。

詳しいことがわからないので
とりあえず身近なmidiをドラムだけ
サンプルの音色で再生してみたら
カナリのすごさにドギモを抜かれました!
すごいです。

今後の開発にも期待しております!


[644]CWSの音色のサンプリングについて
ZAP
(http://www.kit.hi-ho.ne.jp/zapzap/) 2005/08/22 20:14:36

CWS開発お疲れ様です。
「CWS音源用音色作成ガイド」のワンショットサンプルについてなのですが、
具体的に、どの程度の長さのサンプルを作成すれば良いのでしょうか?
矩形波などの、ノートonからノートオフまで波形が変わらないものは
適当な長さをサンプリングしておけばいいように思われますが、
ピアノなどの減衰音の場合、「T120の四分音符の長さ」くらいを
サンプリングしておけば大体の音長はカバーできるものなんでしょうか?
的はずれな質問かもしれませんが、よろしくお願いします。


[643]Re:当たり判定について
phant
2005/08/09 23:20:34

すいません、確かにes_typeで回避できますね。
良く考えもせず質問してしまい申し訳ありませんでした。
>次のバージョンで0を指定したら判定がなくなるように変更しておきます。
有り難うございます。次のバージョンも楽しみにしております。


[642]Re:当たり判定について
Sinagawa
2005/08/09 10:59:29

>質問なのですが、es_sizeのp3を0にするとどうも当たり判定が100%になってしまうようです。
>当たり判定を無しには出来ないのでしょうか?
現状ではes_typeなどを使って回避するしかありませんが、次のバージョンで0を指定したら
判定がなくなるように変更しておきます。


[641]当たり判定について
phant
2005/08/07 13:15:22

はじめまして。HSPDXFIX、すごく便利で重宝してます。
質問なのですが、es_sizeのp3を0にするとどうも当たり判定が100%になってしまうようです。
当たり判定を無しには出来ないのでしょうか?
Ver.は0.18です。
よろしくお願いします。


[640]Re:[637]
Penta
2005/07/24 14:27:48

 お忙しい中,ご確認ありがとうございます。
そちらでは問題なかったということはやはり環境のせいでしょうか。
とりあえず文字は画像に差し替えることにします。
ありがとうございました。


[639](無題)
kara
2005/07/24 13:57:02

↓自己解決しました。すいません、

[638]板違いだったらごめんなさい
kara
2005/07/24 12:32:10

はじめましてこんにちは、未だにHSPDXを使用させていただいております。
シューティングゲームで敵弾を定期的に除去する時などに(スプライトナンバー確保の為)
下の処理を使用しているのですがなぜか完全に消去されていない場合があります。
それでスプライト数が確保できずにスプライト数が限界数を超えて新しい敵弾が上手く生成できなくなります。
初心者的な質問かもしれませんがわかればレスお願いします。
あと、板違いだったらごめんなさい。

*tama_ire1        ;敵即消しルーチン
    repeat 512,0
    es_get ire,cnt,13;type値取得
    if ire=512:es_kill cnt    ;敵通常弾なら消去
    loop
    return

;敵弾のtype値は512


[637]Re:es_fmesで文字がちらつく
Sinagawa
2005/07/21 22:08:04

すみません、レス遅れました。

>HSPDXFIX.DLL ver 0.18にて
>
>現象:全画面時に(DirectX3D使用フラグに関係なく)
>   以下のようにes_fmesを実行すると文字がちらつきます。
こちらで確認してみましたが、問題なく動作しました。
Ver0.14以降全体的に大がかりな変更こそありましたがes_fmes命令については
内部動作を全く触っていないため、原因ははっきりとはわからないです。


[636]es_fmesで文字がちらつく
Penta
2005/07/17 17:39:03

はじめまして。不具合が起こったので報告します。

HSPDXFIX.DLL ver 0.18にて

現象:全画面時に(DirectX3D使用フラグに関係なく)
   以下のようにes_fmesを実行すると文字がちらつきます。

//-------------------------------------------------
repeat
es_cls
color 255,255,255
font "times new roman",36
pos 30,350
es_fmes "HSPDXFIX"
es_sync
await 1
loop
//-------------------------------------------------

ver0.14のときは問題なく表示されましたが,ver 0.18では
文字の表示がちらついてしまいます。
また,ウィンドウモードではこの現象は起こりませでした。


[635]es_exboxfでのα合成表示について・追記
Yukashi
2005/07/14 01:42:54

> [633]
> Ver 0.18では動作速度向上のためにポリゴンが回転しているときと
> そうでないときで描画方法を切り替えていますので、いずれの場合
> でも描画されないのであれば...
 その後確認したところ、回転あり・なし共に、一部のブレンドファクター
では描画されませんでした。現象を発見した環境以外ではいまのところ
全て正常に描画されていますので、希な現象のようですね。

# 現在はes_excopyでes_exboxfを代替しています。
# せっかくのp11,p12,p13が活かせないのは残念です。(^^;


[634]Re:[633]
Yukashi
2005/07/09 00:13:40

 ご確認ありがとうございます。
現象を発見したときは回転パラメータを使用していませんでした。
手元の環境ではないため、追調査がすぐにはできませんが、回転パラメータを
指定した場合も試してみようと思います。


[633]Re:es_exboxfでのα合成表示について
Sinagawa
2005/07/08 03:34:18

>Radeon9250のグラフィックボード(+最新ドライバ)にて、es_eboxfを使用した
>場合に不具合がありましたので報告いたします。
>es_exboxfのp9(ブレンドファクター)に、一部の値(例えばp9 = ESB_ALPHA)
>を指定した場合に、矩形が描画されません。簡単に調査したところ、p9が
>以下のときに描画されないようです。
サブPCにRADEON(初代ですけど)が乗っているのでATIからドライバ落として確認してみましたが、
こちらでは問題なく描画されました。
Ver 0.18では動作速度向上のためにポリゴンが回転しているときとそうでないときで描画方法を
切り替えていますので、いずれの場合でも描画されないのであれば原因はわかりかねます。


[632][631]の追記
Yukashi
2005/07/06 16:35:42

 es_exboxfで描画されないブレンドファクターでも、
es_exputやes_excopyでは正常に描画できているようです。


[631]es_exboxfでのα合成表示について
Yukashi
2005/07/06 16:28:19

 hspdxfixを愛用させてもらっております。

Radeon9250のグラフィックボード(+最新ドライバ)にて、es_eboxfを使用した
場合に不具合がありましたので報告いたします。
es_exboxfのp9(ブレンドファクター)に、一部の値(例えばp9 = ESB_ALPHA)
を指定した場合に、矩形が描画されません。簡単に調査したところ、p9が
以下のときに描画されないようです。
-------------------
p9 :  dst : src
-------------------
11 = 11*1 + 0
15 = 11*1 + 4 ←ESB_ADD
18 = 11*1 + 7
21 = 11*1 + 10

41 = 11*3 + 8 ←ちがうかも?

55 = 11*5 + 0 ←ESB_SHADOW
59 = 11*5 + 4 ←ESB_ADD
62 = 11*5 + 7
65 = 11*5 + 10

66 = 11*6 + 0
70 = 11*6 + 4
73 = 11*6 + 7
76 = 11*6 + 10
-------------------

ESB_ADDや、ESB_ALPHAが含まれているので、正常な描画ができないと
影響が大きい気がします。環境特有の現象かもしれませんが、一度
ソースの方も確認していただければと思います。
長文失礼致しました。

# DirectSoundプラグイン、私も期待しています。


[630](無題)
rew
2005/06/07 20:24:59

レスありがとうございます。
どうやっても結果は一緒でした。名残惜しいですがDirectXはあきらめようと思います。


[629]私もDirectSoundプラグインに期待!
masa77's
2005/06/07 00:08:23

お疲れ様です  m(_ _)m
いつも大変お世話になっておりますmasa77'sです

[625]SinagawaさんのDirectSoundプラグイン
私もすごく興味あります!
ですが、私はMMLがどうしても苦手で
MIDIシーケンサーでしか使えません・・・ (。_。;;
開発には大変なご苦労があるかと思いますが、
簡単な単音再生ができる程度でのMIDI再生を、
サポートしていただけると嬉しいです。

あと[623]解決に大期待です!


[628]Re:結局…
Sinagawa
2005/06/06 23:51:12

>es_syncを入れて実行してみたらちゃんと今度は白に変わりました。が、フェイドではなく一瞬で変わってしまうのです。
>パラメータの値を色々変えてみたり、分からないなりにループさせてみたりしましたが、結局一瞬で表示させることしかできませんでした。
es_palfadeのパラメータは昨日書いたとおりで問題ないですので、もしかするとモニタかグラフィックボードの
関係でVSyncを待っていないので、一瞬で終わるように見えるのかもしれません。
es_syncでウェイトを明示するようにした場合どうなるか試してみてください。


[627]結局…
rew
2005/06/06 17:55:10

Sinagawa様、レスありがとうございます。
es_syncを入れて実行してみたらちゃんと今度は白に変わりました。が、フェイドではなく一瞬で変わってしまうのです。
パラメータの値を色々変えてみたり、分からないなりにループさせてみたりしましたが、結局一瞬で表示させることしかできませんでした。
もしよろしければフェードのやり方を教えていただけませんか?
図々しいお願いを申し訳ありません。


[626]レス
Sinagawa
2005/06/06 00:34:57

>rewさん
>まずes_screen命令ですが、ビデオカードの性能のせいか8bitではフルスクリーンでの表示がおかしくなってしまいます。
もしそれが色化けでしたらWindows2000以降では結構多くの環境で起こりうるようです。
16bit以上にすればパレットそのものを使用しないのでこの問題は回避できます。

>あとes_palfade命令ですが、どうもうまくいきません。
es_palfadeはes_syncで画面を更新したときに反映されますので、提示されたスクリプトの場合だと
(ループしていないのはさておき)フェードが反映されるのは次のフレームになります。
あと、$fffff(fが5つ)になっていますが真っ白へのフェードを想定しているのなら$ffffff(fが6つ)
が正解です。

>ZAPさん
>とよしまさんのT'SoundSystemみたいにテキストで書かれたMMLを読み込んで
>リアルタイムで曲を演奏することができれば最高!なのですが・・・
ソフトシンセ(もどき)部分はデータ作成に既存のツールを利用できること、そこからストレートに演奏へ持っていけること、
そしてどさくさに紛れてMIDI再生をサポートできること(笑)の3点からSMFを下地に利用しようかと
考えていたのですが、どうせGM相当のサポートまではできないのでMMLを使うというのも
ありかもしれませんね。


[625]DirectSoundプラグイン
ZAP
(http://www.kit.hi-ho.ne.jp/zapzap/) 2005/06/05 18:09:29

初めまして(?)
DirectSoundプラグイン、面白そうですね〜
とよしまさんのT'SoundSystemみたいにテキストで書かれたMMLを読み込んで
リアルタイムで曲を演奏することができれば最高!なのですが・・・
要望が多くなければ実現は難しいですかね(^^;
でも楽しみにしてます〜


[624]HSPDXFIX.DLLについて
rew
2005/06/05 17:55:58

今DirectXを使ってゲームを作っているのですが、HSPDXFIX.DLLでうまくいかないところが出てきたので質問させてください。
まずes_screen命令ですが、ビデオカードの性能のせいか8bitではフルスクリーンでの表示がおかしくなってしまいます。
16bit以上なら(今のところ)問題ないようですが、そういった環境によって正しく表示されないということもありえますか?(もしそうならかなりきびしい^^;)
あとes_palfade命令ですが、どうもうまくいきません。
es_ini
es_screen 640,480,24,,0,1
gsel 0
es_cls
es_sync
es_palfade 256,1,$fffff
end
このように記述しているのですが、使い方が間違っているのでしょうか?
回答のほうよろしくお願いします。


[623]HSPDXFIX近況報告
Sinagawa
2005/06/05 00:20:03

今からトップページの更新を行うのは面倒なのでこっちに。
es_iniとes_byeを複数回実行すると動作がおかしくなる不具合について、最近気になっていたことが
あってソースを少しいじった結果、ウィンドウモードでは4回までOKでフルスクリーンは
何回でも、あるいは結構な回数までいけるようになったのと、フルスクリーンから復帰したときに
起こっていた不具合(マニュアル参照)が直りました。
なぜウィンドウモード時に4回という決まった回数までしか実行できないのか謎なので
その当たりは引き続き調査します。


[622]たびたびすみません
k
2005/05/30 15:37:06

解決しました。
すみませんでした。


[621]es_xferについての質問
k
2005/05/30 11:20:49

es_xfer命令を使うとどうもエラー1が出ます。
転送先のIDも確保しているし転送するサイズが画面からはみ出しているわけでも
ないのになぜか出ます。
どういう場合このエラーが出るのでしょうか。


[620]Re:Re:Re:Re:たまに出るエラーについての質問
k
2005/05/30 00:24:55

なるほど。
白ダイアログが出るので何かやっちゃいけないプログラムの書き方を
しているのかなと思っていたんですが別にそういうワケではないのですね。


[619]Re:Re:Re:たまに出るエラーについての質問
Sinagawa
2005/05/29 23:55:42

>勉強不足ですみません。チューンとは何でしょう。
寝る前にあわてて書いたので所々説明不足でした。
チューンとはチューンアップのことであり、すなわちWindowsのカスタマイズです。
主に起動時に常駐させるプログラムの数を減らすのが効果があるようで、具体的な方法は
「Win98 システムリソース」などでgoogle検索するといろいろ解説サイトが出てきますのでそちらを
参照してください。

>ところで大きい画像を8つDirectXのオフスクリーンバッファに転送している状態
>なのですが、大きいと言ってもBMP無圧縮で合計1.6メガ程度なんですが
>画像の大きさにも問題があるのでしょうか。
結局のところリソース不足は「起きてしまったらどうしようもない」もので、さらに言えば
「(発生頻度には個人差があるが故に)ユーザーが気を配ること」ですので、関連性の有無以前に
作る側が意識することではないと思います。


[618]Re:Re:たまに出るエラーについての質問
k
2005/05/29 08:30:36

レスありがとうございます。
>無駄にリソースを消費しないようにWindowsをチューンするか
勉強不足ですみません。チューンとは何でしょう。

>リソースを(あまり?)気にしなくてよいWin2000以降に乗り換えるしかありません。
作っているのはゲームなのですができるだけ多くの人の環境で遊べるようにしたかったんですがやはりゲームつくりは難しいですね。

ところで大きい画像を8つDirectXのオフスクリーンバッファに転送している状態
なのですが、大きいと言ってもBMP無圧縮で合計1.6メガ程度なんですが
画像の大きさにも問題があるのでしょうか。
小さいものは320x240程度なのですが大きいものは1200x480や1600x80の大きさの画像を使っています。
画面モードは
es_screen 320,240,16,,1,1
としており、使っている画像は全て256色ですが全部パレットが違うというのも
問題になったりするでしょうか。


[617]Re:たまに出るエラーについての質問
Sinagawa
2005/05/28 23:50:09

>このエラーはどういう条件で出て、
>またどうやったら回避できるようになるのでしょうか?
ダイアログの内容からしておそらくWin9x系を使用しているのだと思いますが、だとすれば
>どうパソコンのリソースが低下している時にhspdfixを使ったプログラムを実行すると
↑これ(リソースの低下および不足)が原因だと思います。
回避方法としては、無駄にリソースを消費しないようにWindowsをチューンするか、あるいは
リソースを(あまり?)気にしなくてよいWin2000以降に乗り換えるしかありません。


[616]たまに出るエラーについての質問
k
2005/05/28 17:44:14

どうパソコンのリソースが低下している時にhspdfixを使ったプログラムを実行すると
たまに白い背景のダイアログが出てきてエラーが発生しました閉じるか無視かを選んでくださいな事がかかれていて閉じた後、普通のエラーダイアログがでて
DIBENG.DLLでエラーが発生しましたと出て、パソコンを再起動しない限り
そのソースを実行しても画面が再描されないというエラーが出ます。
また他のダイレクトXを使ったソフトの一部が再起動するまで動かなかったりするんですが、
このエラーはどういう条件で出て、
またどうやったら回避できるようになるのでしょうか?


[614](無題)
k
2005/05/23 02:45:12

>Yukashi様
アイヤー しりませんでした。
有難うございます。


[613]Re:[612]
Yukashi
2005/05/23 00:57:18

>k様
 ver 0.15beta5からes_expatというマクロが追加されています。
これを使えばオフスクリーンバッファを指定してパタン登録を
行うことができるかと思います。


[612]実装を希望してみたり
k
2005/05/22 16:41:27

毎度質問をさせてもらっているkです。
es_patは直前にVRAMに転送された画像データが対象になりますよね。
コレを指定したオフスクリーンバッファIDを対象にさせるという実装は無理でしょうか。
私のプログラムの書き方が悪いのもありますが、ことあるごとに画像をロードし直すという
場面がちょくちょくありまして。


[611](無題)
そにっく
2005/05/20 16:09:29

>es_excopyで採用しているライト色に元の色より明るくする機能がないため、現状では
>フラッシュしている画像を用意するしかありません。

わかりました。ありがとうございます。


[610]re:レス
たかのん
2005/05/17 23:36:26

>p3の値を間違えるとフェード中に色が変わったりします。
実験してみて納得しました。
p3の色で全画面塗りつぶす(p1はブレンド率)ような感覚になるわけですね。
任意の色が使えるので表現の幅が広がりそうです。
ありがとうございました。


[609]レス
Sinagawa
2005/05/17 00:06:43

>たかのんさん
16bit以上の時はDirect3Dの半透明描画を使ってアルファブレンディングしているだけです。
よって、「es_palfade 256,0,$ffffff」で真っ白にしておいて「es_palfade 0,2,$ffffff」で
元に戻ります。p3の値を間違えるとフェード中に色が変わったりします。

>そにっくさん
es_excopyで採用しているライト色に元の色より明るくする機能がないため、現状では
フラッシュしている画像を用意するしかありません。
ただ光っているように見えれば何でもいい、というのであればスプライトの上から同じ絵を
加算合成で重ねるという手もありますが。


[608](無題)
そにっく
2005/05/16 20:39:36

お世話になってます。
要望なんですが、スプライトが衝突したときに一瞬ちょっとだけ明るくなる
というのを追加画像なしでやりたいのですが、Direct3Dでそういったことは
可能でしょうか?

現状加算合成でやってるんですが、BGの色に影響されてしまうし透けてしまうので
スプライトそのものが光ったりできるのが理想なので…。


[607]Re:es_palfade
たかのん
2005/05/16 01:48:29

失礼しました。
マニュアルをよく読め>俺

えーっとごめんなさい、読んでもやってみてもよく判りませんでした(汗)
8bitの際に画面を真っ白の状態から通常の明るさへ徐々に戻すのは
es_palfade 256,0
es_palfade 0,2
とやればよかったんですが、16bit以上の場合どうすればいいんでしょうか?


[606]Re:es_palfade
Sinagawa
2005/05/16 00:07:38

>8bit以外でes_palfadeを使うと、うまくフェードイン&アウトされません。
>0以上の明るさを指定すると、逆に暗転していきます。
ヘルプに書いてありますが、16bit以上の時はp1に指定するのは目標アルファ値で正負関係なく、
またp3でフェードさせる色を指定する必要があります。
一応8bitモードでもそのようにすることはできますが、どちらかにあわせた方がいいですかねえ。


[605]es_palfade
たかのん
2005/05/15 20:48:08

ご報告。
8bit以外でes_palfadeを使うと、うまくフェードイン&アウトされません。
0以上の明るさを指定すると、逆に暗転していきます。
0.18です。


[604]AXからAX間の移動6>EXEジャンプは失策でした
masa77's
2005/05/07 04:18:13

[601]のスクリプトはes_bufferを使ってないので
十数回のジャンプでは重くなりませんでうたが、
製作中の本体スクリプトでテストを重ねた結果
EXEジャンプ続けると、処理が極端に重くなる現象が
出てしまいました。

小手先ではありますが、いいアイデアだとおもったのに
またも失敗で残念です。

やはり抜本的な見直しが必要のようです。 ;_;
テストされていたら申しわけありませんっ
EXEジャンプ案は失敗でした・・・
失礼しました m_ _m


[603]やや解決しました。
k
2005/05/06 15:33:36

es_excopyでやると透過されました。

[602]透明化での質問
k
2005/05/06 15:25:34

es_copy で画像を表示したいのですが なぜか0,0,0の部分が透明化されません。
直前にgmode 2をしていますし 画像の透過させたい部分も0,0,0になっているのにやはり透過されません。
スプライトはちゃんと透過されるんですけどね。
どうしたらいいでしょう。


[601]AXからAX間の移動5>アイデア
masa77's
2005/05/06 08:50:10

AXからAXジャンプがダメなら
EXEからEXEにすればいいんじゃない?
って、トイレでふと思いついたので
試験的にやってみました。

↓のスクリプトでEXEファイルを
つくりEXEからEXEジャンプをして
みたら、以外とすんなり出来ました。

//---------------------

#include "hspdxfix.as"

es_ini
es_screen 640,480,24,,1,1
if stat : end

*main
stick s
if s&128 : es_bye:end
if s&32  : exec "move.exe",0 : es_bye:end
es_exboxf 0,0,640,480,$000000,0,0,0,,,$00ff00,$ff0000,$0000ff
es_sync 16
await 0
goto *main

//---------------------

テストスクリプトだけのテストで
実際の製作中のファイルではまだ
テストしてませんが、
一応ウインドウモードでのジャンプは
可能のようでした。
この方法だと一度ウインドウを消してるので
AXジャンプとちがって不安定になる危険
がないのじゃないかなって勝手に思ってるのですが
(まだテスト回数が少ないのでなんともいえませんし)
どうでしょうか?

ただ、フルスクリーンでは不可能だったのと(痛い)
EXEなためにいきなりエンディング見られたり
途中からできちゃうのを防止する別な問題なんかも
ありますが、致命的問題がなければこの方法でしばらく
対処しようかと考えています。

この方法が危険なようでしたら
アドバイスいただけると幸いです
長文ならびに連続レス失礼しました。 m_ _m 


[600]AXからAX間の移動4
masa77's
2005/05/05 23:48:49

Sinagawaさんレスありがとうございます

AXとAXの間の移動を続けていたら
ウインドウモードでも処理が極端に重くなる現象が
こちらでも確認しました。
やはり無理そうですね・・・

無駄に長いスクリプトを書いておりましたので
いっぺんに初期化できてなおかつ変数衝突回避できる
run命令によるAXファイルジャンプは便利だと
おもっていたのですが、ここにきて
つまずくとは思いませんでした・・・ ;−;

いまだにモジュールが苦手で、
(HSP3の新構文はわかりやすそうですが・・・)
ゴリ押しでかいてたらメインのスクリプトが350KBに
なってしまい、だんだんメモリ消費とか変数衝突とか
気になってたので、AXジャンプは大きな救いの手立て
だったのでショックでした。

こうなたのは自分の設計最初からに問題あり
仕方ないので、がんばって別の手段を考えたいとおもいます。
環境など調べていただいてありがとうございました。 m_ _m


[599]レス
Sinagawa
2005/05/05 21:36:37

>ゲームのスクリプトデータをAXファイル化して、
>シーンごとに管理してジャンプするように作ったのですが
>window_modeならんとかAXとAXの間が繋がる
>(一部透明色が反映されないなどありますが)
>のですがfull_screen中にAXとAXの間の移動中に
>スクリーンの初期化に失敗して終了してしまいます。
>これを回避する方法はありませんでしょうか?
こちらで調べてみたところ、別のAXファイルへ飛ぶときに一瞬ウィンドウを初期化し直すようで、
最初はこれが原因かと思っていましたが、どうもes_screenやes_byeを複数回実行すると
フルスクリーン・ウィンドウ問わず落ちてしまうようです(しかもその後Windowsが不安定になる
オマケつき)。
以上から、内部できちんと初期化や解放ができていないなど何かの問題を抱えているのではという
結論に達しました。おそらく、この現象はウィンドウ処理がらみで変更のあったVer 0.13から
存在したものと思います。


[598]AXからAX間の移動3
masa77's
2005/05/05 00:58:53

↓タイトル入れ忘れました
失礼しました m_ _;;m


[597](無題)
masa77's
2005/05/05 00:57:47

説明したサンプルでは、最初の移動はASからAX
二回目からはAXから同じAXという移動になってますが、
まったく別なAXを2,3個用意して実験した結果
HSP26.1付属のhspdx(hspdxfix.dll(ver0.12)と同等)
ではAXからAX間の移動に成功できました。
しかし、HSPDXFIX Ver0.18環境下では無理でした。

ASさんのおっしゃるようにes_screenの2度呼び出しでエラー
が起きているとしたら、いつのバージョンからエラーになる
ようになってしまったのか知りたいです。

半透明・加算・減算などHSPDXFIXならではの機能を
大部分つかって書いてしまっているので、
HSPDXに戻すことは、最初から出直しになり
もったいない思です。
できれば、便利で高速なHSPDXFIXを完成まで
使わせていただきたいのです。

知っているなにか回避策がありましたら、
レスを書き込んでいただけると大変ありがたいですっ!
諦めず粘るつもりですので、些細なことでも
情報お待ちしておりますっ!

それから、面白いことにHSPDXのAXから
HSPDXFIXのAXへの移動は成功を確認しております。
ということで、やはりHSPDXFIXのes_screenの
2度呼び出しでエラーの壁なのですね.....
Direct3Dがらみだと不可能なのでしょうか....涙(;n;))

ASさんレスありがとうございました m_ _m


[596]AXからAX間の移動
AS
2005/05/04 21:55:02

それは、同じファイルをrun命令で呼び出しているのですか?

AX間の移動だから別のAXをrun命令で呼び出すことだと思ったのですが。

まぁ、それはいいけど。
es_screenの2度呼び出しでエラーが起きてると思います。
確か、2度呼び出すと落ちるはず。


[595]full_screen中のAXからAX間の移動中に・・・2
masa77's
2005/05/04 11:20:35

連続投稿失礼します m_ _m

例えば:
(サンプルを改変して説明させていただきますと)
//---------------------
#include "hspdx.as"

es_ini
es_screen 640,480,16
if stat : end

*main
stick s
if s&128 : es_bye:end
if s&32  : run "move.ax"
color 255,0,0
es_boxf 0,0,640,480
es_sync 16
await 0
goto *main
//---------------------
というスクリプトを
ファイル名をmove.asにしてオプションから
オブジェクト化move.ax作成の後
実行するとrun命令によるaxジャンプが可能なのですが
そこをHSPDXFIXに置き換えると
//---------------------
#include "hspdxfix.as"

es_ini
es_screen 640,480,24,,0,1
if stat : end

*main
stick s
if s&128 : es_bye:end
if s&32  : run "move.ax"
es_exboxf 0,0,640,480,$000000,0,0,0,,,$00ff00,$ff0000,$0000ff
es_sync 16
await 0
goto *main
//---------------------

というスクリプトを同じように
ファイル名をmove.asにしてオプションから
オブジェクト化move.ax作成の後
実行すると強制的に落ちてしまいます。

DXのバージョンはHSP26.1付属のものです
(hspdxfix.dll(ver0.12)と同等)

HSPのスクリプトをAX化してジャンプすると
以前のメモリ等がクリアされるらしいので
いきあたりばったりにゴリゴリ書いた
私のやり方だととても都合がよいので
使えると助かります。というか・・・・
それが使えないと、一からやり直しに近ので痛いです(;_;))

そもそもAXジャンプでDLL等の再初期化や
DirectX関係の処理がきちんと動いてくれすのか疑わしいし
こいった方法は半ば裏技的な危険な方法なのでしょうか?

長文になり失礼しました m--m
あ、それからテストOSはXP_home_サービスパック2です・・・


[594]full_screen中のAXからAX間の移動中に・・・
masa77's
2005/05/04 02:32:39


10万ヒット達成おめでとうございます!
HSPDXFIX Ver0.18リリースおつかれさまです!

お世話になりっぱなしなmasa77'sです
さっそくですが、質問させてください

ゲームのスクリプトデータをAXファイル化して、
シーンごとに管理してジャンプするように作ったのですが

window_modeならんとかAXとAXの間が繋がる
(一部透明色が反映されないなどありますが)
のですがfull_screen中にAXとAXの間の移動中に
スクリーンの初期化に失敗して終了してしまいます。
これを回避する方法はありませんでしょうか?


テスト環境は
HSPDXFIX Ver0.18
640*480 16bit Direct3D使用
PenIII 1Gzh RAM:512M
GeForce2 MX/MX 400 VRAM:32M
ゲーム中Vramは最大24M前後つかってます

2年ぐらい前 HSPDXFIX当時のバージョンで
別なゲームの製作中(完成にはいたらなかった作品ですが)
AXからAXへのジャンプは成功していましたので
(一瞬フルククリーン化のような動きはするものの)
出来るだろうぐらいの軽い気持ちで組んでいたので、
失敗の時はショックでした。

これはHSPDXFIX.既知問題などに関係あるのでしょうか?
もしよろしければ、メール等の手段でテストファイルを
見ていただきたいのですが、いかがでしょうか?


[593]Re:HSPDXFIXのバグ?
Sinagawa
2005/04/30 00:11:18

>パレットモードでスクリーンを初期化し、
>グラフィックを読み込んだ後スプライトを登録。
>実行してみると、グラフィックが色化けしていました。
Windows2000以降でパレットモード時に色化けが生じるのは以前から報告を頂いており、
こちらでも確認しているのですが原因・対処法ともにわかっておりません。
旧バージョンのHSPDXでは問題なかったり、タスクを渡さないようにすると直るところを見ると
サブクラス化がいい加減なのかもしれません。

>でもタスクを渡さないとフリーズしてしまうことがあるんですよね?
はい。万が一永久ループなどにはまってしまったときにAlt+Ctrl+Delなどが利かなくなりますので
やめた方がよいです。


[592]HSPDXFIXのバグ?
ANBLN
2005/04/27 16:45:07

はじめまして。
HSPDXFIXを使わせてもらってます。ANBLNという者です。
プラグインにバグのようなものがあったのでとりあえずここに書いておきますね。


パレットモードでスクリーンを初期化し、
グラフィックを読み込んだ後スプライトを登録。
実行してみると、グラフィックが色化けしていました。
一応OSにタスクを渡さないようにすると、(メインルーチンのウェイトを消した。)正常に動きました。

でもタスクを渡さないとフリーズしてしまうことがあるんですよね?
HSPDXだと正常に動いたんですが…。


[591]res
そにっく
2005/04/20 08:13:06

es_sync -16,1でやってみましたが、全ての環境でFPSが揃いました。
お騒がせいたしました。以前負の数で実験したこともあったんですが
私もすっかり忘れていました。
いろいろとありがとうございました。


[590]レス
Sinagawa
2005/04/19 11:26:37

>そにっくさん
たくさんの検証ありがとうございます。
「シングルCPUのマシンにおいては、16ms:17msがおよそ95:5になる環境と40:60になる環境の
二通りがあり、タイマーの精度面では(大きなばらつきが出るわけではないという意味で)ほぼ問題はない」
ということははっきりしましたが、結局のところ「なぜ二通りの環境が現れるか」という根本的な部分は
不明なままである以上、この差をどうにかして埋めるしかないことになります。
たとえば、ウェイトを取りすぎたフレームが発生したときに次のフレームでのウェイトを
取りすぎた分だけ減らすことで理論上1秒間の平均処理時間はそろうことになります。

これをふまえて本題。
では具体的にどのような処理を組めばいいかという話になるのですが、実はこのような機能を
実装していたのを自分で作っておいて忘れていました。
「es_sync -16,1」のように、p1を負の値で指定することでウェイトを自動で調整するようになります。
61FPSの結果が出たサブPCにて試してみたところ、17msのウェイトが出た次のフレームは15msに
なり、63FPSで安定しました。
おそらくほとんどの環境で問題は発生しないと思われますので、一度試してみてください。


[589]書き忘れました
そにっく
2005/04/18 18:02:23

前のデータですが、DirectXはすべて9.0cです。

[588]fpsの件つづき
そにっく
2005/04/18 18:01:03

Celeron1.8GHz/Win2000/Intel82845G<FPS:63>
16ms:607/640
17ms:33/640
その他:0/640

Celeron1.8GHz/Win2000/GeForce2MX<FPS:63>
16ms:609/640
17ms:31/640
その他:0/640

AthlonXP1700+/WinXP/RADEON9600pro<FPS:61>
16ms:253/640
17ms:385/640
その他:2/640

AthlonXP2400+/WinXP/RADEON9200SE<FPS:61>
16ms:255/640
17ms:383/640
その他:2/640

Celeron650MHz/WinXP/SiS630<FPS:63>
16ms:607/640
17ms:33/640
その他:0/640

PentiumIII-866MHz/Win2000/GeForceFX5800<FPS61>
16ms:254/640
17ms:385/640
その他:1/640

XEON2.4G(dual)/Win2000/RADEON9800XT<FPS63>
16ms:232/640
17ms:299/640
その他:109/640

長文すみません。
上二つは同じPCでビデオカードだけ変えたものですが変わりませんね。
インテル系が63になりやすいようですが、因果関係はわかりません。

えといろいろレス頂いたようですが少々。
基本的には同期待ちが美しいのですが、ユーザーの環境が必ずしも全画面時60Hzとは
限りませんし、そもそもウィンドウ環境では同期はとれませんので、ウェイトは
必要になってしまいますので、出来たら高い精度になってもらいたいなと思いました。
長々と失礼しました。


[587]手動ウェイトよりはvsync待ちだと思う
Ricky&#131;&#130;&#139;&#130;&#153;
2005/04/18 07:14:46

そもそも60hzの環境であるとすれば60fps越えても意味無いのだから、
普通にes_syncだけで同期させた方が良いと思うのですがどうなんでしょうか?
自分のシューティングの場合、通常時はes_syncのみ、意図的に処理落ちさせるとき
にes_sync 33,1(およそ30fps)とかやってます。

・Sinagawaさんへ
61fps環境についてですが、モニタのリフレッシュタイミングに
合わせて16msと17msが出るのではないかな?と思うのですが。
それを繰り返して1000msピッタシにはならないからあまりで61fpsになるとか。
63fpsのほうは完全にタイマー依存で処理されてるとかでしょうか。
思いつきで書いているので「なんで?」と聞かれても???なのですが。
(hspdxfix動かせる状態ではないのでスクリプト使えてないです、結果はいずれ)


[586]Re:fpsの件
Sinagawa
(http://www.diveto.net/zero/junk/fpstest.as) 2005/04/17 22:04:24

上記リンクのスクリプトを使って、手元にある2台のPCで検証してみました。
<使い方>
実行すると、640×480×16のフルスクリーンに変更後グラフが二つ出ます。上段はes_sync後
statで拾ったタイマー値、下段はes_timer(timeGetTime)を使って拾ったタイマー値です。赤線上が16msで、
それより下が15ms以下、上が17ms以上となっています。
ESCキー(など)を押すと、上段のサンプルのうち16ms、17ms、その他がそれぞれ何フレームあったかを
解析、表示して終わります。
なぜタイマーを2通りの方法で拾うかというと、現在es_syncでは内部で作成されたタイマーイベント内で
実行ごとにカウントされるカウンタを参照してウェイトを取っていて、マルチメディアタイマーと
どちらが信用できるのかを調べるためです。

環境1:メインPC(M/B:GA-7DX、VGA:GeForce4Ti4400、OS:Windows2000)
FPSは63、16msと17msがだいたい95:5の割合で現れた。es_timerの方は320フレームに1回ほどの割合で
15msを返した。

環境2:サブPC(M/B:K7S3-N、VGA:RADEON、OS:WindowsXP)
FPSは61、16msと17msがだいたい40:60の割合で現れた。es_timerもほぼ同様。

OS依存の問題なのかなとは思いますが、これだけでははっきりしたことは言えないので
他の方の情報もいただけるとありがたいです。


[585]フレーム管理
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2005/04/17 07:26:43

自分も通りすがりで、詳しいことは全然知らないのですが、
Windowsのどんな環境でも一定に制御できる夢の様なタイマなんて
無いと思った方がよいのではないでしょうか?
待ち時間等を手動、もしくは自動で設定できるようにするなどの
処置が必要だと思いますよ。
あと、特別な理由が無い限り同期待ちの方が良いような気がします。


[584]通りすがりに、583へレス
Ricky
2005/04/17 07:11:33

普通に考えると1000/16=62.5ですから63fpsでいいんでないの?
一応実験(geforcefx5700)・・・あれ? 61になる。???


[583]fpsの件
そにっく
2005/04/16 22:56:52

以前ちょっと書き込みしたのですが、インテル845/855GMEチップセットやSiS630など
オンボードビデオ環境において、通常より若干早い(es_sync 16,1で、通常61FPSが63FPSになる等)が出るようなのですが、
このあたりの改善は可能でしょうか?


[582]Re:要望 - es_boxf
Sinagawa
2005/03/30 00:09:53

>といいますのも、オフスクリーンバッファの内容を消去したい場面があるのです。
>現在、私はこれを"buffer→boxf→es_buffer"と行っているのですが、es_boxfで
>直接オフスクリーンバッファに描画できればその方がいいと思って書かせていただきました。
たぶん実装可能だと思いますので、調べてみてできそうなら次のバージョンで対応します。


[581]要望 - es_boxf
hira
2005/03/29 00:23:41

どうもこんばんわ。命令の動作速度表の完成を楽しみにさせていただいています。

さて要望なのですが、es_boxf命令でオフスクリーンバッファにも描画できるように
なりませんでしょうか。

といいますのも、オフスクリーンバッファの内容を消去したい場面があるのです。
現在、私はこれを"buffer→boxf→es_buffer"と行っているのですが、es_boxfで
直接オフスクリーンバッファに描画できればその方がいいと思って書かせていただきました。

それでは、よろしくお願いします。


[580]Re:[568]
MASA77's
2005/03/22 22:31:59

バージョンUP
お疲れ様です。 m−−m
さっそくHSPDXFIX0.17を試したところ
es_exboxfの画面端1ドットの件は
すっかり解消されましたので報告いたします。
ありがとうございました。 mう_うm


[579]Re:[578]
Yukashi
2005/03/20 18:41:12

> わかりました。それではes_drawとes_move(こっちは必要ないかもしれませんが)
> にアニメーションを止めるフラグを用意しておきます。
 ありがとうございます。es_moveは元の命令からは意図外の用途で
使うことになりそうですが、表現の可能性が広がりとてもうれしいです。


[578](無題)
Sinagawa
2005/03/19 12:14:44

>例えばシューティングゲームで、自機の管理をHSPの変数、
>敵の弾の管理をhspdxfixのスプライトで行った場合、
>以下のような感じで『時間の流れを遅くし、敵の弾の
>速度を半減させる能力』みたいな表現が可能に
>なるのでは、と思った次第です。

>このとき、弾の減速フラグのTRUE、FALSEに関わらずアニメーションが
>進行してしまうので、動作にずれが生じてしまうと感じました。
わかりました。それではes_drawとes_move(こっちは必要ないかもしれませんが)にアニメーションを
止めるフラグを用意しておきます。


[577]Re[2]:es_move と es_drawについて
Yukashi
2005/03/18 21:51:21

 返信ありがとうございます。

> es_move命令はフレームスキップを想定して作られていますので、
> アニメーションがコマ飛びになるのは仕様です。

> アニメーションにも同様の処理を行うようなオプションをつけた方がよいでしょうか。

例えばシューティングゲームで、自機の管理をHSPの変数、
敵の弾の管理をhspdxfixのスプライトで行った場合、
以下のような感じで『時間の流れを遅くし、敵の弾の
速度を半減させる能力』みたいな表現が可能に
なるのでは、と思った次第です。

*main
  if (弾の減速フラグ = FALSE)|(counter&1 = 0) {
    ; 弾の減速フラグがTRUEのときは、2回に1回しかスプライトは動作しない
    es_move
  }
  gosub *自機の処理

 es_draw ,,1
  es_sync
  counter++
  goto *main

このとき、弾の減速フラグのTRUE、FALSEに関わらずアニメーションが
進行してしまうので、動作にずれが生じてしまうと感じました。
そんなわけで、「es_draw ,,1 のときは、draw時にアニメーション
カウンタを更新しない」処理が出来るととてもありがたいです。
余裕がありましたら検討をお願いいたします。


[576]Re:es_move と es_drawについて
Sinagawa
2005/03/17 11:36:02

とりあえず作業完了。また通常通り活動を行います。

>しかし、es_move とes_draw ,,1 でスプライトを動かし、描画
>した場合、アニメーションの速度が倍になってしまいます。
>おそらくes_move、es_drawともにアニメーションのカウンタを
>更新しているのだと思いますが、これは仕様なのでしょうか。
es_move命令はフレームスキップを想定して作られていますので、アニメーションがコマ飛びになるのは
仕様です。一方で点滅がes_moveの影響を受けないのは奇数フレームスキップしたときに点滅が止まるのを
個人的に嫌ったため、そのようになっています。
アニメーションにも同様の処理を行うようなオプションをつけた方がよいでしょうか。

>また、es_move のp1に2以上を指定したときに、私の環境では
>プログラムが異常終了してしまったので報告いたします。
なぜか確認できませんでしたがだいたいの見当はついたので修正しました。
次のバージョンをお待ちください。


[575]質問:es_move と es_drawについて
Yukashi
2005/03/16 01:05:31

 お世話になっています。
es_moveとes_drawのことで質問(兼要望?)させていただきます。

まず、es_patでキャラクタパタンを登録するときに、p4で
アニメーションのための表示フレーム数を指定することが
できます。

そして、es_draw ,,0 でスプライトを動かす場合、
アニメーションのフレーム数はes_drawの呼び出された回数
で数えられています。

しかし、es_move とes_draw ,,1 でスプライトを動かし、描画
した場合、アニメーションの速度が倍になってしまいます。
おそらくes_move、es_drawともにアニメーションのカウンタを
更新しているのだと思いますが、これは仕様なのでしょうか。

点滅における「drawごとに出る、消えるを繰り返す」と違って、
アニメーションは「4回動くのに連動してアニメパタンが一周まわる」
というような使い方をすることが多いと思うので、
できればアニメーションはes_move(と、es_draw ,,0)に連動するのが
よいと思うのですが、ご検討いただけないでしょうか。
# es_patの表示フレーム数を調節することで対応はできるのですが、
# 今のところカウンタ値が7bitでしか指定できないので厳しいです。

また、es_move のp1に2以上を指定したときに、私の環境では
プログラムが異常終了してしまったので報告いたします。
# es_move 1 : es_move 1
# と繰り返し書けば大丈夫・・・。(^^;;


[574]Re:es_aim
Sinagawa
2005/03/14 00:09:20

>es_aimを使った瞬間にエラーで終了するということがありました。
すでに報告を頂いており、修正済ですので次のバージョンをお待ち下さい。


[573]画面端の欠けについて
K-s
2005/03/13 23:37:54

たしか私も同じような現象に遭遇したことがあります(ver16です)。
そのときはメインループ前に「es_cls」とか「es_sync」とか「gsel 0」とかいれたら直ってたような気がします。

もし何か参考になればと思います。


[572]es_aim
TKS
2005/03/13 08:48:33

すいません、もう一つ報告します(汗)
es_aimを使った瞬間にエラーで終了するということがありました。

とりあえずバグなのか環境依存かわからないので報告した次第です。


[571]Re:オーバレイ->オフスクリーンのブロック転送制限
Sinagawa
2005/03/12 00:43:50

>オーバレイからオフスクリーンに対しブロック転送しようとしているのですが、
>ハード依存しているらしく、成功したり失敗したりします。失敗の時の戻り値は、
>「サポート外『DDERR_UNSUPPORTED(0x80004001)』」です。
オーバーレイ関係の描画はHELが存在しないため、もしオーバーレイからオフスクリーンへの
転送にハードウェアのサポートが必要な場合、環境によってはそのようなエラーが出るのでは
ないかと思うのですが、自分はオーバーレイを使ったことがなくてはっきりとしたことはわかりませんので、
ここで聞くよりBBX(http://bbx.hp.infoseek.co.jp/)などに行った方が的確な回答が得られると思います。


[570]re:オーバレイ->オフスクリーンのブロック転送制限
hira
2005/03/10 21:03:32

すみません、肝心のブロック転送の関数について書き忘れていました。
基本的に"Blt"で確認していますが、BltFastでも同様に失敗します。

hRet = m_pDDOffscrn->Blt ( NULL, m_pDDSOverlay, NULL, DDBLT_WAIT, NULL ) ;

src, dstの RECTはいろいろ試しております。


[569]オーバレイ->オフスクリーンのブロック転送制限
hira
2005/03/10 20:24:23

初めて投稿いたします。hiraと申します。よろしくお願いいたします。
いきなりの質問で大変恐縮ですが、もしわかる方がいらっしゃったらコメント頂けるとありがたいです。
オーバレイからオフスクリーンに対しブロック転送しようとしているのですが、ハード依存しているらしく、成功したり失敗したりします。失敗の時の戻り値は、「サポート外『DDERR_UNSUPPORTED(0x80004001)』」です。
境界・サイズはいろいろ試していますしが、これが原因ではない気がしています。
ブロック転送で今のところサポート外で失敗するサーフェスの組み合わせはオーバレイからオフスクリーンのみです。
もし何か情報をお持ちの方がいらっしゃれば、お教えいただけると大変助かります。
よろしくお願いいたします。


[568]es_exboxf
MASA77's
2005/03/08 02:07:18

>一つ思い当たる節があったので次のバージョンで
>どうなるか確認をお願いします。

了解しました。*_*>
お世話様です。 m_ _m


[567]奇妙だ
TKS
2005/03/08 01:02:35

本当に表示段階で減色されているような感じがしてきました。
  es_getbuf -1
  bmpsave "capture.bmp"
とやって、現在表示中のはずのその画像と実際に表示されているものとでは色数が違っていました。
capture.bmpのほうが正常といった感じです。

ちなみに es_getbuf 0 の場合は正常な色だったので転送はおそらく大丈夫だと思いました。


[566]レス
Sinagawa
2005/03/07 15:24:53

>TKSさん
バッファも32bitで初期化されているようなので本来なら問題ないはずなので、バッファに
転送するか表示される段階で減色されているのだと思います。
確実に確認する方法がないのですが、一応透明色を自動的に検出するようにして、元画像とRGB値が
違っていれば転送段階で、合っていれば表示段階で減色されていることになります。

>MASA77'sさん
>es_exboxfを使って画面のフェイドインを作ったのですが
>画面の右端と画面下に1ドットぐらいの線が出るのですが
>これはDirect3Dの仕様なのでしょうか?
es_exboxf 0,0,639,479,$000000,0,0,0,ESB_ALPHA,128で確認しましたが、こちらでは
黒半透明の四角が画面いっぱいに覆ったので、ちょっとわかりません。
ただ、一つ思い当たる節があったので次のバージョンでどうなるか確認をお願いします。


[565]Re:反転コピー
MASA77's
2005/03/06 22:04:41

>ダイアログに「6」と出ない場合、ハードウェアは
>DirectDraw反転をサポートしていない

自分の環境下でも6がでなくて0でした
なので、反転したバッファを用意する方法で行こうとおもいます。
忙しいなか検討していただいてありがとうございました。 m_ _m


それから別件ですが
es_exboxfを使って画面のフェイドインを作ったのですが
画面の右端と画面下に1ドットぐらいの線が出るのですが
これはDirect3Dの仕様なのでしょうか?
ブレンドファクターはESB_ALPHAです
画面のキャプチャーです↓
http://www.geocities.jp/ahokamas2004/es_exboxf.jpg
既出でしたらすみません・・・


[564]再度報告っ。
TKS
2005/03/06 20:49:30

変化ありませんが、とりあえず下の通りでした。(32bitフルスクリーンで前回と同じところは省略しました。)

バッファNo.0をDirectDrawバッファとしてVRAMに確保
32bit/Pixelで初期化
Rビットマスクは0x00ff0000
Gビットマスクは0x0000ff00
Bビットマスクは0x000000ff
Aビットマスクは0000000000
Zビットマスクは0x0000ff00
バッファNo.1をDirect3D用バッファとしてVRAMに確保
32bit/Pixelで初期化
Rビットマスクは0x00ff0000
Gビットマスクは0x0000ff00
Bビットマスクは0x000000ff
Aビットマスクは0000000000
Zビットマスクは0x0000ff00

16bitや他のモードでも変化は見られませんでした。


[563]訂正
Sinagawa
2005/03/06 16:04:18

;ダイアログに「6」と出ない場合、ハードウェアはDirectDraw反転をサポートしていない
#define"hspdxfix.as"
es_ini
es_screen wx,wy,8,2,0,0
es_caps caps,4,0,0
caps=caps&6
dialog ""+caps
es_bye
end


[562]レス
Sinagawa
2005/03/06 16:01:41

>MASA77'sさん
十分な検証ができていませんが、自分の環境下ではDirectDrawによる反転コピーをハードウェアが
サポートしておらず、パフォーマンスに問題があるため実装を取りやめることにします。
すみませんが、反転したバッファを用意するかDirect3Dで反転表示を行ってください。

;ダイアログに「6」と出ない場合、ハードウェアはDirectDraw反転をサポートしていない
es_screen wx,wy,8,2,0,0
es_caps caps,4,0,0
caps=caps&6
dialog ""+caps
es_bye
end

>TKSさん
32bitモードでバッファを作成したときのログもお願いできますでしょうか。
もしかしたらバッファを作成したときだけ減色されるようなビットマスクになっているという
可能性もありますので。


[561]短い文字列、かなぁ?
TKS
2005/03/05 18:25:56

カラーマッチングが正常化されていて驚いたTKSです。
前に言われていたログの報告をします。(32bitフルスクリーンです)

--- HSPDXFIX LOG ---
--------------------
HSPDXFIX実行開始
DirectDrawオブジェクトを作成
協調レベルを設定
解像度を変更
バッファを作成
32bit/Pixelで初期化
Rビットマスクは0x00ff0000
Gビットマスクは0x0000ff00
Bビットマスクは0x000000ff
Aビットマスクは0000000000
Zビットマスクは0x0000ff00
Direct3DデバイスをHALで初期化
ビューポートを設定
Direct3Dの初期化完了
角度テーブル・スプライト・Zソート用メモリを解放
解像度を復元
フロントバッファを解放
全バッファを解放
DirectDrawオブジェクトを解放
Direct3Dオブジェクトを解放
Direct3Dデバイスを解放
HSPDXFIX実行終了
--------------------

余分かもしれませんが、
32bitウィンドウモードでは解像度の変更の違いだけでした。
16bitウィンドウモードで試すと32bit/Pixelで初期化されていました。
16bitフルスクリーンモードで試したところ、

16bit/Pixelで初期化
Rビットマスクは0x0000f800
Gビットマスクは0x000007e0
Bビットマスクは0x0000001f
Aビットマスクは0000000000
Zビットマスクは0x000007e0

となりました。
ええと、32bitフルスクリーンで色数がおかしい現象はまだ続いていました。はい。


[560]追加サポート期待してますmu_um
MASA77's
2005/03/03 18:13:29

ありがとうございます!
反転機能があると、とても助かります!
期待してまってますっっ


[559]Re:DXFIXの通常コピーで画像反転
Sinagawa
2005/03/03 12:01:05

>[555]まつさんの:スプライトの反転
>とは違いDXFIXの通常コピーで画像反転(DirectDraw)で
>画像の反転処理をしたいのですがやり方がわからないので
>教えていただけるとありがたいです。
DirectDrawは反転コピーをサポートしているのですが、現在HSPDXFIXではそれを扱う方法が
ありません。なので、es_copyとes_zoomにパラメータを追加する形でサポートしようと思います。


[558]DXFIXの通常コピーで画像反転
MASA77's
2005/03/02 20:19:52

どうも、前回はお騒がせいたしました。
[555]まつさんの:スプライトの反転
とは違いDXFIXの通常コピーで画像反転(DirectDraw)で
画像の反転処理をしたいのですがやり方がわからないので
教えていただけるとありがたいです。

es_excopyで反転はできるようですが
es_zoomでの負の数指定反転は試しましたがダメでした。

使う画像が長方形でDirect3Dのテクスチャーが使えない為
通常コピーで画像反転したいなぁと考えております。
(今はキャラが左右反転する分二倍のバッファがちょと無駄ぽいと感じてます)





[557]スクリプトで補うのが本筋でしょうね
たかのん
2005/03/01 23:19:51

>Shinagawaさん
駄目もとで言ってみたー状態でしたので、
難しいのであれば中心からの距離で判定するようにします。
無理言ってすいませんでした。
ちょいと安直過ぎました。

>Rickyさん
古きよき時代というか、MSXとかPC88とかFM-7とかX1とか
そういう黎明期の頃からのPCユーザーです(汗)
ご指南頂いたような、ある意味力技的な方法は頭にありつつも、
命令一発でできちゃうんだったらラクだよなーという安易な発想でした。
むかーしからプログラムには触れている割には深く突っ込んで
勉強したわけではない文系人間なのでラクばかり考えてしまいます。


[556]Re:[555]スプライトの反転
Yukashi
2005/03/01 22:10:41

> 上下左右反転表示
今ある命令の組み合わせでも実現出来ると思います。

まず、es_d3doptのp1を1にして、ポリゴンの裏面を描画するように設定します。
スクリーンやバッファの設定は、D3Dを扱えるようにしておきます(es_buffer
を使うときにp5を1にするなど)。そして、登録したスプライトに対して、
es_effectのp4(x軸)、またはp5(y軸)の回転角度を、最大回転角の半分に
指定します。
p4を最大回転角の半分に指定すれば上下反転、
p5を最大回転角の半分に指定すれば左右反転になるはずです。


[555]要望:スプライトの反転
まつ
2005/03/01 17:06:13

自分はACTゲーム等ののキャラパターン登録する時に
右向きと左向き画像をそれぞれ用意しているのですが、
これだと容量食うので、スプライトを上下左右反転表示してくれるような
命令って作る事はできないのでしょうか?
ご検討をよろしくお願いします。


[554]駄文
Ricky
2005/03/01 06:56:06

[553]の続き。ってかタイトルに偽り無し。
円形のスプライト画像と聞くと縦STGのボムを思い浮かべるのは私だけだろうか?

この場合大きなスプライトのアニメーションで中心部から爆発が広がっていくような
画像にして判定%もあわせて大きくしていく、というのが一番簡単な方法。
ただし大きすぎる物を長時間表示していると判定が雑なのがまるわかりで痛い。
またバッファを無駄に消費するというのも難点である。

だが[553]に書いた方法なら、各スプライトを中心から広がるように移動させる事で
細かいアニメ&判定を行い、持たせた判定の荒さも隠すことが出来る。
元となる画像も小さな物なので個別にアニメーションさせたとしても負担にならない。
何かの参考になれば。


[553]古き良き時代、スプライトは16x16ドットだった・・・
Ricky
2005/03/01 06:32:11

サイズ不定のスプライト作れて当たり前だから考えつかないのかもしれないけど、
円の判定ならその画像には判定を付けず(or中心付近のみ)あとは円の内側に
小さなスプライトを配置すればいいだけでは? 外周部に配置するスプライトを
回転させた物にしておけば円に近くなるからこれで十分では。
完全に円にするなら距離計算が一番簡単でしょう。


[552]補足
Sinagawa
2005/03/01 03:36:59

それほど難しくないのは楕円対点の時ですね。楕円対楕円は無理っぽい。

[551]角が気になるなら小さくすればいいじゃない
Sinagawa
2005/03/01 03:33:19

>たかのんさん
楕円の判定自体はそれほど難しくないのですが、Z回転されたら死ぬので申し訳ないですが実装できません。
限られた条件で判定を求める命令を作ればよいのですが、それを言い出すときりがなくなるので保留します。
これについて何かスマートな実装案があれば検討させていただきます。
個人的には、ある程度はスクリプトで賄っていただけるとありがたいのですが。

>イナダさん
es_aim実行時に落ちる件でしたら、#532にてO2Kさんより報告を受けて修正済ですので、
次のバージョンをお待ち下さい。


[550]こんばんは
イナダ
(http://yamagin.hp.infoseek.co.jp/kikaku.html) 2005/02/28 00:29:38

いつも、HSPDXありがたく使わせて頂いております。
HSPDXFIX_ver0.16できることが増えて、マニュアル見てるだけで嬉しくなってきます。

ところで、ウチの環境だけかもしれませんが
es_aimが 時々上手く動かない事があります。
(他の命令で代用できるので、それほど困らないのですが)
他の環境でも試してみてみますが・・・・。


[549]私もかなり古い人間ですが(苦笑)
たかのん
2005/02/27 22:26:06

> デカイ円キャラでも正方形

これを見てふと気づいたのですが、
長方形の場合円の判定って非常に難しいような気が。
(楕円形じゃないといけないですもんね・・・?)


[548]円判定
そにっく
2005/02/27 21:16:11

ああ失礼、普通の用法でしたね。
私は古い人間なでデカイ円キャラでも正方形でやってしまいそうなんで
もっと特殊な状況を想定してしまいました(笑。


[547]円の判定が欲しい理由
たかのん
2005/02/27 20:12:01

>円の判定ってどんなとき使うんでしょう?

もちろん画像上円の物体に対してです。
キャラクタが32x32程度の大きさであったり、
当たり判定そのものも小さい場合には問題ありませんが、
大きなキャラクタになると「本来当たってはいけない領域」が
角にできてしまうんです。

中心からの距離で判定すれば、必然的に円になりますけどね・・・。


[546]判定
そにっく
2005/02/27 18:34:27

横レス失礼します。
円の判定ってどんなとき使うんでしょう?
正方形で問題ないような…


[545]当たり判定
たかのん
2005/02/27 18:15:09

> キャラクタ単位になりますが当たり判定の情報を
> 書き換えることができるようになるので

あ、ならば是非実装して頂きたいことが。
「円の当たり判定」が選択できるようにならないでしょうか?
中心から何%の「四角形」だと不都合がある場合があるので・・・。


[544]レス
Sinagawa
2005/02/27 02:51:36

>透明色指定時の、" $RRGGBB ではなく $BBGGRR で指定しないと上手くいかない」
>という問題が解決されたかのように動作しています。
>更新履歴には記載がなかったようですが、このあたりは何か変わったのでしょうか。
「カラーマッチングの高速化並びに正常化」に含めたつもりだったんですが、実際にはカラーマッチング
ではなくてパラメータの渡し間違いにより起こっていたものなので、記載漏れといえば記載漏れです。

>そして今回は、1つ要望を書かせていただきます。
>それは、「スプライトのヒットチェック領域を、開始(左上)座標と領域サイズで
>指定したい」というものです。
現在キャラクタパターン用パラメータを直接書き換える命令の実装を予定しています。
この命令が実装されれば、スプライト単位ではなくてキャラクタ単位になりますが当たり判定の情報を
書き換えることができるようになるので、要望を満たすことができるのではないかと思います。

>あおぽんさん
添付されていたファイルは解凍したのですが、手違いでメールを消してしまって返信先がわからなくなって
しまったのでこちらで返答させていただきます。

動作確認を行ったところ、以下の問題を確認しました。
○font命令のパラメータに全角スペースがあるためにエラーが出ていた→スペースを削除(641行目、1604行目)
○スタートロール表示用バッファをクリアする際に色が指定されていなかったため、2回目のプレイで
 正しく表示されていなかった→boxfの前にcolor 0,0,0を追加(636行目)
○最初問題なく動作していたので気づきませんでしたが、snd命令でBGMを切り替えるときは
 その直前に「sndoff:await 0」、切り替え直後に「await 0」を入れた方が安全

これらを修正後、「*.txt」「*.bmp」「*.wav」「*.jpg」をパックして作成したexeファイルから
実行して確認したところ(HSPの仕様上「*.mid」はパックしていません)、問題なく動作しました。
ファイルの読み込みは一度しか行っていないようなのでそれによって問題は発生しないように思います。


[543]Re:>[541]hiraさんへ
hira
2005/02/26 04:07:07

> ヒットチェックは複数スプライトで大きさ、形、配置場所を組み合わせれば
> どうにでも出来ます。スプライトたくさん組み合わせて複雑な形のキャラを
> 作ったり場所毎に判定を変えたりって2Dでは基本テクだと思いますよ。

なるほど、そうですね。失礼いたしました。

私は2DのARPGの、1つのスプライトで表示したキャラクタの足元に当たり判定を
設けようとしていました。
このとき、「中心から XXX %」という設定方法を適用することができずに
仕方なく、スプライトを使用しない場合と全く同様に、直接、座標を見る方法で
当たり判定処理を組んでいました。
そうしているうちに、スプライトの足元に直接ヒットチェック領域を設定できたら
便利だなと思うようになってしまっていました。

Rickyさん、教えていただきありがとうございました。
それでは、失礼いたしました。


[542]>[541]hiraさんへ
Ricky
2005/02/26 02:45:20

横ヤリですみませんが・・・
ヒットチェックは複数スプライトで大きさ、形、配置場所を組み合わせれば
どうにでも出来ます。スプライトたくさん組み合わせて複雑な形のキャラを
作ったり場所毎に判定を変えたりって2Dでは基本テクだと思いますよ。
(いわゆる多間接キャラとか。デカいキャラの上に砲台たくさん置いたりとか)


[541]要望:ヒットチェック領域
hira
2005/02/26 00:23:01

HSPDXFIX_ver0.16のリリース、ご苦労さまです。
透明色指定時の、" $RRGGBB ではなく $BBGGRR で指定しないと上手くいかない」
という問題が解決されたかのように動作しています。
更新履歴には記載がなかったようですが、このあたりは何か変わったのでしょうか。

そして今回は、1つ要望を書かせていただきます。
それは、「スプライトのヒットチェック領域を、開始(左上)座標と領域サイズで
指定したい」というものです。
現在は、es_size命令に与える引数によって「スプライトの中心から XXX %」として
設定するほかありませんが、これに不便を感じています。
スプライト中の任意の短形範囲をヒットチェック領域に指定できれば、
非常に便利だと思います。

それでは、よろしくお願いいたします。


[540]エラーについて
&#130;あおぽん
2005/02/25 23:39:56

メールに添付しておくらせていただきました。
よろしくお願いします。


[539]申し訳ありません・・・
MASA77's
2005/02/25 07:06:43

いろいろ時間をかけてしらべたところ
実はメインに拡大描画する一時預かり用に作った
DirectDrawバッファのes_buffer記述に誤りがあり
それで強制終了していたことがわかりまして
(DirectDrawオンリー時なんで動いてたのか不思議)
直したところ、めちゃめちゃ動きました
もう、やりたかったこと100%実現です。

そこで、機能をサポート願いを取り下げます。
勝ってを言ってすみませんでした m_ _m


[538]レスを受けes_zoomで拡大でテスト
MASA77's
2005/02/25 03:50:23

レスありがとうございました mv_vm
早速言われた通りes_zoomでテストしてみました。
おっしゃる通りに画面のソフト感と速度もでてました。

しかしメインをDirectDrawで初期化しなければならないようで
オールDirectDrawで描画しないといけなくなり
(いまで使っていた別バッファでのDirectDrawとDirect3D兼用できません)
できれば、一部使っていた半透明や加算処理などのDirect3D描画も
使いたいのですが良い案はありませんでしょうか?




[537]レス
Sinagawa
2005/02/25 00:11:44

>MASA77'sさん
>フルスクリーン時のアンチエイリアスの質問をしましたが
>こと、アンチエイリアスにこだわっているわけではなく
>(作成しているゲームが320*240解像度で荒さが目立ち)
>画面をできるだけジャギを消しソフトにしたいということで、
>この間はアンチエイリアスという言葉で質問に至りました。
その用途でしたらDirectDraw用バッファにコピーしてes_zoomで拡大した方が高速になります。
Direct3Dバッファを描画元/描画先問わずDirectDraw描画に使うとハードウェアアクセラレーションが
利かないためにパフォーマンスが大幅に低下します。この場合、es_xferがHELで動いていることになります。
ちなみに、16bit以上でes_zoomを使うと自動的に補間がかかるようになりますが、逆に補間を切ることが
できません。

>で、本題なのですが
>フルスクリーン時に
>640*480解像度で初期化しても
>320*240解像度を自動拡大処理して
>(screen で自動拡大できるウインドーモードの時のように)
>なおかつ拡大時に線形補間(これもウインドーモードの時と同等)
>できるような、機能をサポートしていだだけないでしょうか?
実装に当たってワーク用バッファを1枚余分に作成しなければならない点については意見が分かれるのでは
ないかと思いますが、検討しておきます。

>Yukashiさん
報告ありがとうございます。では他の方から「0.16でうまく動かない/動かなくなった」旨の
報告がなければ背面描画はありで固定させていただきます。


[536]ver0.16
Yukashi
2005/02/24 23:39:42

バージョンアップお疲れさまです。
D3Dでの描画が高速になり、また、es_exputも実装していただき、
大変重宝しております。

es_d3doptのp1に1を指定したときに、ポリゴンの裏が正常に描画
されるようになりましたので報告いたします。ありがとうございました。


[535]フルスクリーン320*240を640*480で拡大&線形補間
MASA77's
2005/02/24 12:26:38

バージョンアップお疲れさまです。
大いに活用させていただいております。

さて[509]で
フルスクリーン時のアンチエイリアスの質問をしましたが
こと、アンチエイリアスにこだわっているわけではなく
(作成しているゲームが320*240解像度で荒さが目立ち)
画面をできるだけジャギを消しソフトにしたいということで、
この間はアンチエイリアスという言葉で質問に至りました。

解像度を640*480,16bitに初期化したスクリーンに
教えていただいたes_d3doptでテクスチャ補間をONにし
320*240の描画する画面を一時別バッファにコピーして
そのバッファからDirect3Dコピーで二倍に拡大
という手法で描画してみました
(やや裏技臭い方法ぽいと思いますが・・・)

*game_main

    es_cls
    gosub *draw
    gmode 0 : pos 0,0
    es_xfer back_screen_ID,-2,0,0,320,240
    gmode 0 : pos 0,0
    es_excopy back_screen_ID,0,0,320,240,640,480
    await 0
    es_sync 16
    goto *game_main

実験は見事に成功していい感じに320*240解像度がソフトに
描画されたのですが、やはり処理が重いようで
(es_xfer による転送のせいだとおもいますが)
FPSが30以上減少してしまいました。

自分のPCのビデオカードは4年前の古いものですが
320*240の解像度はそろそろなくなり最低線640*480になる
というような話を耳にしたので、できれば320*240解像度を640*480で
拡大描画するような感じで開発していったほうがいいのかな?
と疑問を感じています。(320*240まだ寿命はあるのかなぁ?)

で、本題なのですが
フルスクリーン時に
640*480解像度で初期化しても
320*240解像度を自動拡大処理して
(screen で自動拡大できるウインドーモードの時のように)
なおかつ拡大時に線形補間(これもウインドーモードの時と同等)
できるような、機能をサポートしていだだけないでしょうか?

とても個人的で虫の良い話ですが検討していただけると幸いです
↓ちなみにテスト使用前使用後です
http://www.geocities.jp/ahokamas2004/before.jpg
http://www.geocities.jp/ahokamas2004/after.jpg

長文失礼しました m_ _m


[534]レス
Sinagawa
2005/02/23 23:48:11

#define ESI_PRIORITY 36
↑忘れ物。

>ゆうきさん、O2Kさん
バグ報告ありがとうございます。いずれも確認および修正しました。

>あおぽんさん
ただ単に読み込むだけなら異常動作は起こさないはずです。
スクリプトとファイル一式があれば原因が特定しやすくなるのですが。


[533]ファイル操作
あおぽん
2005/02/23 22:08:45

note系命令を使うとばぐりますか?
テキストファイルを読み込んで表示しています。
もし無理なら、代用法をご教示ください


[532]お疲れのところお申し訳ないですが
O2K
2005/02/23 14:38:58

更新お疲れ様でした

早速使わせていただいたのですが、
いくつか気づいたところがありましたので
報告させていただきます

 es_aim命令が動作しません
 使用した瞬間にプログラムが落ちます

 パレットモード使用時、es_cls命令の第一引数のみしか反映されません
 例えばes_cls 255,255,255とすると画面が赤でクリアされます。

更新したてでお疲れのこととは思いますが、検討のほどよろしくお願いします。


[531]Ver0.16 楽しみにしてました。
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2005/02/23 02:53:22

更新おつかれさまです。
3Dの速度がぶっとんでます^^

質問があります。
0,0地点に640*480の画像(Ddraw)を描画しても右と下の1pxに描画されません。
1,1地点に指定しても同じ結果となり、2,2地点に指定すると全く描画されません。
(はみ出したらダメってのはDdrawの仕様としてありますが。)
もしかしたら何かこちらの間違いかもしれませんが、一応ページにまとめました。

http://ww22.tiki.ne.jp/~y-shirakawa/rep/


[530]バージョンアップお疲れさまです
そにっく
2005/02/23 01:48:44

バージョンアップお疲れさまです
楽しみにしてました。使わせていただきます〜。


[529](゚∀゚)ノ
2005/02/19 19:31:18

>Sinagawaさん
次回更新楽しみにしてます(゚∀゚)


[528]れすれす
あおぽん
2005/02/19 12:54:13

>あおぽんさん
それだけではいまいち分かりませんが、途中でディレクトリ操作したりしてないでしょうか。

テキストファイルを読み出しています。
だめでしょうか?
直してみます


[527]レス
Sinagawa
2005/02/18 14:47:18

>あおぽんさん
それだけではいまいち分かりませんが、途中でディレクトリ操作したりしてないでしょうか。

>Kさん、ASさん
回転処理はVer 0.15beta5で直したつもりだったんですが、その後の調べでまだ間違っていたことが
分かっていて、すでに修正済みですので次のバージョンを待ってください。


[526]>ASさん
2005/02/18 10:33:03

なるほど そうなんですか。
ではその手で
やらせていただきます


[525]訂正
AS
2005/02/17 20:35:04

うお、なんか変なこと書いてしまった・・・。

>楕円が回転しているということは、X軸で回転→Y軸回転のステップになってるためですね。
>Y軸回転→X軸回転ならいいのですが…
回転軸が中心で、Z軸回転→X軸回転ですね・・・。



[524]Kさんへ
AS
2005/02/17 16:20:55

あー…それは内部実装のせいでしょうねぇ…

楕円が回転しているということは、X軸で回転→Y軸回転のステップになってるためですね。
Y軸回転→X軸回転ならいいのですが…

対応策は、回転後の画像をスプライトに反映させる必要があると思います。
なので、
1.es_excopyで別のバッファにZ軸回転させて描写
2.その回転後の画像をスプライトに貼り付ける
ただ、回転が絡んでいるのでサイズが一番長い対角線の長さの正方形となりますが…

たぶんこれ以外の方法はできないかなぁって思います。


[523]レス
2005/02/17 15:39:05

ASさん>
そうしてもやはり同じように 楕円が回転してしまいます。


[522]Re:スプライトの回転について
AS
2005/02/17 14:38:32

回転軸を間違っています。
Z軸回転でなく、Y軸回転です。
よって、es_effect 1,,,10,p6 です。


[521]スプライトの回転について
2005/02/17 03:27:18

どうもたびたびすみません。
スプライトをナナメから見た感じで回転させたく
es_effect 1,,,10,,p6
とし、p6に入れる変数に1フレームごとに1足していったのですが
↓のようになってしまいました。
http://nekomamire.gozaru.jp/gif.html
私の想定する回転を実現するにはどのような工夫をすればいいでしょうか?


[520]レス
Yukashi
2005/02/16 21:58:55

 es_put-d3d の件でのご検討ありがとうございます。
[512]の投稿で誤字があり、誤解を与える表現になっていて
申し訳ありません。「es_put命令を使う機能が〜」ではなく
「es_put命令を使う機会が〜」でした。m(_ _)m


[519]環境依存
あおぽん
2005/02/16 18:30:04

環境依存性について。
一回目のゲームプレイはうまく言っても、2度目から
・MIDIの再生不可によるフリーズ
・テキストファイルが読み込めない
・画像が読み込めない
・画面が真っ白になる
など、PCによって別々のバグが生じます。
(自分のパソコンでは何もバグリマせん)
なぜでしょうか>


[518]レス
TKS
2005/02/13 19:40:21

了解です。
HP持ってないんでファイルを送る場合はメールになりますのでご了承くださいね。
もし短い文字列だったら掲示板で直に書くと思います。


[517]Re:謝
Sinagawa
2005/02/13 12:22:35

>自分が書いていた状況は32bitフルスクリーンモードで、
>オフスクリーンバッファを使うes_copy等の命令が減色されていて、
>es_cls等はそのまま32bitカラーが使えたようでした。
少なくともこちらでは32bitモード時に16bitカラーのバッファを作成することはなく、
前にも書いたとおり問題は発生していないので原因は分かりません。
次のバージョンをリリースしたときにその関係のログを出力するようにしますので、
一度それを見せていただけますでしょうか。

>もう一度確認したんですが、
>  es_cls 255,0,0
>  color 255,0,0
>  es_boxf 0,0,100,100
>このようにやって、赤い画面に青い矩形が描画されました。
>フルスクリーンモードでもウィンドウモードでも変わりありませんでした。 
すみません、Direct3D描画が有効になっているとビューポートの消去が優先されるので
正しい色で画面が消去されることを忘れていました。


[516]レス便乗 m_ _m
MASA77's
2005/02/12 22:12:18

解説ありがとうございました。
いろいろ試してみます。
あと便乗質問ならび便乗レス失礼しました。m_ _m


[515]レス
2005/02/12 18:47:28

>Sinagawaさん
なるほどそうなんですか。
実装をまったり気長に待たせていただきます(゚∀゚)ノ


[514]
TKS
2005/02/12 18:32:54

すみません、色々と勘違いしていた点がありましたので訂正します(汗)

自分が書いていた状況は32bitフルスクリーンモードで、
オフスクリーンバッファを使うes_copy等の命令が減色されていて、
es_cls等はそのまま32bitカラーが使えたようでした。
だから「es_clsなどの色が違う。」だったら語弊があるんじゃないかと思って書き込みました。

そして、レスの内容が32bitウィンドウモードだったということに気付いたので、
とりあえずウィンドウモードでやってみたところ直りました。
(ていうか気付くの遅くてゴメンナサイ。)

多分、パソコンを変えたりしないとフルスクリーンで32bitカラーはでないですよね…?

>あと、es_clsは内部でes_boxfを呼び出しているのでその場合正しい色は出ないはずですが。
もう一度確認したんですが、
  es_cls 255,0,0
  color 255,0,0
  es_boxf 0,0,100,100
このようにやって、赤い画面に青い矩形が描画されました。
フルスクリーンモードでもウィンドウモードでも変わりありませんでした。


[513]レス
Sinagawa
2005/02/12 03:27:58

ログが流れ出したのでとりあえず500まで1ファイル化。

>Kさん
一応実装してみましたが思ったように速度が出ない(昔やったときはうまくいっていた)ので
正式対応は当分先になります。

>MASA77'sさん
アンチエイリアス、というかまあこの場合は線形補間ですがそれは置いておくとして、
DirectDraw描画の場合は16bitモード以上でes_zoom命令を実行(1ドット以上拡大縮小する必要あり)、
Direct3D描画の場合はes_d3dopt命令の第2パラメータでテクスチャ補間をONにすることで可能です。
もし本当のアンチエイリアスが掛けたいのであれば、αチャネルを操作するしかないのですが、
残念ながら現行のHSPDXFIXではサポートしていません(今後サポートする予定)。

>TKSさん
>es_fmesやes_clsの色は指定通りにできるのですが、
>es_boxfの色の指定が(B,G,R)になっていました。
既知問題の項に「32bitウィンドウモードで〜」と書いてありますが、実際にはカラーマッチングが
正確に行われていないのでピクセルフォーマットの並びが(R,G,B)でない環境などでは32bitウィンドウモード
に限らず同様の症状が起こります。
あと、es_clsは内部でes_boxfを呼び出しているのでその場合正しい色は出ないはずですが。

>「オフスクリーンバッファを使う描画命令だとハイカラー以上出ない」みたいです。
とりあえず256階調のグラデーションを(1)es_copyで表示、(2)es_xferで別バッファにコピーしてからそれを
es_copyで表示するサンプルを作って確認してみましたが、どちらも問題なく表示されていました。
ウィンドウモードではes_screenの設定よりもデスクトップの設定の方が優先されるため、デスクトップが
ハイカラーになっていると色数が制限されますがどうでしょうか。

>あおぽんさん
「repeat〜メインルーチン〜loop」を「*main〜メインルーチン〜goto *main」の代わりとして使用し、
その中でes_syncの後に「await 0」を入れているのであれば速度低下は起こりません。
何でもないループの中でウェイトを入れている場合は無駄な処理が増えるという意味で多少は
遅くなるでしょう。

>Yukashiさん
es_putは内部処理でスプライト情報を参照している関係でDirect3D描画への対応を後回しにしていましたが、
新しい命令の追加という形で近いうちに実装しようと思います。
キャラクタ情報の取得も、できれば便利かなと思うので検討しておきます。


[512]es_exput?
Yukashi
2005/02/11 22:00:10

 hspdxfixを使用させていただいているYukashiと申します。
描画にes_put命令を使う機能が多いのですが、この命令では
d3d効果を使用した描画ができません。es_excopy命令を
使用すればd3d効果を使用した描画が可能ですが、クリッピング
範囲をスプライトとそろえるためにも、es_putと同じような
タイプの命令でd3d効果が実現できたらと思っております。

というわけで、
・キャラクタパタン指定で、d3d効果を使用した描画が出来る命令
・上の命令使用時の、d3d効果を指定する命令
の実装を検討していただければと思います。

もしくは、
登録されているキャラクタパタン番号をインデックスとして、
そのパタンのオフスクリーンバッファ、座標、サイズが引ける
ような命令があれば、es_excopyを使用して、欲しい機能を実現
するモジュールができるので、そのような命令を検討して
いただけるのもうれしいです。

お時間がありましたら検討をよろしくお願いいたします。


[511]await
あおぽん
2005/02/11 17:53:14

repeat〜loop内に
await 0と入れても遅くなりますか?


[510]
TKS
2005/02/11 09:51:15

HSPDXFIXを使わせてもらっていますTKSです。

es_fmesやes_clsの色は指定通りにできるのですが、
es_boxfの色の指定が(B,G,R)になっていました。
例えば
  color 255,0,0
  es_boxf 10,10,110,110 
とすると、青い矩形が描画されました。

あと問題を増やしておいてなんですが、
「32bitウィンドウモード時、es_clsなどの色が違う。」のことですが、
色々と命令を使って実験したんですが、
「オフスクリーンバッファを使う描画命令だとハイカラー以上出ない」みたいです。
なんか語弊がありそうな気がするんで直していただければ嬉しく思います。

ああ、別のパソコンでは上手く色が出るのでちょいと悲しいですね。


[509]フルスクリーン時にアンチエアリス
MASA77's
2005/02/10 18:09:09

HSPDXFIXのお世話になっております
MASA77'sと申します
初投稿ながら以後お見知りおきをっm−−m

Kさん失礼します
ヨコヤリ質問ですみませんが、
Kさんの質問とは逆で
フルスクリーン時にアンチエアリスをかけたり
またはスムージングのような効果ををかけたいのですが
そのよなことは出来ますでしょうか?
また、もし今後導入予定がありましたらよろしくお願いいたします m−−m


[508]やってみました
2005/02/10 02:01:24

バッチリ拡大されて良い感じです。
ところで拡大するとアンチエイエイアスがかかってぼやけるのですが
アンチエイリアスをかけずにそのまま拡大することは出来ないでしょうか?


[507]>506
2005/02/10 01:44:33

レスありがとうございます。
さっそく実用させてもらいます(゜∀゜)ノ


[506]レス
Sinagawa
2005/02/09 22:41:53

>ところで、Direct3Dを使わない場合限定で、パフォーマンス的に有利なのは
>古いバージョン(0.14等d3d無しの物)と最新ではどちらでしょうか?
DirectDraw関係はほとんど内部処理が変わっていないため、どのバージョンを使っても
処理速度は変わりありません。

>es_blink p1,p2,p3
>のp2はマニュアルには点滅終了後の動作と書いていますが
>そこに何を入れるとどういう動作ができるのでしょうか?
マニュアル後半の命令リファレンスやワンキーヘルプに書いてありますが、

点滅フラグ=1 : 点滅無し、カウントが0になったらスプライトを消滅させる
点滅フラグ=2 : 点滅あり、カウントが0になったら点滅をやめる
点滅フラグ=3 : 点滅あり、カウントが0になったらスプライトを消滅させる

という風になっています。

>それと希望なんですが、320,240のゲームとかでウィンドウモードにすると
>画面が二倍の大きさに拡大したりしますよね。
>ああいう感じにする機能はつけないのでしょうか。
ウィンドウモードでは自動的にウィンドウサイズにあわせて拡大・縮小表示するように
なっていますので、es_screenを実行後screen命令でウィンドウサイズを変更すればよいです。


[505]es_blink について
2005/02/09 19:19:32

es_blink p1,p2,p3
のp2はマニュアルには点滅終了後の動作と書いていますが
そこに何を入れるとどういう動作ができるのでしょうか?

それと希望なんですが、320,240のゲームとかでウィンドウモードにすると
画面が二倍の大きさに拡大したりしますよね。
ああいう感じにする機能はつけないのでしょうか。
画像を二倍にしてやるとスプライトの自動移動処理すると1ドット移動するので
上手く行かなくて困り物です。


[504]503へレス
Ricky
2005/02/09 08:32:42

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

>Ver 0.14beta4よりes_window命令はスプライトをクリッピングするだけに
>動作変更していますので、
了解しました、これにあわせて仕様変更してみます。

>es_fillの描画範囲が1ドット大きく取られていました。
>次のバージョンで直しておきます。
よろしくお願いします。

ところで、Direct3Dを使わない場合限定で、パフォーマンス的に有利なのは
古いバージョン(0.14等d3d無しの物)と最新ではどちらでしょうか?
es_boxfが高速化されるとか書かれているみたいなので既にそれが答えなのかも
しれませんが・・・


[503]レス
Sinagawa
2005/02/08 22:40:05

>たとえば0.14ではes_window 140,0,360,480の状態で
>es_set spriteno,0,128,charnoとすると
>x=140,y=128 の画面座標にスプライトが表示されていたものが0.15以降では
>x=0,y=128の座標に表示されてしまいます。このときスプライトの見える範囲は
>指定どうりに(140,0)-(499,479)になっています。
Ver 0.14beta4よりes_window命令はスプライトをクリッピングするだけに動作変更していますので、
それで問題ありません。

もう1つ気が付いたことを。0.15beta6で、

>GMODE 1,360,480
>ES_FILL 140,0,217
>
>とやると処理されません。GMODE 1,359,479 だと動作します
es_fillの描画範囲が1ドット大きく取られていました。
次のバージョンで直しておきます。


[502]ES_FILLの範囲について
Ricky
2005/02/08 09:49:41

もう1つ気が付いたことを。0.15beta6で、

GMODE 1,360,480
ES_FILL 140,0,217

とやると処理されません。GMODE 1,359,479 だと動作します
今まで(0.14使用。0.15も問題なし)は動作してたのでたぶん[490]関係で書いて
あるものと同じ現象だと思うのですが・・・なんか意味が違う気がするし。

さきほどの座標を展開すれば、(140,0)-(499,479)だし、
GMODE 1,359,479だと(140,0)-(498,478)になり範囲の下と右に1ドット幅だけ
塗られない部分があるはずなのにそうはなっていないのです。
(0.14でGMODE 1,359,479とやると塗られない場所が1ドット幅出来ます)
・・・書いてて自分でもわけわからんくなってきた。意味伝わるかな?


[501]ES_WINDOWの基点
Ricky
2005/02/08 07:26:30

いままで0.14を使っていたのですが、一部新機能が欲しくなったので0.15beta6を
導入してみましたがes_windowの基点が機能していないっぽいです。
たとえば0.14ではes_window 140,0,360,480の状態で
es_set spriteno,0,128,charnoとすると
x=140,y=128 の画面座標にスプライトが表示されていたものが0.15以降では
x=0,y=128の座標に表示されてしまいます。このときスプライトの見える範囲は
指定どうりに(140,0)-(499,479)になっています。
これは仕様でしょうか?

0.14, 0.15, 0.15beta6とマニュアルを眺めてみましたが関係しそうな内容は
書かれていなかったので書き込みしました。(見落としがあればごめんなさい)


[500]レス
Sinagawa
2005/02/08 00:28:17

>あおぽんさん
考えられる原因としては突然タイマー精度が落ちるか、あるいは気づかないうちに無駄な処理が
大量に実行されているかじゃないかと思うのですが、ちょっとよく分からないです。

>たかのんさん
現状ですとes_boxfは画面モードに色を合わせるために行われる、一般に劇遅といわれるVRAMへの
読み込みに時間を取られるのですが、es_fillだとそれが無くなるため確実に速くなります。


[499]es_fillはどうなんでしょう?
たかのん
2005/02/07 23:58:23

そういうことであれば大人しく0.16が出るまで待ちますか・・・。
ちなみにマニュアルを改めて読んだらes_fillは速度的に優位とありましたが
実際のところはどうなんでしょうか?


[498]FPSについて
あおぽん
2005/02/07 22:25:24

大体30程度を保っているのが、
突如14に落ち込んで、処理が遅くなります。



[497]es_cls
Sinagawa
2005/02/07 01:09:54

ベンチマークを取ってみたところ、フルスクリーンでは大差ないですがウィンドウモードだと
それだけで1〜2ms時間を取られてしまうようです。
なので、es_clsは初期化後のサーフェスクリアに2回実行して、後は状況に応じて使い分けるのが
よいと思います。
ただ、次のバージョンではes_boxf共々高速化されるので特に気にしなくてもよくなるはずです。
#参考までに、Direct3Dスプライト描画の見直しを含め約2倍(当社比)高速に動作しています。


[496]ガーン、es_clsって遅かったのか・・・
たかのん
2005/02/06 15:08:21

画面クリアのためにメインルーチン内で毎回es_clsしてました・・・ぁぅ。
黒(≠0,0,0)でベタ塗りした画像をes_copyのがいいってことですかね?


[495]Re:処理速度
Sinagawa
2005/02/06 01:21:58

>特に処理速度の遅い命令はありますか?
HSPDXFIXの話だと思いますが、頻繁に実行されるような部分で使わない方がよいのは
es_boxf命令と、内部でes_boxfを呼び出しているes_cls、es_mes&fmes命令、それからes_xfer命令で
Direct3Dバッファとやりとりする場合当たりでしょうか、挙げるとすれば。

>あとFPSが安定しないのですが、
処理自体は間に合っていると仮定して、もしawaitでタイミングを取っているのなら
es_syncでタイミングを取るようにした方がウェイトは安定します。


[494]処理速度
あおぽん
2005/02/03 18:30:05

特に処理速度の遅い命令はありますか?
あとFPSが安定しないのですが、
非常に抽象的ですみません


[493](無題)
水砂
2005/02/03 14:08:37

遅レスですが
一度新しいDLLのほうを使用して、スクリプトも重要な部分だけ
動作チェックで不具合が出ないように構文しなおしてみます
ダメだったら0.15でやってみますね

忙しい中、色々とありがとうございました


[492]レス
Sinagawa
2005/02/02 15:16:47

>書き忘れてしまった要望なんですが、
>es_find命令にもes_exnewのように検索開始、終了値
>増分を指定できるようにできないでしょうか?
(そろそろできるうちにやっておかないと忘れそうなので)実装しました。
次のバージョンでサポートされます。


[491]Re:Re:報告
O2K
2005/02/01 20:24:18

レスありがとうございました。

書き忘れてしまった要望なんですが、
es_find命令にもes_exnewのように検索開始、終了値
増分を指定できるようにできないでしょうか?


[490]Re:報告
Sinagawa
2005/02/01 10:02:45

>es_fill、es_boxf命令において初期化した画面サイズを
>超える範囲で描画を行うと命令が反映されません。
>例えば640×480で初期化した場合、es_boxf 0,0,640,480
>とすると画面に反映されません。
es_fillとes_boxfはクリッピングがないことと、Ver 0.15beta5以前ではそのように
指定すると(0,0)-(639,479)に描画されていたのを(0,0)-(640,480)に描画するように
変更したために起きたものです。
次のバージョンでクリッピングするようにしておきます。

>es_size命令でヒットチェック領域を設定すると画像の左上
>から領域が設定されます。
>例えばサイズ100×100、チェック領域50%とすると
>(0,0)-(50,50)という範囲の当たり判定になってしまいます。
回転を考慮しない場合の当たり判定の計算式に誤りがありました。
次のバージョンで修正しておきます。

>es_syncの第2引数を1にしても環境によっては反映されない
>ことがあるようです。
Ver 0.14まではVSYNCを待たない場合、es_xferに相当する方法で画像を転送していましたが、
beta1以降はFlipにVSYNCを待たないようにパラメータを渡して行っています。
この方法だとグラフィックボードによっては正常に動作しないようです。
以前の方法と選択できるようにしておきます。


[489]報告
O2K
2005/02/01 00:09:27

はじめまして。
hspdxfix重宝させていただいています。

いくつかバグ?らしきものがあったので報告させていただきます。

 es_fill、es_boxf命令において初期化した画面サイズを
 超える範囲で描画を行うと命令が反映されません。
 例えば640×480で初期化した場合、es_boxf 0,0,640,480
 とすると画面に反映されません。beta3までは正常に動作
 していましたが、beta5(beta4では試していません)から
 このような状態になってます。

 es_size命令でヒットチェック領域を設定すると画像の左上
 から領域が設定されます。
 例えばサイズ100×100、チェック領域50%とすると
 (0,0)-(50,50)という範囲の当たり判定になってしまいます。
 これもbeta5からでして、beta3ではこのようにすれば
 (25,25)-(75,75)という範囲になっていたと思います。

 これは以前[469]で取り上げられていたのと関係するのですが
 es_syncの第2引数を1にしても環境によっては反映されない
 ことがあるようです。(hsp2.66に同梱されていたhspdxでは
 このようなことはありませんでした。)
 [469]でes_sync 17,1でfpsが61になることがあるというのは
 第2引数が反映されず且つモニターのリフレッシュレートが
 60Hzになってるためと思われます。
 
長文失礼しました。


[488]Re: レス
hira
2005/01/30 17:40:43

>> ・es_buffer命令の第三引数(透明色の指定)
> 既知問題となっています。
失礼しました…。

>> ・HSPDX.HSを入れたら、helpman.exeで強制終了
> mkindexでインデックスの再作成をしないといけません
申し訳ありません。再作成していませんでした…
再作成したところ、HSP HELP Browserで正常に使えました。

>> es_xfer XXX,-1が動かない
> 多くのグラフィックボードが画面バッファからオフスクリーンバッファへの
> 透過コピーをサポートしていないようです。
おっしゃる通り、「gmode 0」を入れてみたところ、動作しました。

色々と失礼しました。


[487]レス(2/2)
Sinagawa
2005/01/30 13:22:40

(続き)

>そして要望なのですが、es_draw命令で、描画先IDを指定できるようには
>なりませんでしょうか。
少し調べてみますが、現状ではDirect3Dが描画先を変更できないためにほぼ
意味をなさないため、サポートする予定はありません。

es_xferが動かない件は、自分もK-sさんのレスを見るまで忘れていたのですが、
多くのグラフィックボードが画面バッファからオフスクリーンバッファへの
透過コピーをサポートしていないようです。そのため、「gmode 0」を入れれば
動作するようになるかと思います。
(これまでes_xfer関係の質問に対しグラフィックボード依存の問題と決めつけて
いましたが、こちらの確認漏れでした。すみません。それから、情報提供ありがとう
ございます>K-sさん)

なお、これについては次のバージョンで指定しなくてもよいように変更する
つもりです。

>まいざーさん
Ver 0.15に同梱のサンプルや#481で掲示したスクリプトと比べて明らかに
動作が遅いため、最初HELで動いているのではないかと思ったのですが、調べた
ところVRAMに取られたバッファに画像が格納されていることからそうではない
ようで、なぜこのスクリプトに限ってそのような現象が起こるのか現在のところ
はっきりとした原因は分かっていません。


[486]レス(1/2)
Sinagawa
2005/01/30 13:22:14

>水砂さん
検証結果の報告ありがとうございます。
パラメータの違う部分についてはいずれも内部では使用されていない部分ですので、
これについては動作に影響を及ぼしている可能性は低いと思われます。

ダンプされたパラメータは正常に表示されているスプライトNo.0(レーザー)の
もので、スクリーンショットで確認できるサイズや角度の間違ったスプライトの
パラメータは(確認をとるのは大変手間がかかりますが)おそらく正常な値を保持
していないと思います。

>本日別PCで製作中のものを動作確認してきました。
>グラフィックオンボードPCでの動作:正常動作確認
>RADEONシリーズPCでの動作:正常動作確認
>でした
>この結果から、私のPC環境依存の可能性が出てきました
以前にも特定の環境下でes_draw実行時に強制終了する旨の報告を頂いたことが
あるのですが(参照:#409〜413)、どうもHSP2.61+HSPDXFIX0.15beta3以降の組み
合わせはメモリ周りがシビアになる傾向にあるのかもしれません。

>hiraさん
>・es_buffer命令の第三引数(透明色の指定)で、ウィンドウモードの時のみ
> $RRGGBBではなく$BBGGRRの順で指定しないと上手くいかない。
> (フルスクリーンモードでは$RRGGBB指定で上手くいく。)
> また、環境によってはウィンドウモードで$BBGGRRと指定しても上手くいかない
> こともあるようです。
24bit以上の時にピクセルフォーマットの違いを無視しているせいで、
es_bufferには言及していませんが一応既知問題となっています。

>・HSPDXFIX_beta5同梱のHSPDX.HSを入れたら、helpman.exeで強制終了されるように
> なってしまいました。
こちらでは正常に使えていますので、原因は分かりません。基本的にヘルプを
差し替えたときはmkindexでインデックスの再作成をしないといけませんが、
そちらは行っていますでしょうか。
ただ、かなり前からhs_write.exeを使って編集しようとすると強制終了したので、
ひょっとしたら壊れているのかもしれませんが。

参考までに、こちらではHSP HELP MANAGER FX(http://sprocket.babyblue.jp/
注:現在はHSP HELP Browserに変わっている模様)を使っています。

(容量制限に引っかかったので残りは次に)


[485]es_xferの件について
K-s
2005/01/29 20:33:34

あれからいろいろ実験してみたところ、
「"gmode 0"で、コピーサイズ384x384以下」で正常に動作しました。
お騒がせしてすいませんでした。


[484]Direct3D描画で
まいざー
2005/01/29 20:12:16

某匿名掲示板とのマルチポストですがどうかお許しください。

DirectX系のHSPプラグインでどれを選ぼうかと検証しておりまして、
複数のプラグインで同じような処理をさせて、速度を計ってみたのですが
HSPDXFIXに関して「Direct3D使用時だけ」落ち込みが極端に激しく、
(DirectDrawは非常に高速でした)3Dに強いビデオカードを使用した
環境でも、著しく速度が落ちてしまいました。

個人的には、機能が揃っていて使いやすいHSPDXFIXを使いたいと
思っているので、単純にスクリプトに問題があるのか、若しくは設定
しだいで普通に動くかもと思い、こちらに投稿させて頂きました。

以下がスクリプトです。「hspdxfix3D.as」が該当ファイルです。
描画面積にかかわらずスプライトが増えると極端に遅くなるので
何か私の間違いな気がします。
http://pegmyzer.hp.infoseek.co.jp/dxtest.zip


[483]バグ?&要望
hira
2005/01/29 19:53:35

こんにちは。いつもお世話になっています。
今回はバグのようなものを2つと、要望を1つ、書き込ませていただきます。

・es_buffer命令の第三引数(透明色の指定)で、ウィンドウモードの時のみ
 $RRGGBBではなく$BBGGRRの順で指定しないと上手くいかない。
 (フルスクリーンモードでは$RRGGBB指定で上手くいく。)
 また、環境によってはウィンドウモードで$BBGGRRと指定しても上手くいかない
 こともあるようです。
・HSPDXFIX_beta5同梱のHSPDX.HSを入れたら、helpman.exeで強制終了されるように
 なってしまいました。

そして要望なのですが、es_draw命令で、描画先IDを指定できるようには
なりませんでしょうか。
描画先IDが指定できない現状ですと例えば、スプライトを描画する320*240の
画面を2倍に引き伸ばして640*480で表示する、ということをするには、
es_xfer -1,XXX を使ってオフスクリーンに移した後、es_zoomで2倍にして戻す、
とするしかないようですが、es_xfer -1,XXX が環境によって使用できない場合が
あるということで(私の環境でも使用できません)、これが実現できません。

それでは、もしお時間があれば、是非検討していただきたいと思います。
長文失礼しました。


[482]検証結果
水砂
2005/01/28 20:41:33

検証結果報告します
本日別PCで製作中のものを動作確認してきました。
グラフィックオンボードPCでの動作:正常動作確認
RADEONシリーズPCでの動作:正常動作確認
でした
この結果から、私のPC環境依存の可能性が出てきました

>大部分が表示されていないのが気になるものの、表示されている画像についてはサイズや角度のみが異常で
>位置は正常に見えるところからパラメータが壊れているのではないかと思います。
es_iniの周の精度をいじると、見えていなかった部分の画像がやはり歪んで出てきました
表示はちゃんとされているようです
たしかに角度が異常のようですね…

わざわざ検証用にサンプルを出していただきありがとうございます
クリッピングあり、なしの検証の結果
>実行すると青い機体(自機)と赤い機体2機が表示され、1機はレーザーを出しながら反時計回りに回転、
>もう1機が自機の方向を向いて時計回りに回転しながら弾をばらまく様子が表示されれば正常です。
の通りに動作しました。
しかし、スクリーンショットを見るとわかりますが、弾が崩れていたり
クリッピングなしの状態時赤透過の場所に自機を持っていっても透過されていません
また、いくつかのパラメータが違っているようです
http://qurival.hp.infoseek.co.jp/pc/kensyo.jpg(クリッピングあり
http://qurival.hp.infoseek.co.jp/pc/kensyo2.jpg(クリッピングなし


[481]レス
Sinagawa
(http://www.diveto.net/zero/junk/rolltest.lzh) 2005/01/28 13:04:15

>水砂さん
スクリーンショットを拝見しました。
大部分が表示されていないのが気になるものの、表示されている画像についてはサイズや角度のみが異常で
位置は正常に見えるところからパラメータが壊れているのではないかと思います。

でもこれだけでは確証が取れないので、beta4配布時に同梱したサンプルに少し手を加えたものを
用意しました(上記リンク)。
実行すると青い機体(自機)と赤い機体2機が表示され、1機はレーザーを出しながら反時計回りに回転、
もう1機が自機の方向を向いて時計回りに回転しながら弾をばらまく様子が表示されれば正常です。
このサンプルでは文字以外の画像すべてをDirect3Dで描画しています。
正常に動いている状態のスクリーンショットはこちらです。
http://www.diveto.net/zero/junk/rolltest_clipped.jpg (クリッピングあり)
http://www.diveto.net/zero/junk/rolltest_unclipped.jpg (クリッピングなし)
また、画面の左右にはスプライトパラメータのダンプが表示されていますが、このうち常に変動するのは
11,12,29の3つのみで、その他のパラメータについてはスクリーンショットと同じ値が出るはずです。
試しにこれを実行してみて、結果を教えてください。

本当は過去バージョンのHSPDXFIXもあるとよかったのですが、あいにく手元にはありませんし、
Webアーカイブには放置期間中のサイトしか保存されていなかったので・・・。

>ふと思ったのですが、回転等の機能を使う場合は縦横サイズを同じにしなければならないといった制約はあるのでしょうか
上記サンプルでは縦長の画像を回転していますし、過去のバージョンで同梱したサンプルについても
HSP本体に同梱のhspdx.bmp(640×480)を使用し、問題が発生していませんのでそのような
制約はないはずです。


[480]レスどうもです
水砂
2005/01/28 04:15:46

>ビューポートの設定に失敗するのはクリッピング領域(es_windowやes_clip)が画面外に及んでいるのが
>主な原因ですが、その当たりは問題ないでしょうか。
当方0.15のヘルプだったためes_clipを見落としていたようです、というわけで実験。
es_windowの次にes_clipを追加してみました
es_window 0,0,640,480:es_clip 0,0,640,480
最初はこれでやってみましたが、記述の無かった時と動作が同じでした
そこで気付いたのが0ピクセルからということ…orz↓を試しにやってみました
es_window 0,0,639,479:es_clip 0,0,639,479
実行してみると、背景として登録してあるスプライトが正常に動作しました
デバッグのビューポートの問題もきれいさっぱりなくなっていました
しかし、それ以外のスプライトはまだひしゃげたり、回転していたりと様々です

ふと思ったのですが、回転等の機能を使う場合は縦横サイズを同じにしなければならないといった制約はあるのでしょうか
もしそうだとしたらひしゃげているものは当てはまります、縦横サイズは同じではありません
ただ、今の所そういった機能はほとんど使用してないため(使っても半透明合成)使用されている部分は少ないです

>できればで結構ですので、参考のためにスクリーンショットを見せていただけるとありがたいです。

SSのURLはここに置いておきます
http://qurival.hp.infoseek.co.jp/pc/ijou.jpg(beta5,beta6でも同様でした)
http://qurival.hp.infoseek.co.jp/pc/seijou.jpg(0.15)

なにかトンチンカンなことをしてそうで怖いのでビシっと言ってやってくださると助かります
使用されている命令はes_clip以外は0.15の命令のみです
ちなみにグラフィックがGforceなので既知の問題もちゃんと発現しております
長文失礼しました


[479]レス
Sinagawa
2005/01/27 23:17:09

>水砂さん
レス遅れてすみません。
ビューポートの設定に失敗するのはクリッピング領域(es_windowやes_clip)が画面外に及んでいるのが
主な原因ですが、その当たりは問題ないでしょうか。
その他の不具合に関してですが、何かまずいことになっているのは確かなようですが
原因などはちょっと分かりかねます。
できればで結構ですので、参考のためにスクリーンショットを見せていただけるとありがたいです。


[478](無題)
水砂
2005/01/25 20:36:14

お初です。
現在hspdxfixを使わせてもらっています。
そこで相談なんですが、バージョン0.15でRPGを製作中
新機能を試そうとbeta5を導入し、実行してみたのですが
それまでに配置されていたスプライトがバラバラに表示されてしまいました。
具体的に言うと、一つ一つが様々な方向(一定方向?)に回転してしまい
描画のされていない真っ黒な背景が見える状態になるということです。
beta5までに更新された追加部分で、なにか設定方法が変わって
このような状態になっているのかもしれないのですが
原因がわからないためお知恵を貸していただきたいです。

Direct3D描画を使用しています。
debug.txtで目立った部分ですが
DDSetViewPort : ビューポートの設定に失敗
という文章が何十行も出ています。
時間が経つとHSPが強制終了します。

現在は問題なく動作する0.15で作業を進めていますが
回転関係の機能が少々必要になるかもしれないため書き込みしました。
結局はそのまま作ってしまうか、最初から作り直せばいいのでしょうけどね…
それでは、どうかよろしくお願いします。


[477]レス
Sinagawa
2005/01/24 00:11:58

>>-2は各種描画命令の描画対象になる方のバッファを指します。
>このバッファをこちら側から指定して、オフスクリーンバッファにコピーするというこはできないのでしょうか。
あくまでもes_xfer命令はDirectX専用に用意されたバッファ同士で画像をやりとりするための
ものですので、例えばHSPのバッファなどとやりとりしたい場合はes_getbuf命令とes_buffer命令を
組み合わせるしかないです。


[476]Re:レス
K-s
2005/01/23 21:00:59

レスありがとうございます。
グラフィックボード固有の問題は辛いですが、別の方法を探ってみようと思います。

>-2は各種描画命令の描画対象になる方のバッファを指します。
このバッファをこちら側から指定して、オフスクリーンバッファにコピーするというこはできないのでしょうか。


[475]レス
Sinagawa
2005/01/22 21:42:36

>HSPDXFIX0.15beta5のes_expat命令を、一箇所だけ既存のex_pat命令と
>置き換えて試してみたのですが、実行時に
>「問題が発生したため、hsp2.exeを終了します。この問題をMicrosoftに〜」の
>エラーが出てしまい、正常に使用することができません。
すみません。パラメータを正しく渡していなかったために正常に動作していませんでした。
HSPDXFIX.ASの最終行を
#define es_expat(%1,%2,%3,%4,%5) es_pat %1,%3,%4,%5,%2
に変更すると正しく動くようになります。

>また、プログラムを実行すると"DEBUG.TXT"というファイルが出力されるのは
>仕様でしょうか。
ベータリリース限定でおおざっぱな実行ログをはき出すようにしていますが、もはやベータリリースを
続ける意味がなくなったため、次のバージョン当たりでベータそのものを廃止するつもりです。


[474]es_expat命令でエラー
hira
2005/01/22 19:33:41

HSPDXFIX0.15beta5のes_expat命令を、一箇所だけ既存のex_pat命令と
置き換えて試してみたのですが、実行時に
「問題が発生したため、hsp2.exeを終了します。この問題をMicrosoftに〜」の
エラーが出てしまい、正常に使用することができません。
パラメータの順序と、省略をしていないことは確認しました。
何か、この命令を使用する上での注意事項などがありますでしょうか。

また、プログラムを実行すると"DEBUG.TXT"というファイルが出力されるのは
仕様でしょうか。


[473]レス
Sinagawa
2005/01/21 02:40:17

>そにっくさん
>HSPDXFIXのウィンドウモードで、es_sync 17,1とした時、
>処理落ちなしで58FPSになるPCと61FPSになるPCの二つに分かれます。
>調べたPC7台のうち2台が61FPSになりました。
>この現象はどういう理由が考えられるでしょうか。
1000(ms)÷61(FPS)≒16.3934(ms)ですので、なぜか16msのウェイトが発生しているフレームが
存在することになります。ただ、いくらSleepの精度が環境によってまちまちだからといって
本来の値を下回ることがあるのかはわかりませんが。

>ゆうきさん
Direct3Dのクリッピングにバグがあり、表示エリアやクリッピング領域を画面中央からずらして
設定すると、カメラ位置が固定されているために表示ずれが生じるようです。
次のバージョンで修正しておきます。


[472](無題)
そにっく
2005/01/20 20:26:47

横レス失礼します。
ゆうきさんのまとめられたページにあるソースを実行して試したんですが、
es_windowのほうに原因があるようです。es_offsetを外してもずれたままでした。
es_windowで指定するエリアを画面内でセンタリングするとズレないようです。
ちょっとよく分かりませんが。


[471]スプライトずれる現象
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2005/01/20 13:09:38

報告です。
オフセットを設定した場合3DエフェクトをONにしたスプライトが
何故か左にズレてしまいます。
DirectDrawだと問題ないです。

ここにまとめました。
http://ww22.tiki.ne.jp/~y-shirakawa/hspdx/


[470]Re:スプライトの描画順序
hira
2005/01/20 10:06:38

> 自分でやってみずに言うのもなんですが、スプライトの重なり方は描画順序に
> よるのですか?私は、スプライト番号のみによるのだと思っていました。
> すみません。HSPが使える環境に行き次第、試してみたいと思います。
やってみました。スプライトの重なり方は、描画順序によるのですね…
ということは、スプライト番号が重なり方に影響するのは、スプライトを
一気に描画したときのみということですね。
失礼いたしました。


[469]es_sync
そにっく
2005/01/20 01:57:20

HSPDXFIXのウィンドウモードで、es_sync 17,1とした時、
処理落ちなしで58FPSになるPCと61FPSになるPCの二つに分かれます。
調べたPC7台のうち2台が61FPSになりました。
この現象はどういう理由が考えられるでしょうか。

61FPSになったほうのPCは2台とも若干古いんですが
(AthlonTB1Ghz/Windows2000/GeForce2MXとCeleron750MHz/WindowsXPhome/SiS630)
基本的には構成はバラバラで共通点は殆どありません。


[468]Re:レス
hira
2005/01/19 18:15:07

>現状で無理矢理優先順位の変更をしたい場合、スプライトをすべて一気に描画せずに
>優先順位の低いものから順番に単体で描画していく方法があります。
自分でやってみずに言うのもなんですが、スプライトの重なり方は描画順序に
よるのですか?私は、スプライト番号のみによるのだと思っていました。
すみません。HSPが使える環境に行き次第、試してみたいと思います。


[467]レス
Sinagawa
2005/01/19 15:33:33

>HSPDXFIXを使って2DのRPG(ツクール風の画面)を作ろうとした時、
>重なり合ったスプライトのうち、手前のスプライトを手前に表示する手段は、
>・毎フレーム、各スプライトのY座標を降順にソートし、
> その順番に従ってes_setでスプライト番号を設定し直す。
>という方法しかありませんよね?(あまり自身がないのですが…)
現状で無理矢理優先順位の変更をしたい場合、スプライトをすべて一気に描画せずに優先順位の
低いものから順番に単体で描画していく方法があります。

スプライトの優先順位の実装自体は難しくないです。クイックソートならそれほど速度低下も気に
ならないはずなので一度実装してみます。


[466]要望
hira
2005/01/18 16:52:16

HSPDXFIXを使って2DのRPG(ツクール風の画面)を作ろうとした時、
重なり合ったスプライトのうち、手前のスプライトを手前に表示する手段は、
・毎フレーム、各スプライトのY座標を降順にソートし、
 その順番に従ってes_setでスプライト番号を設定し直す。
という方法しかありませんよね?(あまり自身がないのですが…)

これを実際にやってみたのですが↓、
ttp://www015.upp.so-net.ne.jp/hira/comsen/software/ARPGmaker_test.zip
es_set時にスプライトのアニメーションが止まってしまう等の問題があり、
あまり上手くありません。

そこで、HSPDXFIXに、自動で手前のスプライトを手前に表示してくれる
機能が追加されると、非常に有用なのではないかなぁと思いました。
(ちなみにDelphiの何かの機能では、これを"Zレイヤ機能"と呼ぶそうです。)

もし可能でしたら、是非とも検討してみていただきたいと思います。


[465]レス
Sinagawa
2005/01/18 10:49:14

>K-sさん
>最近になって初めてes_xferという命令を使ってみたのですが、
>第2パラメータ(転送元ID)に-1か-2を指定して実行すると「解釈できないHSPコードです」と怒られてしまいます。
es_xfer命令はDirectDrawが吐いたエラーをそのままHSPへエラーとして返していますので、
グラフィックボードが画面イメージからの転送をサポートしていないとそのようなエラーが出ます。

>あと、-1は表示中、-2は描画中の画面イメージとのことですが、違いがよく分かりません。
画面イメージとはDirectXが作成した専用のバッファのことで、HSPDXFIXでは画面のちらつきを
防止するためにそれを2つ用意します。-1はそのうちモニタに表示されている方、-2は各種描画命令の
描画対象になる方のバッファを指します。

>Jinさん
http://quasiquote.org/hspwiki/HSPHelp:dd_accept より、
>D&Dされたファイル名は"\n"で区切られています(D&Dされたファイルが1つの場合でも)。 1つのファイル名を取り出したいときはノートパッド命令を使うと便利です。
とありますので、メモリノートパッドを使ってファイル名を取り出しましょう。
strlenとstrmidを使って末尾の改行を取り除くという手もありますが、複数のファイルを
D&Dされるとバグの元になるのでやめた方がよいです。


[464]dd_acceptについて
Jin
2005/01/16 23:55:08

前回はどうもお世話になりました。
またまたド素人な疑問で申し訳ないのですが、
dd_acceptでファイルのパスを取得したのとき、
パスの最後が改行されていて、このままショートカットを作成しようとすると
うまくいかないのですが、何かいい解決法はないでしょうか?
よろしくお願いします。


[463]es_xferについて
K-s
2005/01/16 21:54:59

はじめまして。DirectXを使ったSTGを作りたくて半年程前からHSPDXFIXを使わせてもらっています。
最近になって初めてes_xferという命令を使ってみたのですが、
第2パラメータ(転送元ID)に-1か-2を指定して実行すると「解釈できないHSPコードです」と怒られてしまいます。
第1には-1、-2ともに大丈夫でしたし、第2も0以上なら問題なく実行できたのですが。
ver0.14と0.15beta4で確認しました。HSPは2.61です。
あと、-1は表示中、-2は描画中の画面イメージとのことですが、違いがよく分かりません。
半透明や回転などのエフェクトが可能になったので、
なんとかスクリーン上のイメージをバッファにコピーしていろいろしたいのですが。


[462]Re:最新版info number
そにっく
2005/01/15 14:24:58

info numberありがとうございました。
使わせていただきます。


[461]Re:DirectX版gsel
hira
2005/01/15 13:22:44

ご回答、ありがとうございます。そのような事情があったのですね。

バッファIDを指定することができると、ある形式の画像素材から
必要な部分のみオフスクリーンに切り出しておき、後からスプライト登録を
一括して行う、というようなことができるので、ありがたいです。
それでは、後はよろしくお願いいたします。

>調べてみましたが、以前はパラメータ数に制限があったためにこのような制限を
>設けてあったのだと思います。
>バッファIDを指定するように拡張するのは簡単にできますので、
>es_patにパラメータを追加する形で対応させていただきます。


[460]Re:DirectX版gsel
Sinagawa
2005/01/15 12:33:29

>HSPDXFIXにはgsel命令にあたるものが無く、画像読み込みと
>キャラクタパターン登録の処理を分けたい場合に不便を感じて
>います。画像読み込みとパターン登録は常に同時におこなう
>べきだということなのでしょうか。
調べてみましたが、以前はパラメータ数に制限があったためにこのような制限を
設けてあったのだと思います。
バッファIDを指定するように拡張するのは簡単にできますので、es_patにパラメータを追加する形で対応させていただきます。


[459]DirectX版gsel
hira
2005/01/14 17:23:16

はじめまして。日頃よりHSPDXFIXをありがたく使わせていただいています。
今回は、ひとつ質問させていただきたいと思います。

es_pat命令でキャラクタパターンを登録する際には、
直前にes_bufferで確保したオフスクリーンバッファから
画像を切り取ってくる、という仕様になっているようですが、
これを任意のオフスクリーンバッファから取ってくることは
できませんでしょうか。
HSPDXFIXにはgsel命令にあたるものが無く、画像読み込みと
キャラクタパターン登録の処理を分けたい場合に不便を感じて
います。画像読み込みとパターン登録は常に同時におこなう
べきだということなのでしょうか。


[458]最新版info number
Sinagawa
2005/01/12 00:22:06

次バージョンのマニュアルに書くのでわざわざここに書かなくてもいいかもしれませんが、
一応調査結果を貼っておきます。

   0 = flag値
   3 = スプライトのX座標
   5 = スプライトのY座標
   7 = 1フレームに移動する距離X
   9 = 1フレームに移動する距離Y
.  10 = プログレスカウント値(未使用)
.  11 = アニメーションカウント値
.  12 = キャラクタNo.
.  13 = type値
14,15 = 特殊動作情報(未使用)
.  16 = 自由落下加速度X
.  17 = 自由落下加速度Y
.  18 = 弾みやすさ
.  19 = バウンドフラグ
.  20 = 点滅フラグ
22,23 = 点滅カウント値
.  24 = Direct3D使用フラグ
.  25 = 表示Xサイズ
.  26 = 表示Yサイズ
.  27 = X軸回転角
.  28 = Y軸回転角
.  29 = Z軸回転角
.  30 = ブレンドファクター
.  31 = α値
.  32 = 点滅用スプライト表示フラグ
34,35 = ライト値

補足かつ蛇足:これらは符号付き16bit(-32768〜32767)で返ってくるため、
32bitパラメータを取得する際はそのまま使うとえらいことになりますので注意。
フラグ、点滅カウント、ライトがこれに当たります。


[457](無題)
そにっく
2005/01/08 03:38:06

>Sinagawaさん
>マニュアルには記載されていませんが取得可能です。時間があるときに確認しておきますが、
>23〜24あたりに情報が格納されているはずです。
分かりました、ありがとうございます。とりあえず自分でも探してみます。

>これに関して自ら問題に遭遇したこともあり導入の手間を省く意味で今後しばらくはVC++6で
>コンパイルしたものを提供する予定です。よって、必要なしになります。
わかりました。即レスありがとうございました。

>ゆうきさん
>スプライトをセットするときに、配列か何かにキャラクタのサイズを記憶してみてはいかがでしょうか?私はそうしています。
実は現状私もそうやっています。HSPでいたずらに変数を増やしたくないなと思ったので
私のわがままで書いてしまいました。でも既にあるようなので試してみたいと思います。


[456]レス
Sinagawa
2005/01/08 00:18:58

>そにっくさん
>es_getでスプライトに定義されているキャラクタのx,yサイズが取得できるように
>なりませんでしょうか。もしくはそれを取得できる命令というのは可能でしょうか。
es_get命令は単にスプライト情報用のメモリを抜き出しているだけなので、スプライトの表示サイズでよければ
マニュアルには記載されていませんが取得可能です。時間があるときに確認しておきますが、
23〜24あたりに情報が格納されているはずです。

>ところで今後のバージョンアップ版もMSVCR71.DLLが必要になるのでしょうか。
今回はいろいろあってVC.netでコンパイルしたものをそのままアップしましたが、
これに関して自ら問題に遭遇したこともあり導入の手間を省く意味で今後しばらくはVC++6で
コンパイルしたものを提供する予定です。よって、必要なしになります。


[455](無題)
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2005/01/07 23:08:21

>そにっくさん
スプライトをセットするときに、配列か何かにキャラクタのサイズを記憶してみてはいかがでしょうか?私はそうしています。

>ユウマさん
こちらも、セットするときに初期移動量を保持しておくと可能です。

思い切ってスプライトの数だけいろいろな配列を
用意しておくのが手っ取り早いと思います。


[454]es_getで
そにっく
2005/01/07 17:16:09

es_getでスプライトに定義されているキャラクタのx,yサイズが取得できるように
なりませんでしょうか。もしくはそれを取得できる命令というのは可能でしょうか。
スプライト表示時のオフセット量を算出するのに使用したいと思うのですが。

ところで今後のバージョンアップ版もMSVCR71.DLLが必要になるのでしょうか。
できれば無くても動くほうが嬉しいのですが…。


[453]スプライト移動再開
ユウマ
2005/01/07 16:38:41

スプライト移動停止
は何とかできましたが、また移動再開がうまくできません。
一度停止してしまうと、昔の移動量がわからなくなるので、、、
es_getとes_aposを組み合わせても、、、


[452]スプライト移動停止
ユウマ
2005/01/07 15:58:10

移動しているスプライトの停止。
            es_get mx,MySp,3
            es_get my,MySp,5
            es_pos MySp,mx,my
ですとうまくいきません。どうすればよいですか


[451]バッファの初期化
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2005/01/07 00:09:22

>管理人様
グラフィックボードの問題ですか・・・。
コンフィグで色々設定できるように設計したいと思います。
回答ありがとうございました。


[450]スプライトの非表示
ひろっち
2005/01/05 07:04:09

透明色のキャラクタで非表示にできました。
ありがとうございました。


[449]レス
Sinagawa
2005/01/05 03:51:55

最近のHSPDXFIXって「gsel 0」なくても普通に動くんですね。

>aaaさん
前にも書きましたが仕様の見直し時には考えさせていただきますが、申し訳ないですけど
現状では実装予定なしということで。

>MSHYさん
beta4はVC.netでコンパイルしたものをアップしましたので、フレームワークが必要となります。
もしHSPは動くけどHSPDXFIXは使えないという場合はWINDOWS\SYSTEM32ディレクトリにMSVCR71.DLLが
入っているか確かめてみてください。
#余談ですが、以前Win98SE上でVC.net版HSPDXFIXが動かないと書いたことがあるのですが、これが原因でした。

>ひろっちさん
すでにレスがありますが、見た目だけ消したいのであればes_flagやes_blinkの点滅カウントを利用するか
全透明のキャラクタに変更することで実現できます。
ちなみに、以前#413でも書いたのですがes_flagの8bit目($100)は現状ではスプライト生存確認用の
フラグとしてしか機能していませんのでご注意を。

>ゆうきさん
es_sync後に両バッファの内容をスクリーンショットとして保存してみましたが問題ありませんでした。
例によってグラフィックボード固有の問題だと思います。


[448]遅れましたが
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2005/01/05 00:14:39

>管理人様
個人的な意見にも関わらず、es_move命令の実装をしてくれてありがとうございます。
ところで、質問があります。
es_syncを行うと、表示用オフスクリーンバッファの内容が破壊(初期化?)されるのは仕様でしょうか?
バッファ間画像コピー(例えばsync後にes_xfer -2,-1,0,0,640,480)で代用は出来ますが、負担の問題もありまして・・・。
出来ればバッファの内容を保持してほしいと思っています。
(実はes_move実装をお願いした理由と関連した要望なのです・・・)

>ひろっちさん
「スプライトの非表示」というのが、どういうものなのか良く分かりませんが、
完全にスプライトを削除するのであればes_kill命令です。
一時的に画面から見えないようにするという意味のものであれば、es_flagの8bit目で設定できると思います。
もしくは、透過色のパターンのキャラクタに変える等の、多少強引な考え方もあります。

>aaaさん
毎フレーム座標を調べて指定した座標に到達したら、es_apos 0,0,0
で問題ないと思いますが・・・。


[447]スプライト非表示
ひろっち
2005/01/04 20:58:42

今グラディウスのオプションを作っていますが
スプライトを非表示はできないんでしょうか?


[446]MSVCR71.dll
MSHY
2005/01/03 23:23:04

HSPDXFIX Ver0.15beta4を使用しようとしたのですが
MSVCR71.dllが見つかりませんと表示されてしまいます。
以前のバージョンでもこのdllって必須でしたでしょうか?


[445]Re:es_aim
aaa
2005/01/03 11:51:53

とまるようにするのは難しいですか。


[444]Re:es_aim
Sinagawa
2005/01/03 00:37:22

>目的地に行っても動き続けるものなのですか?
はい。方向を決めるための目的点を指定するものですので。


[443]es_aim
aaa
2005/01/02 13:39:00

目的地に行っても動き続けるものなのですか?

[442]レス
Sinagawa
2004/12/31 23:03:48

>あとはHSPDX.ASをcommonにいれればいいんですよね?
はい。圧縮ファイルの中に入っているのは「HSPDXFIX.AS」ですので、まちがえて
「HSPDX.HS(ヘルプ)」をcommonディレクトリに入れないようにしてください。


[441](無題)
MAN
2004/12/31 20:09:53

解凍したファイルの中にはHSPDX.DLLはありませんでしたが
HSPDXFIX.DLLというのはありました。
あとはHSPDX.ASをcommonにいれればいいんですよね?


[440]レス
葦田ひろかず
2004/12/30 19:14:38

>MANさん
おそらく全てのファイル表示を行っていないからだと思います。
マイコンピュータ、もしくはエクスプローラを立ち上げたら
メニューの「ツール」-「フォルダオプション」-「表示」で
「ファイルとフォルダの表示」-「すべてのファイルとフォルダを表示する」に
チェックを入れます。
 もうひとつ、「登録されているファイルの拡張子は表示しない」にチェックが入っていたら、
チェックを外します。
これで見えるはずです。
 どのフォルダにどのファイルを入れるのかは、解凍したファイル「HSPDXFIX.TXT」を
読めば分かります。


[439](無題)
MAN
2004/12/30 14:06:10

HSPDXFIXをこちらのページから落したんですが、
導入の仕方がわかりません。
落したのを解凍したんですが、HSPDX.DLLというのが見つかりませんでした。
このファイルをここにいれるなど詳しく教えていただけないでしょうか?


[438]Re:レス
ととむ
2004/12/28 20:23:38

返信ありがとうございました。

[437]わかりました
そにっく
2004/12/25 07:32:23

他のPCで試したところ確かに問題ありませんでした。
理由はわかりませんが私の環境だけのようです。
お騒がせしました。


[436]なるほど。
TKS
2004/12/23 16:22:11

>環境依存の問題なのかもしれません。
なるほど了解です。
ありがとうございました!


[435]レス
Sinagawa
(http://www.diveto.net/zero/junk/skingrad.png) 2004/12/23 12:24:28

>TKSさん
実際に指定された条件で画像を表示してみたのですが、元画像通りに表示されました(上記リンク参照)。
ここではes_copyを使いましたが、根本的な部分は同じなのでスプライトだとどうということはないはずですし、
es_excopyを使った場合も問題はありませんでした。
24bit以上の時はいっさいの減色を行わずそのまま転送されますので、環境依存の問題なのかもしれません。

>そにっくさん
HSPDXFIX同梱のTEST5D3D.ASで確認しましたが、こちらもうちの環境では問題ありませんでした。


[434]拡大縮小について
そにっく
2004/12/23 04:43:34

わかりました。すばやい返答ありがとうございました。

ところでもうひとつ質問なのですが、こちらの環境でDirect3Dを使用した
スプライトを表示したとき、最初の表示のときだけ一瞬処理落ちしたように
なるのですが、これはうちの環境だけでしょうか?
こちらの環境は
WinXP PRO、RADEON9600XT、DirectX9.0cです。


[433]マウス操作について
Jin
2004/12/23 02:22:51

回答どうもありがとうございます!!
llmod.asとinput.asのインクルードをしていなかったためのエラーでした。
無事解決することが出来ました。
初歩的な質問に丁寧にお答えいただき大変ありがとうございました。


[432]色のこと
TKS
2004/12/23 01:19:09

こんばんは。HSPDXFIX Ver 0.15beta3を使わせてもらっているTKSです。

es_screenで32bitの画面モードを使い、es_clsは微妙な色変化が見られるのですが、
スプライトについては、es_clsのような微妙な色変化が見られませんでした。
・スプライトで肌色→白のグラデーションの画像を描画させてみると、ほとんど白っぽい感じでした。
・ちなみに肌色はHSVで30,64,255です。

VRAMイメージ転送時に減色されているのでしょうか?


[431]レス
Sinagawa
2004/12/22 11:53:29

>フルスクリーンモード使用時にbgscrやscreenを使うことはできませんか?
>使うことができないなら、その理由は画面出力方式が違うから、ですか?
はい。フルスクリーンモード時はDirectXが画面をすべて占拠しますので、その状態でウィンドウなどを
作っても表示させることはできません。


[430]DirectXについて
ととむ
2004/12/21 19:04:38

Sinagawaさんのサンプルスクリプトを参考にフルスクリーンモードでbgscrを使ったり、gselを使って切り替えようとしましたが上手くいきません。
次の疑問点にご指導をお願いします。
質問@
フルスクリーンモード使用時にbgscrやscreenを使うことはできませんか?
使うことができないなら、その理由は画面出力方式が違うから、ですか?


[429]レス
Sinagawa
2004/12/21 12:46:25

>Jinさん
すいません、書き込み見落としてました。
どこでエラーが出てうまく動かないのかよくわからないのであれですが、llmod.asとinput.asは
インクルードしてますでしょうか。この2つをインクルードしないとmouse_eventは使えないようですが。

>そにっくさん
現段階では旧バージョンとの兼ね合いもあって座標と表示サイズを元に表示座標を補正するしか方法はないです。
ただ、今後のバージョンアップで仕様の見直しを検討しようと思っていますのでその当たり視野に入れておきます。


[428]拡大縮小について
そにっく
2004/12/21 06:17:38

はじめまして、そにっくと申します。
HSPDXFIXを使わせていただいています。
大変役に立っております。

ちょっと気になったことがあるのですが、スプライトの拡大縮小を
行うとき、左上の原点を基準に行われる仕様になっているようですが、
回転しながら拡大といったことをしたい場合、回転はスプライトの中央を
基準に行われるようなので、大きさを変えるごとに座標をオフセット
したりして、少々ややこしくなっています。

拡大縮小もスプライト座標の中心を基準に出来ないものでしょうか。


[427]Re:Re:DirectX使用時について
ととむ
2004/12/20 23:58:24

>一応参考までにこのやり方で作った簡単なサンプルをおいておきます。
サンプルスクリプトまでありがとうございます。今からすぐに組み込んでみます。

Sinagawaさんのサンプルスクリプトを見てから、胸のドキドキが止まりません。
どうしてなのかうまく言えません。でも、
自分が表現したいもの、やりたいことを形にしたいという抑えきれない衝動に駆られています。
言葉が見つからないから、今夜はこの辺で。


[426]Re:DirectX使用時について
Sinagawa
(http://www.diveto.net/zero/junk/message.as) 2004/12/20 17:31:13

>質問@
>DirectX使用時(ループ処理もしています)にinput命令は使えますか?
一応使えなくはないですが、パレットモードだと色化けが発生したり、es_syncを実行すると
メッセージボックスが消えたりしますので、フルスクリーンモードだと扱いが難しいです。
また、正式に対応しているわけはないので、使えないと思った方がよいでしょう。

>質問A
>DirectX使用時に、自分で入力した文字を画面に表示するために何か方法はありませんか?
もっとも簡単な方法はHSPDXをウィンドウモードで動作させ、別IDのウィンドウにメッセージボックスを表示して
そこからの入力を拾ってDirectX側のウィンドウに反映させることですが、このやり方では
日本語入力で問題が起こったりするのであまりいい方法ではありません。
一応参考までにこのやり方で作った簡単なサンプルをおいておきます。


[425]DirectX使用時について
ととむ
2004/12/19 18:02:11

HSP板の過去ログを読んでいたら、DirectXについてはSinagawaさんに聞け、という格言を見つけてしまいました。
そこで、DirectXのいろいろな問題のご指導をお願いします。
質問@
DirectX使用時(ループ処理もしています)にinput命令は使えますか?
質問A
DirectX使用時に、自分で入力した文字を画面に表示するために何か方法はありませんか?


[424]質問です
Jin
2004/12/19 17:07:12

初めまして!!
つい最近プログラミングに興味を持ちHSPを始めてみたんですが、
なぜかマウス操作(mouse_event)を使うとエラーがでてしまってうまくいきません;;
具体的には、
ボタンを押す→マウス移動→マウスクリック
という流れのものを作りたいのですが・・・。
ものすごく初級な質問なんですが、何かアドバイスをいただければ幸いです。
よろしくお願いします。


[423]レス
Sinagawa
2004/12/17 23:48:23

>マニュアルにある、一つのバッファにDirectDrawとDirect3Dで使用する画像を共存させない方が
>速度面で有利になります。は、たとえばes_copyとes_excopyのバッファは同じNoではない方が良い、
>で解釈は正しいですか?
はいそうです。厳密にいうと、同じにしない方がよいというより完全に分けるべきですが。


[422]6周年おめでとうございます
ととむ
2004/12/17 20:51:57

あれからずっとプログラムを弄っていて、ついさっき、ようやくsinagawaさんのレスの内容が理解できるようになりました。ご指導ありがとうございます。

マニュアルにある、一つのバッファにDirectDrawとDirect3Dで使用する画像を共存させない方が速度面で有利になります。は、たとえばes_copyとes_excopyのバッファは同じNoではない方が良い、で解釈は正しいですか?


[421]レス
Sinagawa
(http://www.diveto.net/zero/junk/offset.lzh) 2004/12/15 23:34:16

またまたレス遅れましてすいませんでした。

>症状は、表示される矩形のY座標が常に-1されているようになり、さらに
>グラフィック矩形のX座標指定が>0の時だけ、表示される矩形の座標も-1される
>という物です。

テストスクリプトを作って(上記リンク)確認したところ、Direct3D描画を使っている場合X,Y座標が
負の数になるとテクスチャが崩れるバグがあることがわかりました。
こちらは自分の環境で再現したので修正しましたが、表示位置、表示されるテクスチャともに
問題が生じなかったため、位置ずれに関しては確認できませんでした。


[420]追記
KRN☆
2004/12/13 13:19:35

この症状はes_putで描画したときは現れずに
以下のようにスプライトとして設定して描画したときに起こります。


[419]キャラクタのグラフィックについて
KRN☆
2004/12/13 13:16:05

シューティングゲームを作ろうとソースを組んで見たのですが、
キャラクタの画像を指定したところ実際にはずれて表示されてしまいます。

<これ以上はDirectX設定>
*start
hmminit 5

buffer 0,256,256 : picload "player.bmp",1 : es_buffer 0,2,0,0,1
es_size 36,48 : es_pat 0,36,0 : es_size 12,48 : es_pat 1,0,48 : es_size 16,16 : es_pat 2,180,0

ply.0 =220 : ply.1 =220
es_set 0,ply.0,ply.1,0

repeat
<描画命令>
loop
<これ以下はサブルーチン>

バッファが2の乗数で無いからかと思って一応そっちもやっては見ましたが、
同じようにグラフィックがずれて表示されます。

症状は、表示される矩形のY座標が常に-1されているようになり、さらに
グラフィック矩形のX座標指定が>0の時だけ、表示される矩形の座標も-1される
という物です。

現在はグラフィックの矩形を指定する時に1を加算した値で指定していますが、
これは私のミスなのでしょうか? それともバグなのでしょうか?


[418]6周年おめでとうございます
たかのん
2004/12/12 13:01:49

うちのサイトとほとんど同じ時期に開設だったんですね。
今後とも宜しくお願い致しますです。


[417]了解致しました
葦田ひろかず
2004/12/10 17:12:58

 レスを頂きました件について、了解いたしました。
それでは、今後とも宜しくお願い致します。


[416]補足
Sinagawa
2004/12/10 12:15:48

>次に二点目、スプライトのアニメーションはes_drawを実行した時点で行われます。
「〜実行した時点で"自動的に"行われる」ということで、つまりスプライトを一度設定したら
あとはそのままes_drawを実行すれば勝手にアニメーションが行われると言うことです。


[415]Re:HSPDXFIXの画像処理にいて
Sinagawa
2004/12/10 12:10:20

>質問@
>下のようなプログラムを組みましたが、キャラクタ・アニメーションの方法が良く分かりません。どこが間違っていますか?
>質問A
>下のプログラムは間違いながらも描写できている、という感じがしています。コマンドの書き方や使い方がおかしいところはありませんか?
まず一点目として、es_set命令を実行するとアニメーションなどの状態は初期化されます。
次に二点目、スプライトのアニメーションはes_drawを実行した時点で行われます。
以上のことから、

    ;スプライト設定
    es_set 6,440,140,6 : es_effect 6,80,80,0,0,0,ESB_ADD,128
*main
    stick ky,$1f
    if ky&$80 :end

    es_cls
    es_draw
    es_sync                ;画面更新
    await 128
    goto *main

↑このようにすればうまくいきます。また、実行順序は画面消去→計算→描画→ウェイトとした方が
表示と処理が一致するのでよいです。

>質問B
>HSPDXFIXの説明書に、一つのバッファにDirectDrawとDirect3Dで使用する画像を共存させない方が速度面で有利になります、とありますが、
>DirectXを使い始めたばかりなので、Drawと3Dの区別がうまく付きません。
>また、パレットモードの意味もよく分かりません。何か良い具体例はありませんか?
Direct3D描画=es_excopy命令での画像コピー、es_set命令でp5に1を指定した状態でのスプライト描画。
DirectDraw描画=es_copy、es_zoom命令での画像コピー、es_set命令でp5に0を指定した状態でのスプライト描画。
要するに、半透明などのエフェクトが使える描画=Direct3D、使えない描画=DirectDrawです。
また、パレットモードは、es_screen命令で8bitモードに初期化(p3=8)した状態のことです。
ウィンドウモードだと話がまた少しややこしくなるのですがとりあえず省略。


[414]HSPDXFIXの画像処理にいて
ととむ
2004/12/09 22:17:07

初めまして。
HSP掲示板でDirectX使用時の半透明処理ができるとのことで、早速DLさせていただきました。
特にスプライト関係が豊富で、できなかったことがいろいろなことができそうです。
これからも開発を頑張ってください。

ところで、HSPDXFIXを使用していて、いくつか使い方が分からない点があるため、ご指導をお願いします。

質問@
下のようなプログラムを組みましたが、キャラクタ・アニメーションの方法が良く分かりません。どこが間違っていますか?
質問A
下のプログラムは間違いながらも描写できている、という感じがしています。コマンドの書き方や使い方がおかしいところはありませんか?
質問B
HSPDXFIXの説明書に、一つのバッファにDirectDrawとDirect3Dで使用する画像を共存させない方が速度面で有利になります、とありますが、DirectXを使い始めたばかりなので、Drawと3Dの区別がうまく付きません。また、パレットモードの意味もよく分かりません。何か良い具体例はありませんか?

<プログラム>
#include "hspdxfix.as"
                            ;systemとスクリーンの初期化
    es_ini
    if stat=1 : goto *dderr1
    es_screen 640,480,32,1,0,1
    if stat=1 : goto *dderr1
    if stat=2 : goto *dderr2

    goto *start                ; 正常に完了

*dderr1
    dialog "DirectXの初期化に失敗しました。",1 :end
*dderr2
    dialog "スクリーンの初期化に失敗しました。",1 :end
*dderr3
    es_bye : dialog "VRAMの容量が不足しています。",1 :end
*start


    buffer 6,,,1 : picload "***.bmp" : es_buffer 6,2,0,0,1        ;***の画像読み込み
    if stat=1 : goto *dderr3                    ;VRAMの容量が不足している場合
    es_size 80,80 : es_pat 6,0,0,1 : es_pat 7,80,0,1 : es_pat 8,160,0,1
    es_pat 9,240,0,1 : es_pat 10,320,0,1 : es_link 10,6

    gsel 0                            ;ウインドウをアクティブに
*main
    stick ky,$1f
    if ky&$80 :end

    es_cls
    es_draw

    es_set 6,440,140,6 : es_effect 6,80,80,0,0,0,ESB_ADD,128

    es_sync                ;画面更新
    await 128
    goto *main


[413]レス
Sinagawa
2004/12/09 12:25:22

すみません、レス遅れました。

> その後、色々と試してみましたが、やはりノートPCだけ問題が発生します。
>しかも、HSP2.61とHSPDXFIX Ver0.15beta3という特定の条件下のみで発生します。
再現性がない以上断定はできませんが、メモリ回りなどハードウェアよりの問題を含め
複数の要因が絡んで発生しているのかもしれませんし、ひょっとしたら今後のバージョンアップで
直ったり再発したりするかもしれません(コンパイラの最適化でバグが発生することがあるらしいので)。

> それと、別件ですが、es_flag命令で、beta3では$500、$400どちらを指定しても
>スプライト表示ONで自由落下してしまいます。
>flag値の仕様とは違う動作ですが、これは前バージョンとの兼ね合いで
>そういった動作にしているのでしょうか?
おそらくフラグ変更を一切行っていない状態のスプライトの生存を示すためのフラグとして
用意されたもので、現状ではこのフラグをOFFにしたときにスプライトを表示しないようにしても
他の何かしらのフラグと併用しないとスプライトが消滅してしまうのでそのままにしてあります。


[412]その後
葦田ひろかず
2004/12/06 12:08:18

 その後、色々と試してみましたが、やはりノートPCだけ問題が発生します。
しかも、HSP2.61とHSPDXFIX Ver0.15beta3という特定の条件下のみで発生します。

■ノートPCでの動作
HSP2.61とHSPDXFIX Ver0.15    ・・・ 問題無し
HSP2.61とHSPDXFIX Ver0.15beta3 ・・・ 強制終了
HSP2.6とHSPDXFIX Ver0.15    ・・・ 問題無し
HSP2.6とHSPDXFIX Ver0.15beta3 ・・・ 問題無し

■デスクトップPC2台
まったく問題無し

 原因が分からないので少々気味が悪いですが、HSP2.6では問題が発生しないので、
HSP2.6を使用していきたいと思います。

 それと、別件ですが、es_flag命令で、beta3では$500、$400どちらを指定しても
スプライト表示ONで自由落下してしまいます。
flag値の仕様とは違う動作ですが、これは前バージョンとの兼ね合いで
そういった動作にしているのでしょうか?


[411]機種依存のような気がします
葦田ひろかず
2004/12/03 09:52:56

 すみません、返信が遅れました。
他のPCで試したところ、問題無く動作しました。
今のところ、デスクトップPC2台は問題無く動作し、ノートPC1台で問題が発生しています。
ノートPCは、COMPAQ evo n150、Win2000SP4、DirectX9.0cです。
ノートPCでは、Ver0.15は問題なく動作していました。
また、beta3でもHSP2.6では問題なく動作し、HSP2.61のみ問題が発生するようです。
 もう少し、色々と調べてみます。また、ご報告いたします。


[410]Re:es_drawで落ちます
Sinagawa
2004/12/01 02:03:23

>beta3を使用してみたのですが、es_drawで強制終了されてしまいます。
>使用解像度は800x600 256色、Direct3Dは使用していません。
>また、es_ini 512,1024,256、es_drawはパラメータ指定無しで使用しています。
> 強制終了は、起動直後に発生する訳では無く、数秒間正常に動作した後、
>突然、強制終了となります。
とりあえずDirect3Dを使っていないHSPのサンプルで試してみましたが問題なく動作しました。
どのようなスプライトを表示させているか、どのタイミングで落ちるかなど具体的な状況や、
以前のバージョンで発生していたかどうかなどわかりますでしょうか。


[409]es_drawで落ちます
葦田ひろかず
2004/11/30 11:24:13

 こんにちは。早速ですが質問があります。
beta3を使用してみたのですが、es_drawで強制終了されてしまいます。
使用解像度は800x600 256色、Direct3Dは使用していません。
また、es_ini 512,1024,256、es_drawはパラメータ指定無しで使用しています。
 強制終了は、起動直後に発生する訳では無く、数秒間正常に動作した後、
突然、強制終了となります。
 原因等、分かりますでしょうか?
よろしくお願いいたします。


[408]有り難うございます
葦田ひろかず
2004/11/25 09:30:45

 有り難うございます。修正を宜しくお願い致します。
自由落下移動の件についても、了解いたしました。
今後ともよろしくお願いいたします。


[407]Re:β版でうまく動作しません
Sinagawa
2004/11/24 09:34:28

>HSPDXFIX Ver0.15beta2を使用してみたのですが、強制終了されてしまいます。
>どうやらes_screenで落ちているようなのですが、原因は分かりますでしょうか?
es_d3dopt実装時の副作用でDirect3Dを使用しないと落ちてしまうようです。
次のバージョンで直しておきます。

>スプライトの自由落下移動で、画面端で跳ね返らない設定というのは出来ますでしょうか?
想定していなかったのでヘルプには書かれていませんが、es_bound命令で第3パラメータに
0を指定することで落ちっぱなしにすることができます。


[406]β版でうまく動作しません
葦田ひろかず
2004/11/23 13:51:57

 こんにちは。早速ですが質問がございます。
HSPDXFIX Ver0.15beta2を使用してみたのですが、強制終了されてしまいます。
どうやらes_screenで落ちているようなのですが、原因は分かりますでしょうか?
HSPDXFIX Ver0.15では問題なく動作します。

 今作成しているものでは、es_screen 800,600,8,0,0,0
としています。
この場合、実行して一旦画面が真っ黒になった後、プログラムが終了し
何事も無くWindow画面に戻ってしまいます。

 もう一つ、要望があるのですが、
スプライトの自由落下移動で、画面端で跳ね返らない設定というのは出来ますでしょうか?
画面端で跳ね返らず、そのまま画面外に消えていくような動作も欲しいのですが、
もし、機能追加が難しくないようであれば、実装して頂けると大変有り難いです。

 以上、よろしくお願いいたします。


[405]Re:黄色が表示されない
Sinagawa
2004/11/23 11:07:49

>どうやっても黄色近くの色が表示されません(黒色っぽい色になってしまいます)。
もしパレットモードで使用しているのであればパレットに黄色があるか確認してください。
es_bufferはデフォルトだとバッファに画像を登録した後パレットを更新しますので、その時に
黄色がない画像を転送しているかもしれません。

>あと、解像度を320*240でやっているのですが、
>この解像度だとフルカラーにしようとするとなぜかスクリーンの初期化に失敗します。
>ちなみに解像度は320*240でも大丈夫でしょうか?
お使いのグラフィックボードは320*240で16bit以上のカラーモードをサポートしていますでしょうか。
コントロールパネルからDirectXのプロパティを開き、「DirectDraw」タブをクリックすると
「Supported Modes」という項目がありますので、その中に「320x240x16」などの表示がなければ
サポートしていない画面モードに変更しようとしてエラーが出ていることになります。


[404]黄色が表示されない
トル
2004/11/22 18:39:24

はじめまして、トルと申します。
最近HSPDXを使ってゲームを作り始めたのですが、
どうやっても黄色近くの色が表示されません(黒色っぽい色になってしまいます)。
あと、解像度を320*240でやっているのですが、
この解像度だとフルカラーにしようとするとなぜかスクリーンの初期化に失敗します。
ちなみに解像度は320*240でも大丈夫でしょうか?


[403]HSP3.0のβ版がリリースされましたが
Sinagawa
2004/11/17 10:46:11

タイプ$202を使用したプラグインとの互換性がない(というか$202に対応していない)ために
現状ではHSPDXFIXをHSP3.0上で使用することができません。
もともとHSP2が小さな基盤をゴテゴテと拡張して育っていったものだと考えると
そのくらいは仕方ないかなという感じではありますが、いろいろ不明な点などがあることも含めて
いきなりシフトするのは得策ではないと判断しましたので、とりあえずこちらとしては
HSP3.0が正式リリースするかおにたまさんからアナウンスがあるか、周りの状況が変化するまでは
2.6対応でいこうと思います。というか、場合によっては存在意義を持たせるための大幅な
路線変更すら必要になる可能性もありますので・・・。


[402]レス
Sinagawa
2004/11/11 12:30:13

>es_size命令で、縦長或いは横長のスプライトを作成すると、
>表示は正常ですが当たり判定がおかしくなるようです。
確認したところ、当たり判定の計算式に誤りがありました。
次のバージョンで修正しておきます。


[401](無題)
ma
2004/11/10 18:53:23

追記です。
今まで長いスプライトにtype値を設定し、別のスプライトのNoからes_checkで衝突判定を行っていましたが
これを逆に、長いスプライトのNoから別のスプライトのtype値を検索するように衝突判定すると正常になります。

一応解決方法は見つかりましたが、これはどうなんでしょう・・・


[400]es_sizeについて
ma
2004/11/10 18:36:04

失礼致します。es_size命令で、縦長或いは横長のスプライトを作成すると、
表示は正常ですが当たり判定がおかしくなるようです。
64*64では正常なのですが、128*32にしてみるとそうなりました。
ソースを見ても、問題は無いようなのですが・・・。


[399]ありがとうございます
Y+Y=M.H
(http://www.h2.dion.ne.jp/~pk_pc) 2004/10/26 08:48:12

さっそくの返信、ありがとうございます!
es_gdi、試してみます!


[398]解決いたしました。
唯趣 漂
2004/10/24 20:24:11

すみません。
完全にこちらのミスでした。むしろ、なぜ今まで動いていたのかが分からないぐらいでした。
命令の引数が中途半端なところで終わっていたための、なんとも初歩的なミスで、よくよく確認もせずに書き込んだことを深くお詫び申し上げます。


[397]HSPDXとHSPDXFIXの相違について
唯趣 漂
2004/10/23 22:36:44


はじめまして。唯趣と申します。
この度は、半透明処理と、スプライトの回転処理などに惹かれて、HSPDXからHSPDXFIXに乗り換えさせていただきました。
その際、インクルードファイル名を"hspdxfix.as"に変更し、es_screenの引数を追加してそのままコンパイルしました。
それを実行してみたところ、途中までは正常に動作していたのですが、あるタイミングで強制終了されてしまいます。(HSPDXでは正常動作)
その辺りのプログラムを見直してみたところ、特に原因となるようなものが見つけられません。
es_check命令がそのタイミングで初めて実行されている他は、強制終了がされる前に一度は実行されています。(ひょっとしたら見落としがあるかもしれませんが・・・)

何か、原因となるような事があれば、教えていただけないでしょうか?



[396]う〜む・・・
AS
2004/10/23 19:18:47

謎ですねぇ・・・見つからないというのが。
HSP自体の.NETで開発されたDLLに対しての処理がおかしいのかなぁって思ったんですが、よくわかりませんね・・・(汗
家にもVS.NETがあれば・・・って古いのMeしかないのでこちらで調べるのも無理です・・・一応、いろいろこちらでも調べてみます。


[395]レス
Sinagawa
2004/10/22 12:23:50

>ASさん
アドバイスありがとうございます。
.NET Frameworkはインストールしてあるのですが、それでも動作しません(hspdxfix.dllが見つかりませんとエラーが出る)。
VS.NET2003でコンパイルされているHSP自体は動くので、その当たりは問題ないはずなのですが。
ただ、SP1を当ててあるにもかかわらずバージョン番号が古いままなのが気になります。
まあ差し当たりVS.NETでコンパイルしないといけないような状況でもないので、じっくりと調べていこうと思います。

>Y+Y=M.Hさん
HSPが作成したウィンドウをDirectXが横取りするような形になりますので、基本的にHSPDXFIXを使用した時点で
パレットモード云々に関係なく標準描画命令は使えなくなると思ってください。
一応、使用するにあたっていろいろ制約があっても良いのならes_gdi命令を使って標準描画命令を
使用することはできますが。


[394]HSPDXFIXのパレットモードについて
Y+Y=M.H
(http://www.h2.dion.ne.jp/~pk_pc) 2004/10/22 11:02:02

HSPDXFIXを使ってフルスクリーンにしたときに、フルカラーならgcopy等標準命令が使えますが、パレットモードならやっぱり標準命令は使えないんでしょうか?

[393]VS.NETでコンパイル
AS
2004/10/21 14:20:21

したものは.NET Frameworkが必要では?
もし、.NET Frameworkを98SEにいれてないのでしたら.NET Frameworkをいれてもう一度動作確認してみてはいかかでしょうか?


[392]レス
Sinagawa
2004/10/11 12:05:03

>どのような状態なのか文章で説明するのが難しいので、
>メールで写真を送らせていただいてよろしいでしょうか? 
はい、お願いします。


[391]es_move(仮)
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2004/10/10 23:34:57

>命令追加+フラグ追加で実装しようと思います。 
個人的なリクエストにも関わらず、すぐに取り入れてくれて本当に感謝です。
更新、楽しみに待ってます^^


[390]レスありがとうございます
TOSHI
2004/10/10 13:12:24

やっぱりこちらの環境が問題ですか。
どのような状態なのか文章で説明するのが難しいので、
メールで写真を送らせていただいてよろしいでしょうか?


[389]レス
Sinagawa
2004/10/10 12:27:20

>Direct3Dを使ってスプライトを表示するとなぜか縦長になり、
>es_sizeで指定した以上の大きさが表示されます。
おそらく環境依存の問題だと思います。こちらでは問題なく表示できているので原因はわかりません。
ところで、これは縦に拡大されたようになっている、ということでよろしいでしょうか?


[388]質問させてください
TOSHI
2004/10/10 09:31:07

はじめまして、HSPDXFIXを使わせていただいておりますTOSHIと申します。
HSPDXFIXを使うと非常にプログラムが楽になり、感謝の限りです。
ただどうしてもわからない事がありまして、質問させてください。

Direct3Dを使ってスプライトを表示するとなぜか縦長になり、
es_sizeで指定した以上の大きさが表示されます。
またDirect3Dを使用しなければ、一切問題はありません。
サンプルソースの「TEST5D3D」でも同じことが起こっておりました。

これはどのようにしたら解決するのでしょうか?
もしくはこちらの環境が原因なのでしょうか?
いろいろと試したのですが、どうしてもうまくいきませんでして、
教えてくださいますようお願い致します。





[387]有難うございます
葦田ひろかず
2004/10/09 16:56:49

>>1.スプライトの自由落下移動がうまくいきません。
>内部処理でフラグ値の解釈を間違えていました。次のバージョンで直しておきます。

 対応、有難うございます。修正をよろしくお願いいたします。

>>2.添付のHSPDXFIX.TXTにあるes_bound命令ですが、p3の記述が抜けています。
>ワンキーヘルプに記述があるにもかかわらず、なぜかテキストの方にはパラメータの説明だけ抜け落ちていました。

 説明、有難うございます。ワンキーヘルプの方は見ていませんでした。済みません。

>>3.スプライト表示エリア設定(es_window)についてですが、以前と仕様が変更に
>>なったのでしょうか?
>スプライトの表示領域を変更する命令でオフセットまで変わるのは不自然だと思ったので、
>Ver 0.14beta4で仕様を変更しました。

 仕様変更の件、了解致しました。
仕様変更による不都合は、特に無いと思います。
今作っているのも、スクリプトを若干書き換えるだけで対応できると思いますので。

 それでは、今後ともよろしくお願いいたします。


[386]レス
Sinagawa
2004/10/08 11:59:00

>葦田ひろかずさん
>1.スプライトの自由落下移動がうまくいきません。
内部処理でフラグ値の解釈を間違えていました。次のバージョンで直しておきます。
とりあえず、現バージョンでは$400を指定すればうまくいきます。

>2.添付のHSPDXFIX.TXTにあるes_bound命令ですが、p3の記述が抜けています。
ワンキーヘルプに記述があるにもかかわらず、なぜかテキストの方にはパラメータの説明だけ抜け落ちていました。
p3は画面端でバウンドを行うフラグで、1がX方向のみ、2がY方向のみ、3が両方となって
います。
このパラメータは特に必要がない限り指定する必要がないため、デフォルト値を設定するようにしておきます。

>3.スプライト表示エリア設定(es_window)についてですが、以前と仕様が変更になった
のでしょうか?
スプライトの表示領域を変更する命令でオフセットまで変わるのは不自然だと思ったので、
Ver 0.14beta4で仕様を変更しました。
更新履歴には修正と書いてありますが、この更新は独断で行ったことで、そもそもそれが実際に
不具合なのかはわかりませんので、もし不都合などありましたら以前の仕様に戻そうと思います。

こちらの不手際により、余計な混乱を招く結果となってしまったようで申し訳ございませんでした。

>ゆうきさん
>その方法ですが、個人的には汎用的な設計が出来る様、完全に分離して欲しいと思って
います。
>
>>es_draw命令に描画するだけのフラグをつけて、新たにes_move(仮)命令を実装
>そうなれば最高です^^
では、命令追加+フラグ追加で実装しようと思います。


[385]es_move(仮)
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2004/10/08 00:39:00

要望を聞いてくれて有難うございます。
その方法ですが、個人的には汎用的な設計が出来る様、完全に分離して欲しいと思っています。

>es_draw命令に描画するだけのフラグをつけて、新たにes_move(仮)命令を実装
そうなれば最高です^^
あとフラグ追加、0(両方) 1(移動のみ) 2(描画のみ)
みたいなのも、いいと思います。


[384]スプライト表示エリア設定について
葦田ひろかず
2004/10/07 15:00:31

 すみません。追加の質問です。

3.スプライト表示エリア設定(es_window)についてですが、以前と仕様が変更になった
のでしょうか?
 以前は、スプライト表示基点X座標、スプライト表示基点Y座標が
スプライトの表示座標0,0になっていたのですが・・・

 以上、よろしくお願いいたします。


[383]自由落下移動について
葦田ひろかず
2004/10/07 14:30:06

 はじめまして。HSPDXFIXのバージョンアップに大変感謝しております。
質問が2点あります。

1.スプライトの自由落下移動がうまくいきません。
es_flagのp2に$500を入れているのですが、一瞬でスプライトが消えてしまいます。
何か設定が間違っているのでしょうか?

2.添付のHSPDXFIX.TXTにあるes_bound命令ですが、p3の記述が抜けています。
その為、p3にどういう数値を入れたら良いのか分かりません。

 以上、お手数をお掛けしますが、ご確認をよろしくお願いいたします。


[382]レス
Sinagawa
2004/10/06 12:51:15

>たかのんさん
後で知ったんですが、いろんな意味で機能していなかったようです>うちのリンクページ

>ゆうきさん
>ところで要望なんですが、現時点ではes_aposやse_adir等でスプライトを自動的に動かすタイミングは
>es_drawの時だったと思います。しかし、スプライトを動かさずに描画のみしたい場合や、
>フレームスキップの設計がしたい場合、このままではやや難しい状態にあります。
>そこで、スプライトを描画する処理と、自動的に動かす処理を、どうにか分離できないかと思っています。

es_draw命令に描画するだけのフラグをつけて、新たにes_move(仮)命令を実装、と言う風でいいですかねえ?
es_draw命令にパラメータ付け足すのならスキップするフレーム数を指定するようにした方が
何となくスマートな気もしますが、どちらがよいでしょうか(一応第三者の意見歓迎)。
処理の分離自体は容易にできるはずですので、やってみようと思います。

>講座のDirectXを使おうの巻・その2についてですが。
>4【キャラクタ登録】の es_pat 命令のp2,p3は、キャラクタのサイズを
>指定するのではなくて、キャラクタパターンの左上X、Y座標を指定する
>んだったような気がします…。

確認しました。修正しておきます。


[381]こんにちわ
ゆうき
(http://ww22.tiki.ne.jp/~y-shirakawa/) 2004/10/06 00:01:24

サイトの運営再開を嬉しく思ってる者の一人です。
HSPDXFIXの使い勝手が良すぎるので、次作の弾幕ゲーの描画ライブラリとして使用させていただきたいと思っています。
ところで要望なんですが、現時点ではes_aposやse_adir等でスプライトを自動的に動かすタイミングはes_drawの時だったと思います。しかし、スプライトを動かさずに描画のみしたい場合や、フレームスキップの設計がしたい場合、このままではやや難しい状態にあります。
そこで、スプライトを描画する処理と、自動的に動かす処理を、どうにか分離できないかと思っています。

・報告
講座のDirectXを使おうの巻・その2についてですが。
4【キャラクタ登録】の es_pat 命令のp2,p3は、キャラクタのサイズを
指定するのではなくて、キャラクタパターンの左上X、Y座標を指定する
んだったような気がします…。


[380]うおっ
たかのん
(http://homepage1.nifty.com/takanon/) 2004/10/05 22:38:44

リンクがトップページにきてるっ
ありがたやありがたや・・・。


[379]ありがとうございます
ひろっち
2004/09/20 12:54:36

他の場所でループして、弾とマップ判定をして改善されました。
製作続けます!


[378]有り難う御座います。
x68k
(http://www.zeroqoo.com/) 2004/09/17 19:39:57

>了解しました。次回の更新でリンクを張ります。
有り難う御座います。
こちらからは、リンク完了しました!
これからも、どうぞ宜しくお願い致します。


[377]ありがとうございます
ふじもと
2004/09/17 00:15:10

>次のバージョンで直しておきます。
ありがとうございます。
ゲームとかは作りませんが(作れない人(^^;)、HSPDXFIXって便利ですね!


[376]レス
Sinagawa
2004/09/16 14:38:05

>x68kさん
了解しました。次回の更新でリンクを張ります。

>ふじもとさん
es_effectの回転角はes_iniに依存しますが、バグで(es_iniで指定した精度/4096)周しか
回転しないようになっていました。次のバージョンで直しておきます。


[375]
ふじもと
2004/09/16 00:29:46

『回転角は一周4096度で固定』について・・・です。
誤ってEnter押してしまいました(^^;


[374]『回転角は一周4096度で固定』ni
ふじもと
2004/09/16 00:26:16

es_iniで、周の精度を4096以下にすると、スプライトが回転しないみたいです。

長くてすみませんm(_ _)m
;ここから▽
#include "hspdxfix.as"
;
es_ini 5,5,64;es_ini 5,5,4096
es_screen 640,480,32,0,0,1
if stat=1{end}:if stat=2{end}
;キャラクタの用意
buffer 3,320,128,0:picload "TESTCHR.BMP"
es_buffer 0,0,0,0,1:es_size 64,64,100,1:es_pat 0,0,64,0
;
gsel 0:es_cls:es_sync:es_set 0,2,20,0
;ループ
 repeat
 ct++
 es_effect 0,64,64,0,0,ct,-1,255
 stick ky,$1f:if ky&$80{end}
 es_cls:es_draw:es_sync:await
 loop
;ここまで△


[373]HSPDXFIX V0.15
x68k
(http://www.zeroqoo.com/) 2004/09/15 18:59:49

初めまして、
先ほど、Ver0.15をダウンロードさせて頂きました。
有り難う御座います。

あと、相互リンクして頂くことって出来ますでしょうか?


[372]レス2
Sinagawa
2004/09/14 12:30:41

今ひろっちさんのソースを読み返してたら、どうもマップチップ一つずつに対して全ての弾の
当たり判定を調べているようですが、これを弾の座標にあるマップチップを調べて判定を
取るようにすれば、ループ回数がかなり減るので改善されるんじゃないかと思います。


[371]レス
Sinagawa
2004/09/14 12:21:30

昔自分が作ったゲームで、当たり判定をrepeatとes_findで回しているところがあったので
比較してみたところ、es_findでスプライトNo.を取得するための変数と検索開始No.の変数を
別に用意していました。
4年前に作ったもので、動作確認していないので意味があってそうしたのか不明ですが、
それでうまくいくか試してみてください。


[370](無題)
ひろっち
2004/09/13 19:41:42

ミサイルは2連射 レーザーは多めです。
オプションも使うので、×4になります。
ソースはこんな感じですが・・・。
http://sak2-2.tok2.com/home/hirottig/fasu.txt 


[369]レス
Sinagawa
2004/09/13 11:29:08

>マップ判定でミサイルとレーザー、自機の弾と当たり判定したんですが
>処理落ちが出ます。マップチップと自機の弾との判定ですが。
>どうもショットするだけで、プログラム速度が遅いんです。

グラディウス風STGと言うことで、ショットは3〜4発程度と考えるとよほどマシンスペックが
低くない限りはその程度の処理でスローがかかると言うことはまずないはずです。
考えられる原因として、当たり判定を調べる際に何らかのミスで必要以上、それも
かなりの量のループが発生しているか、たとえばバッファがメインメモリに置かれるなどして
ハードウェアエミュレーションで動作しているせいで描画回りが重くなっていて、
たまたまショットを撃った時にスペックの限界に来てしまったか、そのあたりじゃないかと思います。


[368]始めまして。
ひろっち
2004/09/12 19:51:29

HSPDXFIXを使って、シューティングゲーム(グラディウスネタ)「フォース」を作っています。
マップ判定でミサイルとレーザー、自機の弾と当たり判定したんですが
処理落ちが出ます。マップチップと自機の弾との判定ですが。
どうもショットするだけで、プログラム速度が遅いんです。


[367]v0.15
たかのん
(http://homepage1.nifty.com/takanon/) 2004/09/12 14:13:34

まずはv0.15正式版リリースお疲れ様でした。
先ほどダウンロードさせて頂きリファレンスを読んでいます。

今作っているソフトの絵が8bitで網羅されてしまっているため
ひとまずは低スペック対応版としてDirect3Dの機能は使わず
完成させる予定です・・・(涙)

4年経って完成してないですからね。
いい加減どこかでケリつけないと>自分


[366]ありがとうございました
だりそう
2004/08/23 16:29:10

お陰様で解決できました。ありがとうございました。

[365]ありがとうございました
Y+Y=M.H
(http://www.h2.dion.ne.jp/~pk_pc) 2004/08/20 10:10:55

さっそくの返信、ありがとうございました

う〜ん、残念です(*o*)


[364]レス
Sinagawa
2004/08/20 00:34:08

>Y+Y=M.Hさん
>REPTOOLで調べたところ、アルファ成分をサポートしていないとなったのですが、
>コレの関係で半透明処理が使えないのでしょうか?

そうです。残念ですが、お使いのハードウェアではアルファ値が固定になるために、
ブレンドファクターによっては透過はされても透明度を変更できない状態になります。

>だりそうさん
>質問なのですが、es_adirやes_aposを使うと、
>画像描画やスプライトを使っていないのに、
>オフスクリーンバッファID0の座標0,0の32x32サイズの
>画面が表示されてしまうのですが、どうすればよいのか、教えてください。

es_bufferを実行した後に「gsel 0」が入っているかどうか確認してください。
もし、ほかの描画命令などが問題なく動いているのであれば、その現象が発生する
スクリプトを見てみないとわからないです。


[363]es_adirとes_aposについての質問
だりそう
(http://www31.ocn.ne.jp/~darisou) 2004/08/19 20:55:43

はじめまして。いつもhspdxを使わせて頂いています。
質問なのですが、es_adirやes_aposを使うと、
画像描画やスプライトを使っていないのに、
オフスクリーンバッファID0の座標0,0の32x32サイズの
画面が表示されてしまうのですが、どうすればよいのか、教えてください。
adirだと、勝手にその32x32のデータが指定した速度で動いてしまいます。
hspdxfixでも試してみたのですが、うまくいかないようなんです。


[362]REPTOOLで【アルファ成分をサポートしていない】
Y+Y=M.H
(http://www.h2.dion.ne.jp/~pk_pc) 2004/08/19 15:03:48

HSPDXFIX使わせてもらってます!
ありがとうございますm(_ _)m

とうとうHSPDXFIXでも半透明処理が使えるように・・・
と思っていたら私のパソコンじゃどうにもうまくいきません

REPTOOLで調べたところ、アルファ成分をサポートしていないとなったのですが、
コレの関係で半透明処理が使えないのでしょうか?

すみませんが、教えてください


[361]ありがとうございますー!
イナダ
(http://yamagin.hp.infoseek.co.jp/jugo3.lzh) 2004/08/14 23:58:30

>次のバージョンで直しておきます。
ありがとうございますー!
HSPDXは、本当に手軽にゲーム製作が出来るので、
キャラクターの管理とか適当にしていたので・・・。
ちなみにリンク先は、今製作中のものです。




[360]レス
Sinagawa
2004/08/13 10:24:17

>ところでes_flagでカウントダウンタイマーを設定したスプライトを消滅前にes_killで消去した場合
>再度es_newで同じナンバーのスプライトを呼び出した場合タイマーがリセットされないのですが・・・。

es_blink命令を作った時に拡張したカウンターをリセットしてませんでした。
次のバージョンで直しておきます。