[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前回までは行動時のアニメのセクションごとにパターン分けをしてましたが、
それにともない相手への選択範囲の際のバグ取りとキャラクターIDのフォーマットを修正をすることになりました。
【攻撃】のコマンドを選び最初にカーソルが合うのは一番前のモンスターになります。
しかし、戦闘開始前のキャラクター描画の都合上、左上(つまり後ろから)から順番にIDを指定していたので修正することにしました。
そうなると今度は描画時のIDの扱いが変わるのでその修正がけっこう大変でした。
あとは、カーソルの表示というか挙動の制御をしていました。
前にいるモンスターから後ろのモンスターにカーソルを合わせる場合には左のキーで移動しますが、
左のキーを押し続けてもそれ以上は動かないか、それとも前に戻るか、
そのゲームに合った表現方法を選んでシステムを組む必要があります。
こういう地味な部分ほど操作感覚に影響がでるので注意が必要です。
現在進行形で作っているのは、
ついに(?)アニメーションで実際にキャラクターが動くところです。
ジャンプしてモンスターに攻撃するか、走っていって攻撃するか、
放物線と直線移動のためのコモン(汎用関数)を作っています。
具体的には主人公の座標とモンスターの座標、ジャンプ力、重力のデータをコモンに渡すと、
経過した時間に合わせて移動した距離を返してくれるという処理です。
(エセ)放物線の計算処理はある程度できあがったので、
次はジャンプ力を=0と入力した際に、放物線か直線かを自動で判別して計算しくれる機能をつけるつもりです。
次回の更新までには、
モンスターに攻撃してダメージが表示されるところまでできあがっていたいです。
前回のつづきです。
【自分アニメ】の中には【一度だけアニメ】する【対象の数のぶんだけ動く】の2種類のパターンに分かれます。
例えば、全体魔法で炎を使ったとします。その場合、自分は詠唱を【一度だけアニメ】するだけですね。
これが、弓矢で乱れ撃ちとかだと、敵の数だけ弓を射る【対象の数のぶんだけ動く】になります。
【エフェクト】にはそれ自体にパターンがあり【一匹ずつ】と【画面全体】のピクチャーの大きさの指定をすることになります。
例えば、先ほどの弓矢【一匹ずつ】であれば、エフェクトは飛んでいく弓矢になるので、対象は敵一体だから【一匹ずつ】の分類になります。
対して、一つのアニメで複数の相手にダメージを与えるような魔法は【画面全体】に表示されます。
【相手アニメ】にも【一匹ずつ】と【画面全体】で分類します。
これは全体エフェクトに対して、ダメージを一匹ずつ出すか一気に全員分出すかの違いが主になります。
例えばFFシリーズのメテオという魔法だと【画面全体】に隕石が降るアニメーションを流しながらランダムで【一匹ずつ】にダメージを与えるという感じです。
【ダメージ数字】は上であげた【相手アニメ】とほぼ連動しています。
一応、汎用性を考えて分けてシステムを組んでおきます。
上記のパターンを僕の大好きなFF5で当てはめるとこうなります。
ファイア(全体)=【一度だけアニメする】+【一匹ずつ】+【画面全体】+【画面全体】
アクア=【一度だけアニメする】+【画面全体】+【画面全体】+【画面全体】
メテオ=【一度だけアニメする】+【画面全体】+【一匹ずつ】+【一匹ずつ】
みだれうち=【一匹ずつ】+【一匹ずつ】+【一匹ずつ】+【一匹ずつ】
放物線の構築はなんとかできました。
X,Y座標、角度、力に加えて、時間、頂点の値が必要なのはなんとかわかりました。
なんとか。
とりあえず完璧な放物線を描く処理をするのは幼卒の頭では無理なので、
独自の放物線関数を作って処理しようと思います。
とにかくね、完成させるのが優先です。
それっぽく見えたらソースなんてなんでもいいんですよ(たぶん)
そんなこんなで放物線、つまりジャンプしたり玉が飛んだりというアニメーションを作るつもりだったんですが、
その前にアニメーションを段階別に分割して、それぞれの役割の関係性を構築する作業が待ってました。
【自分アニメ】行動を起こしたキャラクターのアニメ
【エフェクト】炎や剣で攻撃したときの閃光アニメ
【相手アニメ】それを受けた相手キャラクターのアニメ
【ダメージ数字】受けたダメージを表示
全てのアニメパターンをこの4つに分けます。
・・・長くなりそうなので続きは次回
気がつけば更新1ヶ月放置・・・
これはあきまへんという事で、これからは更新1週間と決めます。
あえて言う事で自分にプレッシャーをね。。。
とりあえずは土日のどちらかに更新ってことで。
さて本題、
リニアバーからどれだけ進んだのかさえ忘れかけてました。
いや、進んでないから更新が滞っていたと言っても過言ではないという
町の噂しきり!!
リニアバー完成
→主人公アニメ
→コマンド表示
→コマンド確認
→キャラクターのジャンプアニメーション(←いまここ)
このジャンプアニメーションというところでだいぶ立ち止まっています。
プログラミングがどうこうじゃなくてね、
基本的な物理計算式がね、全然わからないんですよw
ジャンプといったら放物線ですよね。
放物線といえば二次関数、三角関数ですね。
はい、ワカリマセンネ。
おかげで、ネット上で調べたり図書館に行ったり、
まったくPC上でのゲーム作りには触れていない状態が続いております。
まぁやっとのことでネットの勇士の方々のおかげだったりで
ヒントらしきものは見つかり、
式の構築をするところまで来たって感じです。
あとね、モンスターのデータ管理とか表示の仕方とかも、
興味ある人もいるかもしれないんで、
その変の解説もしていきたいと思っています。
ちゃんと行動の早いキャラから順番に表示します!(当たり前)
たとえば上のモグラのモンスターがスピード5で、球根のモンスターがスピード10だとすると、
ちゃんとリニアバーには球根が2回連続出て次にモグラが1回出るといった挙動をします。
その他、ヘイストのようなスピードが変化する状態での順番の変化なんかにも対応してます。
それにしても、
アルゴリズムの構築に苦戦しすぎました。。。orz
ほぼ1週間パソコンの前で悶絶していましたが、
出来上がってしまえば2日くらいで作れるようなアルゴリズムでした。
最初に勘違いしたままアルゴリズムを組んでしまったことで、
わけのわからない挙動を引き起こしていたようで、
これはもう一から組みなおそうとチャート表を作ろうとした時に
これか!!と気づいたのがつい昨日でした。
間違いの根本に気づいてからは完成するのは早かったです><
勘違い前とくらべてソースも1/4くらいになりました。
ようするに3/4無駄なことしてたってことですね。・・・ガクッ
迷わず行けよ行けばわかるさっ!