※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

RPG

RPGの開発とかいろいろ(現在ここから移動中)


基礎技術関連


キー入力、カーソル関連


文字列表示関連



変数について


RPGだけではないですが、ゲームを制作するならあらかじめ企画段階で変数名のつけ方に関するルールのような物を決めておくべきです。

C言語などのあらかじめ変数を定義しなければいけない言語ならともかく、HSPの場合はいきなり変数を使用できてしまうので、あらかじめ「これは変数だ」と分かるようにしておいたほうがいいと思われます。

ちなみにAHDでは、商人物語さんと同じような感じの変数名で統一しています。
例えばアイテムなら「DT_item(アイテムID,インデックス)」、アイテム名は「DT_item_name(アイテムID)」など。
ほかにセーブデータなら「DT_save(インデックス)」などを使うのもいいかもしれません。

HSPでは構造体が使えない分、このように工夫すると見やすいし後々の管理もしやすいと思います。
モジュール変数なるものも存在しますが、分からなければこちらのほうがいいでしょう。

キー入力の状態を詳しく検知するためのテクニック


ゲームのコマンド入力などで「ボタン(キー)が押された瞬間」や「ボタン(キー)が離された瞬間」を検知する簡単な方法です。
「getkey命令」を普通に使っても「そのときに押されているかそうでないか」しか取得できないのでその応用ということで。

キー入力はメインループ内で最初に行っていけばいいと思いますが、上記のような場合どうすればいいのか?
今回は「getkey命令」を使ってやってみます。

まず、1つのキー入力につき2つの変数を用意します。配列を使うと便利かもしれません。
それぞれを「現在のキー入力の状態を保存する変数」、「1ループ前(直前)のキー入力の状態を保存する変数」とします。
あらかじめ両方の変数の内容を0(「getkey命令」でいう押されていない状態)にしておきます。

メインループ内の最初で「getkey命令」を使います。この時に「現在のキー入力の状態を保存する変数」を使います。
そしてゲームの処理が終わったあと、ループの最後のところでに「現在のキー入力の状態を保存する変数」の内容を
「1ループ前(直前)のキー入力の状態を保存する変数」に移します。そのあとにメインループ内の最初に戻ると...

メインループ内でゲームの処理をするときに両方の変数にそれぞれ「現在と1ループ前のキー入力の状態」が入っています。
するとどういったことが分かるのか、表で説明します。
現在のキー入力の状態 1ループ前のキー入力の状態 キーの状態
0(押されていない) 0(押されていない) 離されたまま
1(押されている) 0(押されていない) 押された瞬間
1(押されている) 1(押されている) 押されたまま
0(押されていない) 1(押されている) 離された瞬間


「getkey命令」では検知できない「ボタン(キー)が押された瞬間」や「ボタン(キー)が離された瞬間」を検知することができます。
ちょっと説明が分かりづらいかもしれませんが、これで「ボタン(キー)が押された瞬間」だけ処理を行ったり出来ると思います。


ゲーム中の選択カーソルを「ピッ、ピピピピピ...」にするテクニック


TVゲームをプレイしたことのある方なら分かると思いますが、選択カーソルを動かした時に「ピッ、ピピピピピ...」のように
最初に1度カーソルが動いたあと間をおいてから連続でカーソルが動くといった経験があると思います。

あれをHSPで実装する方法です。
あと仕様用上、メインループ内でしか実装できないかもしれません。

「getkey命令」を使って実装しますが、今回は「現在のキー入力の状態を保存する変数」、
「1ループ前(直前)のキー入力の状態を保存する変数」ともうひとつ、
「カーソルを動かすためのタイマーとなるカウンタ用の変数」(中身は0にしておく)も用意します。

もちろんこれ以外に「カーソル位置を保存しておく変数」も必要になってくると思います。
これがないとカーソルを動かせませんから注意です。

ちなみに今回は具体的な処理の流れを主に書いて行きます。

まずメインループ内に処理を書いていくのは同じです、というか基本中の基本です。
最初に、「カウンタ用の変数」の内容が0だった場合は「キー入力の状態を詳しく検知するためのテクニック」を使います。

1.「押された瞬間」だった場合はカーソルを動かすので「カウンタ用の変数」の内容を
適度な数値(10とか20とか、ループのウェイトに応じて調節する)にします。
それと同時に「カーソル位置を保存しておく変数」も一度だけ操作しておきます。
2. 「押されたまま」だった場合はカーソルを動かすので「カウンタ用の変数」の内容を
適度な数値(「押された瞬間」の時の5分の1~10分の1、ループのウェイトに応じて調節する)にします。
それと同時に「カーソル位置を保存しておく変数」も一度だけ操作しておきます。
3.上記以外なら「カウンタ用の変数」の内容は0に初期化にしておきます。

そして次の処理、「カウンタ用の変数」が0より大きい場合はその数値を1減らします。
これはメインループ内でその処理が行われるごとに1ずつ減っていくので時間が経てばいつかは0になります。

上記の処理がメインループ内で実行されると選択カーソルを動かした時に「ピッ、ピピピピピ...」と動くはずです。
もし分かりにくい場合は「カーソル位置を保存しておく変数」を操作する所で効果音を鳴らすといいと思います。

+ sample1.hsp


文字列のうち、最初からn番目までを表示するテクニック


新しくサンプルスクリプトを作成したのでアップします。

+ sample2.hsp