|
|
2009/8/19(Wed) 07:16:30|NO.27152
hspdxfixのes_exboxfの使い方を教えてください
ゲームでフェードイン・フェードアウトをしたいのですが
es_exboxfを使ってもフェードイン・フェードアウトされません
スクリプトはこんな風にしてます
buffer 1, 640, 480
moji = "フェードテスト"
kazu = strlen(moji)
font "MS ゴシック", 64, 0 : color 0, 0, 0
pos (640 - 32 * kazu) / 2, (480 - 64) / 2 : mes moji
es_buffer 1
gsel 0
fa = 240
fs = 20
repeat 12
gmode 0
pos 0, 0 : es_copy 1, 0, 0, 640, 480
es_exboxf 0, 0, 640, 480, $000000, 0, 0, 0, ESB_ALPHA, fa
fa -= fs
es_sync
await 0
loop
|
|
2009/8/19(Wed) 10:37:30|NO.27153
es_syncが0なので起動した瞬間に処理が終わっている様ですね。
es_syncを66ぐらいにすればちゃんとフェードインでの表示を確認できました。
あと、たった数行で済むのですから初期化部分も書いて
コピペするだけで動作が確認できる様にしておいて下さいね。
手間もありますが初期化部分に問題がある事もありますので。
|
|
2009/8/19(Wed) 15:18:53|NO.27165
ありさん好きです。
|
|
2009/8/19(Wed) 17:37:27|NO.27169
es_syncを66にしてみましたがだめでした
初期化はes_excopyは使えるので問題ないとおもうんですが
es_exboxfはやっぱり使えないです
前回のものに初期化処理を加えたもの
#include "hspdxfix.as"
screen 0, 640, 480, 0, (ginfo_dispx - 640) / 2, (ginfo_dispy - 480) / 2
title "フェードテスト"
dialog "フルスクリーンで起動しますか?", 2, "Config"
if stat = 6 : screenmode = 0
if stat = 7 : screenmode = 1
es_ini 512,512,360 ; system初期化
es_screen 640,480,16,0,screenmode,1 ;スクリーン初期化
if stat=1 : goto *dderr1
if stat=2 : goto *dderr2
goto *start ; 正常に完了
*dderr1
dialog "DirectXの初期化に失敗しました",1
end
*dderr2
dialog "スクリーンの初期化に失敗しました",1
end
*dxerr3
es_bye : wait 100
dialog "VRAMの容量が不足しています。",1 : end
*pushkey
stick esc, 128
if esc = 128 : end
return
*start
buffer 1, 640, 480
moji = "フェードテスト"
kazu = strlen(moji)
font "MS ゴシック", 64, 0 : color 0, 0, 0
pos (640 - 32 * kazu) / 2, (480 - 64) / 2 : mes moji
es_buffer 1
gsel 0
fa = 240
fs = 20
repeat 12
gmode 0
pos 0, 0 : es_copy 1, 0, 0, 640, 480
es_exboxf 0, 0, 640, 480, $000000, 0, 0, 0, ESB_ALPHA, fa
fa -= fs
gosub *pushkey
es_sync 66
await 0
loop
repeat
gmode 0
pos 0, 0 : es_copy 1, 0, 0, 640, 480
gosub *pushkey
es_sync 66
await 0
loop
| |
|
2009/8/20(Thu) 00:36:16|NO.27185
私の環境ではウィンドウでもフルスクリーンでもフェードインします。
es_exboxfの行をコメントアウトするとしなくなります。
|
|
2009/8/20(Thu) 07:11:03|NO.27189
ANTARESさん動作報告ありがとうございます
ちゃんとフェードされるということは
プログラムの書き方の問題ではないということでしょうか?
自分の環境では何回やってもフェードしません
今はbuffer1を黒く塗って
es_excopyでフェードしてます
この方法とes_exboxfでする方法だったら
やっぱりes_exboxfの方が早いですよね?
|
|
2009/8/20(Thu) 15:08:14|NO.27198
モノブロスさんのPCがes_exboxfに対応していない可能性もありますが
(es_excopyは機能するようなので謎ですが・・・)
・HSPとHSPDXを最新の物にしてみる。
・es_screenのカラーモードを24bitや32bitにしてみる(又はデスクトップの色数を変えてみる等)
・es_bufferのオフスクリーンバッファをメインメモリに取ってみる。
等を試してみるともしかしたら正しい動作になるかもしれません。
・・・私に思いつくのはこれくらいですね。
以下はes_excopyとes_exboxfの簡易的な実行速度計測です。
es_excopyとes_exboxfのコメントアウトを切り替えて使ってください。
私の環境ではes_exboxfが約1割程速かったです。
(オフスクリーンバッファがメインメモリだと大差無し)
#include "hspdx.as"
onexit *owari
es_ini
es_screen 640, 480, 16, 0, 1, 1
buffer 1, 640, 480
moji = "アルファテスト"
kazu = strlen(moji)
font "MS ゴシック", 64, 0 : color 0, 0, 0
pos (640 - 32 * kazu) / 2, (480 - 64) / 2 : mes moji
es_buffer 1
buffer 2, 640, 480 : color 255 : boxf
es_buffer 2
gsel 0
wait 50
es_timer t1,0
repeat 1000 ; 1000回繰り返した時間を計測
es_cls 255, 255, 255
gmode 0
pos 0, 0 : es_copy 1, 0, 0, 640, 480
;es_excopy 2, 0, 0, 640, 480, 640, 480, 0, 0, 0, ESB_ALPHA, 128, $ffffff
es_exboxf 0, 0, 640, 480, $ff0000, 0, 0, 0, ESB_ALPHA, 128
es_sync
await
loop
es_timer t2, 0 : t3=t2-t1
color 0, 0, 0 : es_fmes ""+t3
es_sync
stop
*owari
es_bye
end
| |
|
2009/8/21(Fri) 01:09:58|NO.27218
ありさんありがとうございます
ありさんのスクリプトだとちゃんとされたので
ためしにhspdxfixを使わずに
hspdxを使ってみたらちゃんとフェードされました
|
|
2009/8/22(Sat) 01:32:06|NO.27237
作者も書いてるけどhdpdxfixと3.1〜3.2のhspdxは同じものです。
3.0は調べていません。
|
|