忍者ブログ

主にウディタを使ってのゲーム製作についてのブログです  ※更新は不定期

カテゴリー「コモンイベント」の記事一覧
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

前回の記事にてキューの説明は省いていたので
今回はキューについての解説を行いたいと思います。

■キュー

キューによって実現できる処理について解説していきます。

例えば、リプレイ処理を実装するときに有効です。

←↑↓→キーで自機が移動するとして
ステージが終了した時点で今回のリプレイを保存する処理を考えます。

毎フレーム、入力されたキー情報をキューに入れていきます。
例えば 『
』が押された場合
』に該当する値をキューに入れます。
これを続けていくことにより、毎フレームの操作履歴がキューの中に格納
されます。

リプレイを再生するときは
キューから値を取り出すことによって
操作された順にキー情報を取得できます。
あとは取得した情報をもとに自動でキーを入力する
ようにすれば、リプレイ再生の完成です。




他にも例を挙げると
以下のような文字列が記述された
スクリプトファイルがあるとします。

@message
あいうえお
@wait 2
@message
かきくけこ

上記は
@messageで文章を表示
@waitでウェイトを実行する処理とします。

この場合、『
あいうえお』と表示されてから
次に2ウェイトおいてから
かきくけこ』と表示される処理です。

このファイルを処理するときに逐一読み込んで処理するのも
方法の1つですが、あらかじめ全てデータを読み込む方法も
あります。

後者の場合キューを用います。
まずは@messageを
命令格納用のキューに入れます。
そして次の『あいうえお』を別の文字列用のキューに入れます。
次は@waitを
命令格納用のキューに入れます。
その後、更に別の数値用のキューに『2』を入れます。

@message 命令格納用に入れる

かきくけこ』を文字列用に入れる

とすることによって
全てのスクリプトデータを読み込むことができます。
あとは命令格納用キューから順に命令を読み出して
命令の種類によって処理していくようにすれば
順番に命令を実行していくことが可能になります。

あらかじめ読み込んでおくことによって
残りの実行命令数なども管理できるので
管理性が高まります。


以上がキューの使用例の一例です。


このほかにもキューには
環状キュー(リングバッファとも言う)というものもあります。
これはデータの先頭と末尾がつながっているデータ構造に
なりますが、これを使うことで
ログの管理なども行えます。
末尾にどんどんデータが追加され、データがいっぱいになった場合
先頭のデータに上書きされていくため古いデータが自動的に削除
されていき、最新のデータだけが保存されるようになります。






拍手

PR
「スタック操作コモン」と「キュー操作コモン」公開したので
ブログの方でもまとめておきます。

それぞれのコモンについては以下のコモンイベント集の
登録先にて確認してください。
スタック操作コモン
キュー操作コモン


一応ここで
スタックとキューを使用すれば何が実現できるのかを大まかに
説明しようと思います。
とはいえ使い方は数えきれないほどありますし、説明として
的確なものを考えるのもの大変ですので
代表的なものを説明していきたいと思います。

まずはスタックから説明していきたいと思います。


■ スタック

代表的なものの1つとして構文解析があります。
例えば以下のような文字列があるとします。

if( A > (B + 1) ){
 B += 1;
}

このとき
『if』の次出てくる『
()』で囲まれた文字列を取得したい場合
この場合『 A > (B + 1) 』が取得したい文字列に該当しますよね。

