「MAPの概念」の編集履歴(バックアップ)一覧に戻る

MAPの概念 - (2007/09/18 (火) 00:35:21) のソース

<font size="2"> 「だいたい、MAPとはなんたるか。<br>
その正体は<b>1と0の数字の羅列</b>なわけです。たとえば、下に簡単なマップを書きましょう。<br>
1が通れるところ。0が通れないところです。<br>
00000000000000000<br>
01000000000000000<br>
01100000000000000<br>
00100000000000000<br>
00111111111110000<br>
00011111111000000<br>
00001111110000000<br>
00000111000000000<br>
00000000000000000<br>
なんとなく、イメージできるんじゃないですか? 通路を南に進んでいくと、三角形の洞窟に出るマップです。<br>
<br>
 まあ、こんな気分でマップというのはできてるわけなんですが、いくらなんでも、こりゃ乱暴です。<br>
事実、Tonyuのマップはもっと高度なわけですが、それでも基本的な考え方は同じなので覚えておいてください。<br>
ちなみに、これをもう少し発展させたのがテキスト系ローグゲームで、いわゆる「NetHack」や「変愚蛮怒」などなわけです。<br>
 これらローグ系は、HSPやCでは簡単に作れるのですが<b>Tonyuには向きません</b>。<br>
無駄に疲れるので作ろうとはしないほうがいいでしょう。(05,8,23追記「って、ロゴスさんがローグライク作っちゃいました! すごいッス!!」)<br>
<br>
 Tonyuにおける、マップとはどういうものか。下に写真で載せておきましょう。<br>
<a href=
"http://www12.plala.or.jp/goma_goma_deth/tonyu/img/kouza_bangai3_tonyumaplarge.gif">
<img src=
"http://www12.plala.or.jp/goma_goma_deth/tonyu/img/kouza_bangai3_tonyumapsmall.gif"
border="0" height="210" width="300"></a><br>
これがその正体で、「ページ名.map」で保存されています。クリックで拡大。<br>
<br>
<a href=
"http://www12.plala.or.jp/goma_goma_deth/tonyu/img/kouza_bangai3_maplarge.gif"><img src="http://www12.plala.or.jp/goma_goma_deth/tonyu/img/kouza_bangai3_mapsmall.gif"
border="0" height="252" width="300"></a><br>
こっちは、その実行した状態。同じく、クリックで拡大。<br>
<br>
 なんでも、マップを保存したりロードしたりするメソッドがあるようなので、それらを駆使すれば、一ページで色々なマップを使いまわしできるようになるわけです。<br>

とはいえ、その使い方はまだ解明されていないので、また後ほど♪<br>
<br>
 今日ご紹介したいMAPの概念は、<b>マップ座標</b>についてです。<br>
んなもん聞いたこともない? そりゃ当然。今、私が考えました(笑)<br>
さて、このマップ座標というもの。何に使うのかというと、もっぱら<i>$map.set()</i>で使われるのです。<br>
グラフィカルにいったほうが分かりやすかろうということで、下に図表で載せておきます。<br>
<a href=
"http://www12.plala.or.jp/goma_goma_deth/tonyu/img/kouza_bangai3_mapmasumelarge.png">
<img src=
"http://www12.plala.or.jp/goma_goma_deth/tonyu/img/kouza_bangai3_mapmasumesmall.gif"
border="0" height="226" width="300"></a><br>
なお、サイズは640x480。一マスは32x32です。クリックで拡大版を表示後、ダウンロードしていただければそのままお使いになれます。<br>
オブジェクトのpに指定して、マップ座標上でのキャラクターの位置を確認するのにお使いください。<br>
<br>
 このように、MAP座標というのは一番左上を座標(0,0)として基本的に<b>整数値でのみ存在</b>します。(まあ…整数でなくても指定できますけどね^^;)<br>

現在のオブジェクト座標をマップ座標に変換するには、<br>
x_pos=trunc(x/$map.pwidth);<br>
y_pos=trunc(y/$map.pheight);<br>
となっています。x_posとy_posにそれぞれ、<b>マップ座標におけるz座標とy座標が代入</b>されます。<br>
この値は、そのままオブジェクト位置のマップを指定するときに利用することができます。</font><font size="-1"><br>
<br>
 体調が悪いもので、あんまし色々書けないんですよね…。<br>
えっと、CやHSPでのスクロールというものは、<b>画面に入ってきたマップを描写する</b>という考え方です。<br>
対してTonyuでは、<b>全てのマップを描写する</b>という考え方です(01年9月17日追記:これ、間違ってた気がする。Tonyuにおいても描写は画面内+1の範囲で行っていた気がしますが、忘れました^^;)。<br>

気分の違いですが、CやHSPでは画面を固定してマップを移動させるのに対して、Tonyuではマップを固定して画面を移動させる感じです。<br>
どうも、CやHSPのやり方のほうが効率がいい気もしてならなかったりするごま太郎でした。<br>
たぶん命令文を分かりやすくする関係なんだろうな…。</font>
記事メニュー
目安箱バナー