スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

後追いゲージ

gage.png
せっかくなので昨日作った被ダメージ分のゲージが後追いするシステムの解説をしてみます。
まずゲージ画像を表示する際にメインのものの下にもう一つ別の色のゲージ画像を表示します。
今回の場合はメインが青色、サブが赤色とします。
最初は同じサイズのゲージを表示しているため、サブのゲージは見えない状態になっています。
次に、ダメージ操作を行った時の変形をメインのゲージは処理時間を0フレーム、サブのゲージは処理時間を20フレーム(お好みで)で実行します。
すると、メインのゲージはダメージ部分が一瞬で無くなり、ダメージを受けた部分が赤くなったように見えます。
あとは20フレームかけてサブゲージがメインゲージと重なるのを待つだけです。
回復する時も同じような演出したければ、場合分けを行いメインの方の処理時間を増やしてサブを0にすれば済みます。
システムに直結しないただの演出ですが、工夫次第でゲームがより華やかになると思います。
良ければ自作システムで実装してみてください。

拍手を下さりありがとうございました。
スポンサーサイト

ゲージの作り方

ゲージ
自作システムで役に立つ、ゲージの作り方について。
方法は単純、下地の上に横拡大率を割合%にしたピクチャを乗せるだけです。
▼ HP呼び出し
■DB読込(可変): CSelf15[最大HP] = 可変DB[0:0:7](りくがめ:最大HP)
■DB読込(可変): CSelf16[現在HP] = 可変DB[0:0:6](りくがめ:HP)
▼ 残りHPの割合計算
■変数操作: CSelf17[残りHPの割合] = CSelf16[現在HP] * 100
■変数操作: CSelf17[残りHPの割合] /= CSelf15[最大HP] + 0
▼ ゲージの下地を表示
■ピクチャ表示:1 [左上]ファイル「SystemFile/gagebase.png」 X:0 Y:0 / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
▼ ゲージの中身を表示
▼ 縦拡大率はそのままに、横拡大率をHPの残り割合%にする
■ピクチャ表示:2 [左上]ファイル「SystemFile/gage.png」 X:0 Y:0 / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 CSelf17[残りHPの割合]x100% / カラー R[100] G[100] B[100]
このコモンは現在HPの割合を求めてゲージを表示するものです。
割合は最大値/現在値で求めることが可能です。
100をかけているのは%であらわすためであり、最初にかけているのは値が小数にならないようにするためです。
ゲージ自作というと多少難しそうな印象がありますが、計算自体はわずか二行、あとは画像を張り付けるだけで終わりとなります。
画像さえ準備ができれば簡単に実装できるので、自作システムを作るなら使ってみるといいと思います。

ゲーム本体で触れられる話題があまりないのでいろいろ書いていますが、あまりネタがありません。
もしトレはん!などの私のゲームの処理でこのコモンをさらしてほしいとか、この処理をどうやっているのか教えてほしいとかいう質問があれば、コメントを下さい。
可能な限り分かりやすく、解説に挑戦してみます。

マップイベントの変数一括操作テクニック

使える豆知識のようなものを書こうとしても、わりと当たり前のことばかりな気がしてきたので、ウディタ独自のテクニックを一つ紹介します。
ウディタでは全ての変数を、格納されている場所を数値で指定することで操作することができます。
これを利用すれば、コモンイベントで現在のマップイベントのセルフ変数を一括操作するなどといったことが可能となります。
▼ イベントID初期化
■変数操作: CSelf10[マップイベントID] = 0 + 0
▼ マップイベントを100個調査
■回数付きループ [ 100 ]回
|▼ マップイベントのコモン変数を呼び出す
|▼ 1000000+10*Y+Xで呼び出せる
|■変数操作: CSelf11[操作したい変数] = CSelf10[マップイベントID] * 10
|■変数操作: CSelf11[操作したい変数] += 1000009 + 0
|▼ このコモンでは、イベントID0~99のマップイベントの
|▼ セルフ変数9番の値を呼び出している
|■変数操作: CSelf12[変数格納] = V[CSelf12[変数格納]] + 0
|▼ セルフ変数9番の値が0なら1に変更する
|■条件分岐(変数): 【1】CSelf12[変数格納]が0と同じ
|-◇分岐: 【1】 [ CSelf12[変数格納]が0と同じ ]の場合↓
||■変数操作: V[CSelf11[操作したい変数]] = 1 + 0
||■
|◇分岐終了◇
|▼ 調査しているID番号を加算する
|■変数操作: CSelf10[マップイベントID] += 1 + 0
|■
◇ループここまで◇◇
サンプル的なコモンを作ってみました。
これは現在のマップにあるマップイベントを走査して、セルフ変数が9のものがあれば全て1に変えるという処理です。
この処理は複数のイベントを一括で管理する時に便利です。
現在作っているゲームでは、トラップの探知にこれを応用して使っています。
まずマップに入ると共に、トラップのマップイベントは自動実行で自分のセルフ変数9番を1にします。
その後、探知ボタンが押されたらマップ全体の中でセルフ変数9番が1のかつ探知範囲内にあるものを調べるようにしています。
こうすることにより、出入り口のイベントなど関係のないマップイベントに反応しないようにしています。
トレはん!の敵の処理などにも応用しています。
こうすると自作システムでマップイベントを一括管理したいときに非常に便利だと思います。

