HSP3Dish.js サンプル 『セルでマップ表示』

更新:2022年8月1日   HSPトップへもどる


『 セルでマップ表示 』 ◆ブラウザ上で動作するページ 

『 マップをスクロール(セル単位) 』ブラウザ上で動作するページ
 

★このスクリプトは WebDish素材のみ使用し、独自画像を使用していませんので、WebDishサービスにそのまま登録できます

いちばん簡単なマップ表示のサンプルスクリプトです。

①のサンプルスクリプト

#include "hsp3dish.as"

title "いちばん簡単なマップ表示 1"

	buffer 1,256,128		// ID 1 (画像バッファ)を準備。読み込むセル画像サイズにあわせてある
	celload "mapbg.png",1	// セル画像をID 1 へ読み込む。 picload は ダメ!
	celdiv	1,64,64			// マップチップ1個の大きさを指定

	gsel 0					//描画先を ID 0 にもどす( Dishプログラムでは常にID 0 だけがメイン画面)

	cew=64 : ceh=64			// セル1個の大きさ

	// マップデータ 10 * 10 マス(実際の画面に表示されるのは全体の一部分の領域。画面サイズによる)
	map=    "6666666666"
	map=map+"6000000006"
	map=map+"6012110006"
	map=map+"6003330006"
	map=map+"6003000006"
	map=map+"6003500006"
	map=map+"6003333306"
	map=map+"6000000006"
	map=map+"6000000006"
	map=map+"6666666666"
	// ↑普通の一行に長い文字列変数を見やすいカタチで作っている(代入している)だけ
	// 0=草原 1=森 2=村 3=土  4=城 5=山(草の上) 6=水面 7=山(土の上)

 //==========================================↓
//メインループ
*main

	stick key,15		// キーボードとマウスの入力受付
	if key&128 : end	// ESCキーで終了

	redraw 0			//仮想画面を書き換えるだけで画面にまだ出さずにおく

	gosub *map_put		//マップ描画

	//マウス座標表示(※削除してもよい)
	title "("+mousex+","+mousey+")" //ウインドウ上部タイトルバーに表示

	redraw 1			//実際の画面へ表示する
	await 100

goto *main
//================================================================
// マップを描画
*map_put

	x=0
	y=0
	repeat 10
		repeat 10
			c=strmid(map,y*10+x,1)	// マップデータ(文字配列)から1文字だけを取り出す
			a = int(c)				// 文字列型の「数字」を「数値」に変換
			pos x*cew, y*ceh		// 左から何個目、上から何行目のセルの位置に
			celput 1,a				// 対応するセルを1つ描画( a は 0~7 の数値)
			x++
		loop
		x=0			//左から何個目のセルか?
		y=y+1		//上から何行目のセルか?
	loop

	// ※ここでは 横10個 × 縦10個 計100個 のセルの描画を繰り返している。
	// 実際の開発では、画面内にみえるぶんだけ繰り返せばよい。
	
return
//================================================================

こちらのWebDish素材 一覧にあるモノは、ファイル名を直接書けば、おなじように直接呼び出して使うことができます。
 hsptv_img.png
には、マップ用のセルとキャラクターのセルが一緒に入っています。


・画像一覧の絵柄が見たい場合は、自分のパソコンのHSP開発セットがはいっているフォルダの
[hsp37beta]-[hsptv] または
[hsp36]-[hsptv]
を開いてみましょう。

・独自のセル画像(マップ用の地形画像)を自分でつくって表示することももちろんできます。
 ただし、独自の画像ファイルを使う場合は、WebDishサービス ではなく、自分のサーバ・スペースなどにアップロードします。

②のサンプルスクリプト

#include "hsp3dish.as"

