;影文字をつける
	font "MSゴシック",45,1
	color 0,0,0
	pos 102,102 : mes "見栄えはどうかな?"
	color 255,255,255
	pos 100,100 : mes "見栄えはどうかな?"
	stop
二度書きします。はじめに影の部分。次に少しずらして実体を書く。 このとき影と実体のずらし方、ずらす大きさで、影は自由に付けられます。

;同じ場所に表示する 
	pos 100,100 : mes "おはよう"
	wait 100
	color 255,255,255
	boxf 100,100,150,120
	color 0,0,0
	pos 100,100 : mes "こんにちは"
	stop	
これは、単純に前に書いた部分を消してそこにもう一度書けばいいのです。 今の場合は、バックが白なので、白い四角(boxf)で消しました。 試しに、最初のcolorの数値を変えてみるとわかりやすいです。

;同じ場所に表示する2
	screen 0,640,480 : picload "hsp2ttl.jpg",1,100,100
	buffer 2,640,480 : picload "hsp2ttl.jpg",1,100,100
	gsel 0
	color 255,0,0
	pos 150,250 : mes "おはよう"
	wait 100
	pos 150,250 : gcopy 2,150,250,100,20
	pos 150,250 : mes "こんにちは"
	stop	
背景がある場合には、bufferに同じ画面を用意しておきます。もちろん初期状態のですよ。 いままで、boxfで行っていた塗りつぶしをgcopyで行います。これで背景があっても 同じ場所に表示することが可能です。ちなみに、boxfを使用するより処理は速いみたいです。

;フェードアウト・イン(パレットモード)
	screen 0,,,1		;第4パラメータは1にする事
				;(パレットモード)
	picload "hsp2ttl.jpg"
	pf = 0			;初期値
				;-256で黒、256で白、0で元の画像
	repeat 16
		wait 10
		palfade pf : redraw
		pf = pf - 16
	loop
	repeat 16
		wait 10
		palfade pf : redraw
		pf = pf + 16
	loop
	stop
これは、あくまでパレットモードの時の方法です。palfadeで指定する数値は どれだけそのパレットを明るく(暗く)するかです。ただし、これを実行しても 画面には何も影響がないので、redrawを使って再描画を行うと、暗くなったり明るくなったりしています。 このプログラムはブラックアウトですが、ホワイトアウトも可能です。考えてみてくださいね。

;縦書き表示1
	f_size=20
	font "MS 明朝",f_size

	sdim data,50,3
	data.0="プ\nロ\nグ\nラ\nム"
	data.1="い\nつ\nか\nか\nな\nら\nず"
	data.2="き\nわ\nめ\nる\nぞ"

	repeat 3
		pos 100-(f_size*cnt),50
		mes data.cnt
	loop
	stop
表示する言葉がすでに決まっている場合は、ソース内で"\n"で区切って書いてあげると 縦書きになります。あとは、表示位置を調整するだけです。f_sizeだけ ずらすとちょっとびっちりになるのでプラスαを適当に加えると見やすいでしょう。