ゲーム作りは少し難航中、なかなか手が進みません。
もう十日ぐらいしかないのに間に合うか心配です。

拍手を下さりありがとうございます。

距離の求め方

距離計算
昨日角度について書いてみたけど、あまりうまく説明できなかったので、私がコモンを作る際にもっともよく利用しているものを持って来てみました。
これは二点間の距離を求めるものです。

主人公の座標を求める。
■変数操作+: CSelf12[主人公のX座標] = 主人公 の 画面X座標
■変数操作+: CSelf13[主人公のY座標] = 主人公 の 画面Y座標
マップイベントの座標を求める。
■変数操作+: CSelf21 = キャラ[CSelf0[対象キャラID]] の 画面X座標
■変数操作+: CSelf22 = キャラ[CSelf0[対象キャラID]] の 画面Y座標
距離の差から距離(a、bのこと)を求める。
■変数操作: CSelf16[対象とのX距離] = CSelf12[主人公のX座標] - CSelf14[対象のX座標]
■変数操作: CSelf17[対象とのY距離] = CSelf13[主人公のY座標] - CSelf15[対象のY座標]
距離を二乗してから足し合わせることで、距離の二乗を求める。
■変数操作: CSelf18[X距離の二乗] = CSelf16[対象とのX距離] * CSelf16[対象とのX距離]
■変数操作: CSelf19[Y距離の二乗] = CSelf17[対象とのY距離] * CSelf17[対象とのY距離]
■変数操作: CSelf20[距離の二乗] = CSelf18[X距離の二乗] + CSelf19[Y距離の二乗]
この後、求めた距離の二乗と、比較したい距離の二乗を比較する。

このコモンではマップイベントのIDを引数として、主人公とマップイベントとの画面距離を算出しています。
当たり判定や、視界のチェックなどによく使います。
原理は一番上の画像に書いてあるものです。
二点間の距離というのは、そのX距離の二乗とY距離の二乗を足し合わせて平方根をとったものとなります。
ただし、最後の平方根の処理は必ずしも必要ではありません。
他と違い計算が複雑な上に、その分処理も重くなってしまいます。
それぐらいなら、測定対象の距離も二乗してしまった方がいいです。
具体的に言うと、二点間の距離が100以下かどうか調べたい場合、100×100=10000と距離の二乗を比較をすればいいわけです。
私はいつもこの手法を使っています。
数学をちゃんと勉強している人にとっては当たり前の知識ですが、アクション要素を含むシステムを制作する場合は必ず必要となるので、役立つと思います。

角度計算豆知識

角度計算
ネタばれが多く、報告できる進捗情報もないので、自作システムを作る上で役に立ちそうな豆知識を書いてみました。
今日ゲーム作成中に、壁にぶつかって反射する物体のプログラムに挑戦したのでそれに関して。
物体の運動は基本的に力と向きの二つであらわされて、これをベクトルといいます。
シューティングの弾幕などは、弾の向いている角度とその速度の二つのデータで動かしたりするわけです。
その辺りの細かい計算はとりあえず放っておいて、物体の反射の角度についてです。
反射係数とか深いことは考えず、壁にぶつかったらぶつかった面に対する力が反対方向に変わるとします。
例えば右方向に進んでいる物体が壁にぶつかれば、跳ね返って左に進みます。
ならそれを角度で考えたらどうなるかと言うことです。
図のようにαの方向に進んで行きx軸に垂直な壁にぶつかったとして、単純に力の向きを反対にすると(180°+α)斜めに壁にぶつかったのに、手前に跳ね返ってくるという珍現象が起こります。
そのため、上の図のような式を使う必要があります。
具体的には
赤=30°の場合
橙=180-30=120°
緑=-30=330°
青=180+30=210°
と求められます。
X,Y方向の運動量で計算している場合は単純に『-1』をかければ済むのですが、ベクトル計算だとやや複雑になります。
ただ、三角関数を使えば複雑な軌道計算もできるのでシステム自作するなら知っていると便利です。

あまりうまく説明できなかった気がします。説明って難しいです。
これならゲームのコモンの中身とかさらした方が見てくれる人のためになりそうな気がします。

拍手を下さりありがとうございました。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。