title "いちばん簡単なマップ表示 2"	// セル単位のスクロール

	screen 0,320,480

	buffer 1,256,128		// ID 1 (画像バッファ)を準備。読み込むセル画像サイズにあわせてある
	celload "mapbg.png",1	// セル画像をID 1 へ読み込む。 picload は ダメ!
	celdiv	1,64,64			// マップチップ1個の大きさを指定

	gsel 0					//描画先を ID 0 にもどす( Dishプログラムでは常にID 0 だけがメイン画面)

	cew=64 : ceh=64			// セル1個の大きさ

	ofsx=0 : ofsy=0			// 

	// マップデータ 10 * 10 マス(実際の画面に表示されるのは全体の一部分の領域。画面サイズによる)
	map=    "6666666666"
	map=map+"6000000006"
	map=map+"6012116106"
	map=map+"6003333006"
	map=map+"6003001116"
	map=map+"6003501416"
	map=map+"6003333316"
	map=map+"6000000006"
	map=map+"6000000006"
	map=map+"6666666666"
	// ↑普通の一行に長い文字列変数を見やすいカタチで作っている(代入している)だけ
	// 0=草原 1=森 2=村 3=土  4=城 5=山(草の上) 6=水面 7=山(土の上)

 //==========================================↓
//メインループ
*main

	stick key,15		// キーボードとマウスの入力受付
	if key&128 : end	// ESCキーで終了

	if key&1 : ofsx--	// ←方向キー(物理キーボード)
	if key&2 : ofsy--	// ↑
	if key&4 : ofsx++	// →
	if key&8 : ofsy++	// ↓

	// 《 タッチ検出 》
	mtlist touchid			//現在タッチされている情報を持つポイントIDリストを取得
	id = touchid(0)			//シングルタッチのみ対応
	mtinfo touch,id
	if touch(0) = 1 {	//タッチしているあいだは実行
		//どこがタッチされたか判定
		ty = touch(2) : tx = touch(1)		//タッチされたxy座標

		if tx<140 : ofsx--	//左
		if tx>200 : ofsx++	//右	 
		if tx>140 && tx<200 && ty<400 : ofsy--	//上
		if tx>140 && tx<200 && ty>400 : ofsy++	//下
		//↑判定条件を各自4つ持てばもっと厳密に範囲判定できる
	}
	
	// 限度判定 (端までスクロールしたらそれ以上は行けない)
	if ofsx<0 : ofsx=0
	if ofsy<0 : ofsy=0
	if ofsx>5 : ofsx=5
	if ofsy>5 : ofsy=5
	
	redraw 0			//仮想画面を書き換えるだけで画面にまだ出さずにおく

	color 1,1,1 : boxf	//黒色で、画面をぬりつぶす
	color 255,255,255 	//白色で
	font "",60
	pos 140,340 : mes "■"	//上
	pos 140,400 : mes "■"	//下
	pos 86,370 : mes "■"	//左
	pos 192,370 : mes "■"	//右

	gosub *map_put		//マップ描画

	redraw 1			//実際の画面へ表示する
	await 100			// 動作が遅すぎる、速すぎる場合はこの数値を調整

goto *main
//================================================================
// マップを描画
*map_put

	x = 0
	y = 0
	
	repeat 5
		repeat 5
			c=strmid(map,(ofsy+y)*10+(ofsx+x),1)	// マップデータ(文字配列)から1文字だけを取り出す
			a = int(c)				// 文字列型の「数字」を「数値」に変換
			pos x*cew, y*ceh		// 左から何個目、上から何行目のセルの位置に
			celput 1,a				// 対応するセルを1つ描画( a は 0~7 の数値)
			x++
		loop
		x=0			//左から何個目のセルか?
		y=y+1		//上から何行目のセルか?
	loop

	// ※ここでは 実際に画面にみえる 横5個 × 縦5個 計25個のセルの描画を繰り返している
	
return
//================================================================

・このサンプルでは map データは単純な「文字列変数」になっています。
「2次元配列」をつかって map をあつかうこともできます。

 例:
  dim map,32,32  // map を2次元配列として初期化
           // 32個の要素が入る配列を32個用意
  map(0,0)=6  // マップの一番左上に「水面」を設定

または

  mapsx=32 : ,mapsy=32
  dim map,mapsx,mapsy  //初期化
  map(1,1)=0
  // マップ左上から右に2つ目、下に2つ目のセルに「草原」を設定


   HSPトップへもどる