;縦書き表示2
	f_size=20
	font "MS 明朝",f_size
	sdim data,200
	data={"
		ちょっと長めに書いてみようかと思いました
		これだと記号をはさむのは大変だよね
		でもこれだと記号なくても改行されるからね。
		"}

	pos 100,50
	y0=csry			;書き始めのy座標を取得
	strlen mojisuu,data
	mojisuu=mojisuu/2
	repeat mojisuu
		kari=""
		strmid kari,data,cnt*2,2
		if kari="\n" {
			pos csrx-f_size,y0
			continue
		}
		mes kari
	loop
	stop
表示する言葉が長い場合、変数に代入する方法も{ }の括弧を使うと便利です。 この括弧を使うと"\n"の記号はなくても自動的に入っています。 ただ、実行してもらうとわかりますが、句点などの表示位置がぎこちないです(^^;
モジュールを用意してあるのでそちらを利用してもかまいません。

;桁数をそろえて表示1
#define KETA 8
	a=16
	repeat 20
		a_str=a
		str a_str,KETA
		mes a_str
		a=a*2
	loop
	stop
数字を表示するときにHSPでは、必ず左詰になります。でも、ゲームでスコアーの 表示するときには格好がよくないので、strを使って0を含めた文字列に変換しましょう。

;桁数をそろえて表示2
#define KETA 8
	a=16
	repeat 20
		a_str=a
		str a_str,KETA
		repeat KETA
			peek kari,a_str,cnt
			if kari='0' {
				poke a_str,cnt,' '
			} else {
				break
			}
		loop
		mes a_str
		a=a*2
	loop
	stop
数字を表示するときにHSPでは、必ず左詰になります。しかしstrで0を含んだ 文字列に変換したあとに、0の部分を空白に置き換えれば、右揃えの表示も可能になります。
モジュールを用意してあるのでそちらを利用してもかまいません。

;文字or画像を移動表示させる
	moji="流れる文字"
	f_size=20
	font "MS ゴシック",f_size,1

	repeat 
		y=cnt*f_size/1		;割り算で滑らかさ調整
		pos 100,y
		color 0,0,0 : mes moji
		if y*2>=winy : break	;真ん中で終了
		await 50		;速度調整
		color 255,255,255
		boxf 0,y,winx,y+f_size
	loop
	stop
アニメーションの基本です。表示した後、少し待って消す。また、表示する・・・・の 繰り返しです。同じ場所に表示の応用例だと思ってください。よって、背景に画像が あっても、gcopyをつかって同じようにできます。通常、最小面積で消すのですが ソースがややこしくなるので、このサンプルでは帯状に消しています。これを参考に 横から文字が流れるようなものも作れると思います。画像の場合は、bufferに先に表示しておいて mesの変わりにgcopyで書くようにすればいいです。

;画像の反転、180°回転表示
	buffer 2
	f_size=40
	font "MS ゴシック",f_size,1
	color 0,0,0 : mes "?"

	gsel 0
	;通常
	pos 0,0
	gzoom f_size,f_size,2,0,0,f_size,f_size
	;左右反転
	pos f_size,f_size
	gzoom -f_size,f_size,2,0,0,f_size,f_size
	;上下反転
	pos 0,f_size*3
	gzoom f_size,-f_size,2,0,0,f_size,f_size
	;180度回転
	pos f_size,f_size*4
	gzoom -f_size,-f_size,2,0,0,f_size,f_size
	stop
gzoomと言う命令は、変倍コピーの命令ですが、カレントポジションを左上の座標とし p1,p2で指定するものを右下の座標としてコピーしています。そのためマイナスを 指定すると、裏返した画像が表示されます。このとき、前述のことを考えて カレントポジションを調整してからgzoomを行わないと、期待された位置に画像は 表示されませんので注意してください。

;ブラックorホワイトアウト(フルカラー)
#include "hspext.as"
	picload "hsp2ttl.jpg"
	gfini
	repeat 51
		gfdec 5,5,5
		redraw 1
		await 50
	loop
	picload "hsp2ttl.jpg"
	repeat 51
		gfinc 5,5,5
		redraw 1
		await 50
	loop
	stop
DLLが必要になります。gfiniで対象画面を設定します。今回は画面全体なので 特にパラメータは指定していません。
gfdecで暗く、gfincで明るくします。
必ずredraw 1を入れて下さい。そうしないと表示されません。

;ブラックorホワイトイン(フルカラー)
#include "hspext.as"
	buffer 2,,,0
	picload "hsp2ttl.jpg"

	screen 0,640,200,0; : cls 4
	pos 0,0 : gfini 640,200		;コピー先を指定
	repeat 20,1
		gsel 2 : pos 0,0 : gfcopy cnt*5
		gsel 0 : redraw 1
		await 200
	loop
	stop
DLLが必要になります。半透明コピーgfcopyを利用して実現します。
これは少しややこしいです。まず、コピー先はgfiniで指定した部分になります。
gfcopyを行うのはコピー元のウィンドウが描画先になっているときです。そのため gselを使ってからgfcopyを行います。コピー元の左上の座標をposで指定します。
その後gselでコピー先に戻しredraw 1をするとコピーされます。
フェイドはコピーのレート(濃さ)を増やしていくことで擬似的に表現しています。 特にパラメータは指定していません。
gfdecで暗く、gfincで明るくします。
必ずredraw 1を入れて下さい。そうしないと表示されません。


■ 目次へ戻る ■

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル