zoomin / zoomout モード

zoominは、現在の画面の一部を拡大して、それが次の画面になるようなエフェクトです。
zoomoutは、逆に現在の画面が縮小して、次の画面の一部になるようなエフェクトです。
ノベルゲームのギャラリーモードに使えないかと考案してみました。
D

*define
dim ?10[5]
for %0=1 to 4
	mov ?10[%0],%0*160-140
next
deletemenu
game
*start

; 画面作成

*main
bclear
bg "paper.png",0
for %0=1 to 4
	itoa $0,%0
	lsp %0,":c;ts"+$0+".jpg",?10[%0],20
	bsp %0
next
   if %100=0 print 1
notif %100=0 print 99,1000,"effectlib.dll/zoomout,"+$1+",20,120,90"
bexec $10,%10
if %10=-1 mov %100,0:goto *main
	for %0=1 to 4
		vsp %0,0
	next
	itoa $0,%10
	bg "s"+$0+".jpg",0
	itoa $1,?10[%10]
	print 99,1000,"effectlib.dll/zoomin,"+$1+",20,120,90"
	click
	mov %100,1
goto *main
end

引数の解説

  • "effectlib.dll/"の後は、zoominかzoomoutを指定します。
  • 次の四つの数字は、基準になる画面領域の左上(x, y)と領域の大きさ(w, h)になっています。

zoominは、「指定した領域を広げて次の画面にする」と考えるとわかりやすいでしょう。

応用

基準になる領域の幅と高さは、必ずしも比率は保たなくて構いません。ですので、数値の設定次第では、expandinと同じような「旧画面が縮んで消えて、その下から不動の新画面が出てきた」や、逆の表現が可能です。

今後の課題

StrechBlt()による拡大縮小って、ヘボくないですか? これなら自前でやった方がきっと綺麗。