ですが該当する文字列の中にも『()』があります。
もし『if』の次の『(』から『)』までの文字列を取得した場合
『 A > (B + 1』
が取得されてしまいます。

この問題を容易に解決する手法の1つとしてスタックを
利用する方法があります。

まず『if(』の『(』をスタックに入れます。
そして右へ右へ文字列を調べていきます。
もし『(』が出てきた場合、さらにスタックに入れます。
今回の場合『(B』の部分の『(』がそれに該当します。
そして『)』が出てきた場合、スタックから『(』を取り出します。
もしこのとき、まだスタックに『(』が入っている場合続行します。
そしてスタックの中身が空になるまで続けます。
中身が空になった場合、その箇所の『)』が先頭にあった『(』と組に
なることがわかります。

これで『 A > (B + 1) 』を取り出すことが可能になりました。

今回の例の場合、できる限り分かりやすくするために
単純なパターンに限定しましたが、
いろいろな種類の括弧が出てくる場合などにとても役に立つと思います。
その場合は取り出した括弧が同じ種類の括弧かどうか調べるなど
すれば対応できるでしょう。

この原理を使えば数式の計算などにも用いれます。
1 + ( 5 × ( 4 + 1 ) )
上記の様な場合でも『4 + 1』のところから取り出して~~~
って言う感じで計算を行っていくことができます。
こういった数式計算についての詳しいことは『逆ポーランド記法』等で
調べるとよいでしょう。

迷路のスタートからゴールを求める探索処理などにも
スタックが用いられます。

他にも編集ソフト等で
アンドゥ、リドゥで操作を元に戻したりする処理も
スタックによって実現されています。


次にキューの説明……と言いたいところだけど
すごく長くなりそうなのでまた次回にでも書こうと思います。
(※たぶん)





拍手

線形補間移動コモンイベントを作成しました。
以下からダウンロードできます。
http://silsec.sakura.ne.jp/WolfRPGEditor/CommonList/html/tdv226.html#14246095107201

ブログの方でもまた書き込むのめんどくさいから
以下はコモンイベント集に登録した内容のコピペ
=============================================

値を目標の値まで指定した処理フレームで変化させる
コモンイベントです。
値の変化方法は以下の4パターン用意されています。
・直線移動
   :目標値まで一定の速度で変化させます。
・加速移動
   :緩やかに変化が始まり目標値まで徐々に加速していきます。
・減速移動
   :一定速度で変化が始まり目標値まで徐々に減速していきます。
・加減速移動
   :緩やかに変化し中央値で最速になり徐々に減速して目標値まで
    変化させます。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

コモンイベントの引数(入力値)
1. 初期値   :値の初期値
2. 目標値   :変化後の値
3. 経過フレーム:現在の経過フレーム
4. 処理フレーム:変化にかける処理時間
返り値 : 上記引数をもとに求めた現在の経過フレームにおける値

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

<< 例 >>----------------------------------------------------------

 変化方法   直線移動
 初期値    0
 目標値    100
 経過フレーム 20
 処理フレーム 50
 とした場合「0」を「100」まで「50フレーム」かけて値を
 変化させることになる。
 経過フレームが「20」なので
 「20フレーム」経過している場合の値を「返り値」として返す
 この場合は「40」が返り値として返る。

---------------------------------------------------------------------

この説明を見てもよく分からない方は
ピクチャの処理時間をイメージすると良いと思います。
X座標が「0」にあるピクチャを
X座標「100」にして、処理時間に「50」を設定した場合が
上記の例と同じ状態になります。
20フレーム経過した場合ピクチャが自動的に
そのフレーム時の座標に移動していますが
このコモンイベントでは、その値を実際に返してくれます。

ピクチャの処理時間と違い
値の変化に「加速」「減速」「加減速」があるため、
より表現が広げられると思います。

---------------------------------------------------------------------

■以下にサンプルプログラムを置いておきます
サンプルプログラム

拍手

Woditoride - April Fool's Day Edition
┗最新版公開日 : 2018/04/01

WoditorOptimizer - Ver2.0.1
┗最新版公開日 : 2017/08/31

WoditorOptimizer - Ver1.00 -
┗旧バージョン : 2015/04/18

WECDeletor - Ver1.01 -
┗最新版公開日 : 2012/11/03
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
HN:
K-Shin07
性別:
男性
趣味:
ゲーム製作
自己紹介:
趣味でゲームを作っています
プログラマーです

開発ツール・使用言語等
WOLF RPG エディター
・HSP
・C
・VB
・Java
・C++
・C++/CLI
・C#
・アセンブラ
・Haskell

・PHP
・Ruby

・WPF

・DirectX( 9.0c )
・PhysX( 3.X系 )

Mail
 k07.alpha.stella[あっとマーク]gmail.com
[01/04 NONAME]
[01/04 NONAME]
[07/25 なつき]
[02/26 たかねぇ]
Copyright ©  -- α-Stella[R]_ブログ --  All Rights Reserved

Design by CriCri  /  Material by 妙の宴  /  Background by K-Shin07  /  powered by NINJA TOOLS / 忍者ブログ / [PR]