たわーでぃふぇんすアップグレード
たわーでぃふぇんすをアップグレードしました。グラフィックの強化と、ユニットの種類を増やしました。タワーディフェンスで基本的な部分は押さえたかなと。
以下製作日誌です
ゲームバランスの問題
一度エクセルで表を作った方が良いかも
理想としては、レベル10あたりから三回攻撃が必要なぐらい?
むしろレベル1で適切じゃ無い位置に置いたら抜けられるぐらいでいいかも
敵の数はもっと多くていい
マップはもっと広く。1マスを小さくする感じで。
迷路固定
背景のグラフィックを増やす
全体的にグラフィックを小さく
レベルに上限を設ける
2か3ぐらいで十分かも
エレメントタワーディフェンスでは、一面から敵ユニットのHPが10ある……弓の1レベルだと一撃では破壊出来ない強さね
ゲーム画面は携帯ぐらいの比率が丁度いいかも? ブラウザ使用時で14 X 17 140X170で400X300にはちょっと小さいぐらい? 1マス15pxでだと210X255で丁度いい感じかも?。メッセージのスペースを大きくとれる。グリッドは 7.5px で28X34。流石にそれはプログラムで処理出来ないので、グリッドを使わない方法を考えてみる。
自身の座標を7.5で割った数値を切り捨てで出して、配列を参照するのはどうだろう……プログラムで済むならグリッドの深度が浮く。浮かせる意味はあんまり無いけど。置けるか置けないかの判定をどうしよう?
ドロップ対象はその座標にある一番上の深度にあるインスタンスを参照するから、下がマップなら配置。そうでないなら配置出来ない仕様にすれば行けるはず……
ってことは、マップも配列いらないな。
----
新しいマップのラフ作成。
侵攻ルート用と背景用に分けてFlashにマップを作成する。
ダサさは抜けないなぁ。背景画像を何か使ってみる
…ミスった。
インスタンスの判定は正方形で行われるから、斜めが入ると見た目どおりの判定にはならないんだった。
透明のムービークリップを自動的に配置することで制御してみよう。
Flashの描画そのままでは背景画像がしっくりこないので、フォトショで加工。
覆い焼きと焼きこみで意外なほど面白いものができた。
ルート設定も完了。
ユニットの種類について考える。
コスト、射程距離、威力、攻撃間隔、攻撃範囲、対地、対空、特殊効果のステータスを持つ。
表を作ると楽
簡単な計算式を作っておいたほうが良いかも
コスト=ダメージを与えられる期待度
コスト1=威力×射程距離×攻撃間隔/フレームレート
これが基本。フレームレートはものによって異なるけど12でいいかと
射程距離は、何か特殊な計算をしたほうが良いかも。
コスト1に攻撃範囲などを加味して考える。
攻撃範囲が広ければ広いほどコストは高くなる
単体の攻撃で等倍とすれば……
コスト2=コスト1×攻撃範囲の直径
次に対地、対空のどちらがいけるかを計算に入れる。
2/2で対地、対空どちらも攻撃できる。
1/2で片方しか攻撃できない。
コスト3=コスト2×x/2
さらに、遅くしたり移動をとめたりなどの特殊効果のステータスをかける。
どのくらい増減するかは特殊効果によりけり。よくある遅くするものなら2倍とか?
表を手書きして終わり。
10/2
敵味方のユニットのグラフィックを適当に手書きしてみた。
15×15の白い枠を作成。作るユニット数コピペ。
イラストをフラッシュ画面のムービークリップとして作成。
ちゃんと中央を合わせる。
全部の敵、味方ユニット全てにスクリプトを書いたりするのはめんどくさいプラスバグの元なので、敵、味方のプログラム的な部分は統一して、呼び出すグラフィックを変えるだけの方法を模索してみる。
今まで使っていた敵のグラフィックを削除。
ムービークリップそのものは残ったので、ここに呼び出す方法を試してみる。
敵のムービークリップから呼び出させてみたけれどもあまりうまくはいかなかった。
ボタンを押したとき、同時に呼び出すように変更。成功。ただし挙動が変。
デバッグ時にいちいち待つのはだるいので、一定時間の経過ではなく、
全滅させるたびに次へのクリックを押させる方向で。
敵の挙動の修正。
どうやら、ムービークリップ同士で当たってないらしい。
透明どころか中身がないものはだめと言うこと。
呼び出したグラフィックとの当たり判定ならうまくいった。
お金とスコアとぬっころしたデータの表示が少しおかしい。修正。
参照先の指定ミス。
敵の挙動で、進行方向に向きを変えたい。ムービークリップの回転。
毎回毎回入力してもかまわないが、それだとマップの変更時などの手間が増えるので違う方法で。
行き先のポイントと移動前のポイントの座標から向きを取得する。
もともと移動量を把握しているんだから、それを元にベクトルで計算。
向きを変えるポイントを細かく調整。一応直線っぽく動くようにはなった。
ドットにしておいたら楽だったかも。
味方ユニットの配置も同じような要領で。
▼ややこしくなってきたので深度のメモ
塔配置時、ドラッグで表示されるユニット
ユニットが配置されたことを示す空ムービークリップ
敵ユニット
敵ユニットの進行ルート
ダミーの透明マップ。
味方の弾
味方ユニット
マップのグラフィック。
確定している深度は
521-541敵ユニットのグラフィック
500-520敵ユニット
なので、これを基準に……
1000 ドラッグ時のクリップ
600-999 ユニット配置時のダミーグラフィック
521-541 敵ユニットのグラフィック
500-520 敵ユニット
450-499 敵ユニットの進行ルート
400 ダミーの透明マップ
100-399 弾
50-99 味方ユニットのグラフィック
0-49 味方ユニット
……配置できる最大数を考えるともっと余裕があったほうが良いかも。
深度はかなり使えるのでもっと広く。
4000 ドラッグ時のクリップ
3000-3999 ユニット配置時のダミーグラフィック
2520-2541 敵ユニットのグラフィック
2500-2519 敵ユニット
2001-2499 敵ユニットの進行ルート
2000 ダミーの透明マップ
1000-1999 弾
500-999 味方ユニットのグラフィック
0-499 味方ユニット
既存のものを修正。
ロード時に透明マップ、進行ルートの深度を変更
深度の変更にはswapDepths()を使用
マウスの座標を取得してそこに配置。
グラフィックの入れ替え成功。
砲台の回転。どうもぐらぐらすると思ったら、毎回敵を探しているせいだと理解。
処理の順序を考え直してみる。
射程範囲内に敵がいるかどうかを判定。
いなければいない状態(初期値)を返す。
いる状態なら、目標を固定。
目標がいる状態なら新たに敵を探さない。
IDの大きい順(出現する敵の先頭)から処理して行って、一番若いのが見つかったら敵を探す処理から抜ける。
for文の変数iに無理やり処理外の数値を代入して成功。
後やること整理
弾丸を小さく。
複数の種類のユニットを配置。
次のレベルへボタン。
敵ユニットの種類変更。
地上、空の敵の振り分け。
レベルアップ
弾丸を小さくして、ユニットの差別化を作業中、ロールオーバーやプレスが効かない事が判明。
よく考えてみるとダミー用の透明な画像が邪魔をしているっぽい。
ダミー用の透明画像を使わず、メインユニットの深度を変更して、対応してみる。
4000 ドラッグ時のクリップ
3000-3999 味方ユニットのグラフィック
2520-2541 敵ユニットのグラフィック
2500-2519 敵ユニット
2001-2499 敵ユニットの進行ルート
2000 ダミーの透明マップ
1000-1999 弾
0-999 味方ユニット
弾が味方ユニットグラフィックの下を通るなぁ……
よく考えると、グラフィックは別にある訳だから、消してしまったムービークリップに透明のものを仕込めば良いわけだ
。
というわけで元通り
4000 ドラッグ時のクリップ
3000-3999 ユニット配置時のダミーグラフィック
2520-2541 敵ユニットのグラフィック
2500-2519 敵ユニット
2001-2499 敵ユニットの進行ルート
2000 ダミーの透明マップ
1000-1999 弾
500-999 味方ユニットのグラフィック
0-499 味方ユニット
差別化のさわり終了。
バランス調整時に、命中率の低さが気になる。
弾本体が小さすぎるんだな。。。
弾を呼び出すムービークリップに当たり判定用のムービークリップを作成。
透明にして、命中判定を弾本体ではなく、当たり判定を含むムービークリップの大きさに変更。
敵が全滅したら、次のレベルへ移行するボタンを押せるようにする。
次のレベルへ移行するボタンを、今までリセットだったものを流用することにした。
ということで、新たにリセットボタンを作らなければならないが悪戦苦闘中。
ゲーム中にリセットを押してもうまく動かない。
参照先のミス。そればっかだなぁ。
レベルに応じて敵のユニットが変化するようにする。
敵の持つステータスは、今のところhp,手に入るお金,得点,移動速度,種別の5種類
それぞれ呼び出し時に補正をかける。補正は、配列を参照する。
手に入るお金と得点はlvそのままなので、補正をかけるところはhp,移動速度,種別の3つ
終了
敵の種類によっては攻撃できなくする。
攻撃できる種類用のフラグを用意して、攻撃可能なら砲撃の関数を呼び出す方法で解決。
ほぼ完成。
ユニットごとのレベルアップにも差別化を施す。
射程距離が四角いのは射程距離が増えれば増えるほど矛盾を感じるので修正。
弾のグラフィックが出ない……
アルファチャンネル、ビジブルともに正常。
射程範囲を表示したときのみ表示される。
深度を調べてみると、一番低い値だった。
???
深度決定に使用しているIDがundefindeだった。
入力してない?
修正。でも依然として弾は表示されず。
親のムービークリップは上に表示させたけど、弾本体はやっぱり最下層だった。
謎。
解らないのでここはあきらめる。
とりあえずここまでで公開。
製作日誌 たわーでぃふぇんす タワーディフェンス系
以下製作日誌です
ゲームバランスの問題
一度エクセルで表を作った方が良いかも
理想としては、レベル10あたりから三回攻撃が必要なぐらい?
むしろレベル1で適切じゃ無い位置に置いたら抜けられるぐらいでいいかも
敵の数はもっと多くていい
マップはもっと広く。1マスを小さくする感じで。
迷路固定
背景のグラフィックを増やす
全体的にグラフィックを小さく
レベルに上限を設ける
2か3ぐらいで十分かも
エレメントタワーディフェンスでは、一面から敵ユニットのHPが10ある……弓の1レベルだと一撃では破壊出来ない強さね
ゲーム画面は携帯ぐらいの比率が丁度いいかも? ブラウザ使用時で14 X 17 140X170で400X300にはちょっと小さいぐらい? 1マス15pxでだと210X255で丁度いい感じかも?。メッセージのスペースを大きくとれる。グリッドは 7.5px で28X34。流石にそれはプログラムで処理出来ないので、グリッドを使わない方法を考えてみる。
自身の座標を7.5で割った数値を切り捨てで出して、配列を参照するのはどうだろう……プログラムで済むならグリッドの深度が浮く。浮かせる意味はあんまり無いけど。置けるか置けないかの判定をどうしよう?
ドロップ対象はその座標にある一番上の深度にあるインスタンスを参照するから、下がマップなら配置。そうでないなら配置出来ない仕様にすれば行けるはず……
ってことは、マップも配列いらないな。
----
新しいマップのラフ作成。
侵攻ルート用と背景用に分けてFlashにマップを作成する。
ダサさは抜けないなぁ。背景画像を何か使ってみる
…ミスった。
インスタンスの判定は正方形で行われるから、斜めが入ると見た目どおりの判定にはならないんだった。
透明のムービークリップを自動的に配置することで制御してみよう。
Flashの描画そのままでは背景画像がしっくりこないので、フォトショで加工。
覆い焼きと焼きこみで意外なほど面白いものができた。
ルート設定も完了。
ユニットの種類について考える。
コスト、射程距離、威力、攻撃間隔、攻撃範囲、対地、対空、特殊効果のステータスを持つ。
表を作ると楽
簡単な計算式を作っておいたほうが良いかも
コスト=ダメージを与えられる期待度
コスト1=威力×射程距離×攻撃間隔/フレームレート
これが基本。フレームレートはものによって異なるけど12でいいかと
射程距離は、何か特殊な計算をしたほうが良いかも。
コスト1に攻撃範囲などを加味して考える。
攻撃範囲が広ければ広いほどコストは高くなる
単体の攻撃で等倍とすれば……
コスト2=コスト1×攻撃範囲の直径
次に対地、対空のどちらがいけるかを計算に入れる。
2/2で対地、対空どちらも攻撃できる。
1/2で片方しか攻撃できない。
コスト3=コスト2×x/2
さらに、遅くしたり移動をとめたりなどの特殊効果のステータスをかける。
どのくらい増減するかは特殊効果によりけり。よくある遅くするものなら2倍とか?
表を手書きして終わり。
10/2
敵味方のユニットのグラフィックを適当に手書きしてみた。
15×15の白い枠を作成。作るユニット数コピペ。
イラストをフラッシュ画面のムービークリップとして作成。
ちゃんと中央を合わせる。
全部の敵、味方ユニット全てにスクリプトを書いたりするのはめんどくさいプラスバグの元なので、敵、味方のプログラム的な部分は統一して、呼び出すグラフィックを変えるだけの方法を模索してみる。
今まで使っていた敵のグラフィックを削除。
ムービークリップそのものは残ったので、ここに呼び出す方法を試してみる。
敵のムービークリップから呼び出させてみたけれどもあまりうまくはいかなかった。
ボタンを押したとき、同時に呼び出すように変更。成功。ただし挙動が変。
デバッグ時にいちいち待つのはだるいので、一定時間の経過ではなく、
全滅させるたびに次へのクリックを押させる方向で。
敵の挙動の修正。
どうやら、ムービークリップ同士で当たってないらしい。
透明どころか中身がないものはだめと言うこと。
呼び出したグラフィックとの当たり判定ならうまくいった。
お金とスコアとぬっころしたデータの表示が少しおかしい。修正。
参照先の指定ミス。
敵の挙動で、進行方向に向きを変えたい。ムービークリップの回転。
毎回毎回入力してもかまわないが、それだとマップの変更時などの手間が増えるので違う方法で。
行き先のポイントと移動前のポイントの座標から向きを取得する。
もともと移動量を把握しているんだから、それを元にベクトルで計算。
向きを変えるポイントを細かく調整。一応直線っぽく動くようにはなった。
ドットにしておいたら楽だったかも。
味方ユニットの配置も同じような要領で。
▼ややこしくなってきたので深度のメモ
塔配置時、ドラッグで表示されるユニット
ユニットが配置されたことを示す空ムービークリップ
敵ユニット
敵ユニットの進行ルート
ダミーの透明マップ。
味方の弾
味方ユニット
マップのグラフィック。
確定している深度は
521-541敵ユニットのグラフィック
500-520敵ユニット
なので、これを基準に……
1000 ドラッグ時のクリップ
600-999 ユニット配置時のダミーグラフィック
521-541 敵ユニットのグラフィック
500-520 敵ユニット
450-499 敵ユニットの進行ルート
400 ダミーの透明マップ
100-399 弾
50-99 味方ユニットのグラフィック
0-49 味方ユニット
……配置できる最大数を考えるともっと余裕があったほうが良いかも。
深度はかなり使えるのでもっと広く。
4000 ドラッグ時のクリップ
3000-3999 ユニット配置時のダミーグラフィック
2520-2541 敵ユニットのグラフィック
2500-2519 敵ユニット
2001-2499 敵ユニットの進行ルート
2000 ダミーの透明マップ
1000-1999 弾
500-999 味方ユニットのグラフィック
0-499 味方ユニット
既存のものを修正。
ロード時に透明マップ、進行ルートの深度を変更
深度の変更にはswapDepths()を使用
マウスの座標を取得してそこに配置。
グラフィックの入れ替え成功。
砲台の回転。どうもぐらぐらすると思ったら、毎回敵を探しているせいだと理解。
処理の順序を考え直してみる。
射程範囲内に敵がいるかどうかを判定。
いなければいない状態(初期値)を返す。
いる状態なら、目標を固定。
目標がいる状態なら新たに敵を探さない。
IDの大きい順(出現する敵の先頭)から処理して行って、一番若いのが見つかったら敵を探す処理から抜ける。
for文の変数iに無理やり処理外の数値を代入して成功。
後やること整理
弾丸を小さく。
複数の種類のユニットを配置。
次のレベルへボタン。
敵ユニットの種類変更。
地上、空の敵の振り分け。
レベルアップ
弾丸を小さくして、ユニットの差別化を作業中、ロールオーバーやプレスが効かない事が判明。
よく考えてみるとダミー用の透明な画像が邪魔をしているっぽい。
ダミー用の透明画像を使わず、メインユニットの深度を変更して、対応してみる。
4000 ドラッグ時のクリップ
3000-3999 味方ユニットのグラフィック
2520-2541 敵ユニットのグラフィック
2500-2519 敵ユニット
2001-2499 敵ユニットの進行ルート
2000 ダミーの透明マップ
1000-1999 弾
0-999 味方ユニット
弾が味方ユニットグラフィックの下を通るなぁ……
よく考えると、グラフィックは別にある訳だから、消してしまったムービークリップに透明のものを仕込めば良いわけだ
。
というわけで元通り
4000 ドラッグ時のクリップ
3000-3999 ユニット配置時のダミーグラフィック
2520-2541 敵ユニットのグラフィック
2500-2519 敵ユニット
2001-2499 敵ユニットの進行ルート
2000 ダミーの透明マップ
1000-1999 弾
500-999 味方ユニットのグラフィック
0-499 味方ユニット
差別化のさわり終了。
バランス調整時に、命中率の低さが気になる。
弾本体が小さすぎるんだな。。。
弾を呼び出すムービークリップに当たり判定用のムービークリップを作成。
透明にして、命中判定を弾本体ではなく、当たり判定を含むムービークリップの大きさに変更。
敵が全滅したら、次のレベルへ移行するボタンを押せるようにする。
次のレベルへ移行するボタンを、今までリセットだったものを流用することにした。
ということで、新たにリセットボタンを作らなければならないが悪戦苦闘中。
ゲーム中にリセットを押してもうまく動かない。
参照先のミス。そればっかだなぁ。
レベルに応じて敵のユニットが変化するようにする。
敵の持つステータスは、今のところhp,手に入るお金,得点,移動速度,種別の5種類
それぞれ呼び出し時に補正をかける。補正は、配列を参照する。
手に入るお金と得点はlvそのままなので、補正をかけるところはhp,移動速度,種別の3つ
終了
敵の種類によっては攻撃できなくする。
攻撃できる種類用のフラグを用意して、攻撃可能なら砲撃の関数を呼び出す方法で解決。
ほぼ完成。
ユニットごとのレベルアップにも差別化を施す。
射程距離が四角いのは射程距離が増えれば増えるほど矛盾を感じるので修正。
弾のグラフィックが出ない……
アルファチャンネル、ビジブルともに正常。
射程範囲を表示したときのみ表示される。
深度を調べてみると、一番低い値だった。
???
深度決定に使用しているIDがundefindeだった。
入力してない?
修正。でも依然として弾は表示されず。
親のムービークリップは上に表示させたけど、弾本体はやっぱり最下層だった。
謎。
解らないのでここはあきらめる。
とりあえずここまでで公開。
製作日誌 たわーでぃふぇんす タワーディフェンス系
