忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

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

前々から気になっていたのですが、私の今のスクリプトだと縦横移動時と斜め移動時で
自機の移動スピードが違っていました。
これは移動処理を下記のように、斜め移動を考慮せずに斜め移動時は単純にx軸とy軸を
足して移動させていたからです。
こんな感じ↓
move=5
stick ky,15
xv=(ky>>2&1)-(ky&1);x軸移動処理
yv=(ky>>3&1)-(ky>>1&1);y軸移動処理
px=xv*move+px : py=yv*move+py;自機移動処理
pos px,py

この方法でもちゃんと動きますが、斜め移動時の移動スピードが縦横移動時よりも速く移動
してしまい不自然です。
で、色々と調べてみたところ、縦横移動時よりも斜め移動時の方がルート2倍速く移動する
事がわかりました。
ルート2ってのは「ひとよひとよにひとみごろ」なので1.41421356です。
(こんな所で役にたつなんて^^;)
1.41421356で計算するのは大変なので、1.41で考えてみます。
1.41倍移動すると言う事は、その逆の分移動させれば良いという事になります。
1.41倍の逆ってのは逆数を考えるようで、1.41の逆数は1/1.41になり
1÷1.41で0.70921・・・・・と言う事で約0.71倍の速さで移動すれば良いと言う事になります。
(計算&考え方合ってると思いますが、間違ってたら教えてください^^;)

それを踏まえて移動処理を考えてみました↓
斜め移動処理スクリプト
このスクリプトを起動させるここんな感じ↓
14fe55df.jpg
上下左右で自機移動
スペースを押すと斜め移動を考慮しない移動
エンターを押すと斜め移動を考慮する移動を行います。

スクリプトとしては↓のように
move=5.
stick ky,15
if xv!0 : if yv!0 : move=move*0.71;斜め移動の時の処理
xv=double((ky>>2&1)-(ky&1));x軸移動処理
yv=double((ky>>3&1)-(ky>>1&1));y軸移動処理
px=xv*move+px : py=yv*move+py;自機移動処理
pos px,py
縦横の両方ともが移動している場合に、移動量moveに0.71をかけています。

以上を踏まえて作成中のSolid State SURVIVORに組み込んでみたのですが
今まで斜め移動が速いのに慣れていたので、逆に不自然に感じでしまうのですが
そのうち慣れるだろうと思っています^^;
PR
//4月20日 AM6:00追記
//オートボム使用時は自機上に表示するように変更しました
//4月21日 PM22:00追記
//ステージセレクトで4面を選択するといきなりボスが登場するのを修正しました。


ジョイスティックとキーボードを別々にボタン設定する処理を追加してVer4.5として公開します↓
Solid State SURVIVOR Ver4.5 (右クリック→対象をファイルに保存で保存して下さい。)

dd62b3b3.jpg
キーボードとジョイスティックで別々にボタン設定が可能になりました^^

この処理に関しては、もっと簡単に出来ると思っていたのですが思いのほか苦労しました^^;
というのも、ジョイスティックってボタンが4個以上ある物が殆どです。
で、私が使用しているプラグインのck Joyforce dllでは、ジョイスティックのボタン1からボタン4までが
それぞれキーボードのZXCVに対応しているのですが、ボタン5以上はキーボードの
どのキーにも対応していないんです。

なので、例えばショットボタンをジョイスティックのボタン6などに設定した場合は
キーボードからは操作出来なくなってしまうんです。
これでは、あまり具合が良くないなぁと思って、どうしたら良いか?と考えたところ
ジョイスティックとキーボードの設定を、完全に別々に分ければ良いのでは?と思って
色々考えてみました。

まず、ボタンの設定を変える方法ですが、これはck_joyconfig命令で変更出来ます。
例えば、zキーのキーコードは本来は2048なのですが、これのキーコードを64に変更したければ
ck_joyconfig 11,64,1
という風に記述すればOK。
今回の場合はZXCVを変更したかったので
ck_joyconfig 11,64,1
ck_joyconfig 12,256,1
ck_joyconfig 13,512,1
ck_joyconfig 14,1024,1
という風に変更しました。
で、64、256、512、1024には、それぞれ本来の対応したキーがあるので
それを
ck_joyconfig 6,0,1
ck_joyconfig 8,0,1
ck_joyconfig 9,0,1
ck_joyconfig 10,0,1
と記述して無効にしました。

これで、キーボードとジョイスティックを別々に設定できる!と思ってスクリプトを作ってみたのですが
非トリガーキー指定でつまずきました。
と言うのも、例えばボタン1(キーコード2048)を非トリガーキー指定しようと思った場合
ck_joystick ky,2048
と記述すれば、ボタン1の押しっぱなしを検出してくれます。

で、これと同様に上記のck_joyconfig命令でキーコードを変更したキーを指定すると
上手くいかないんですよね・・・
具体的には
ck_joyconfig 11,64,1
として
ck_joystick ky,64
としても、押しっぱなしを認識してくれないんです。
このキーの押しっぱなしを認識させる為には変更する前の数字で指定しなければならない事が
わかりました。
なので、この場合は
ck_joystick ky,2048
と記述すれば、押しっぱなしを認識させる事は可能なのですが、そうするとジョイスティックと
キーボードで別々の設定にした時に困ってしまうんですよ。

なので苦肉の策として、ゲームスタート時に使用したのがジョイスティックならゲーム中は
ジョイスティックを優先して押しっぱなしを認識するようにし
キーボードでゲームを開始した場合は、キーボードを優先して押しっぱなしを認識するように
しました。
とりあえず、これで困る事はないと思うのですが、もっと良い方法がわかったら変更しようかと
思っています。

あと、4面のリプレイがおかしかったのとランキング表示がおかしかったのも修正しました。
4/13 PM1:00追記//
//3面ボスの開閉ハッチのグラフィックがおかしかったのを修正
//リプレイ時、ゲージと文字が重なっていたのを修正
//4面のリプレイが動かなかったのを修正(4面のリプレイには、まだ不具合があります)

色々と不具合をご報告頂いていたので、その修正とプラス追加しようと思っていた
オートボムとコンボの保持ゲージを追加してVer4.3として公開します↓
Solid State SURVIVOR Ver4.3 (右クリック→対象をファイルに保存で保存して下さい。)

まず修正点は
Dangerの文字が逆さまだったのを修正
2面の雲海の切れ目が見えてしまっていたのを修正(直ってると思いたい^^;)
サウンドセレクトで4面の曲を選択した後前の曲に戻ると4面の曲が鳴り止まない
不具合を修正

オートボムはオプション画面で使用するかどうかを決定出来ます。(デフォルトは使用しない)
d1f6787a.jpg
オートボム使用時は通常使用時の2分の1の威力になります。

で、コンボの保持ゲージについてですが、これはコンボが切れてしまった時に
今までだとコンボが0になってしまっていたのですが、それだと0になった瞬間にプレイする気が
なくなる場合もあるので、その救済措置として入れてみました。
36aec69a.jpg
上のゲージがコンボゲージで、下のゲージがコンボ保持ゲージです。

コンボ保持ゲージは近接攻撃をした時に溜まっていきます。
で、コンボが切れた時にコンボ保持ゲージが残っていれば、コンボは0にならず
その時の数字を維持します。
コンボ保持ゲージがなくなるとコンボも0になる、という仕組みです。

ただ、私自身この仕組みについては悩み中なので、もっと違う物に変更になるかもしれませんので
とりあえずは暫定のシステムです。
後、ゲージのデザインも何とかしたいのですが、なかなか良い感じのがデザイン出来ません^^;
4/6 AM2:00追記//
//ステージ4開始時にエラーが出る&音楽が違う不具合を修正した物をアップし直しました。
4/7 AM0:00追記//
//ステージセレクトからタイトルに戻れるようにした&ステージ4開始時の背景のズレを修正して
//Ver4.1として公開
4/7 PM3:00追記//
//ステージ4の背景の不具合を修正。バージョンは4.1のままです。
4/8 PM3:00追記//
//ステージ1ボスで、キャラオーバーの為ゲームがストップしてしまう不具合を修正
//ステージ4の処理をちょっと軽くするようにした
//ネームエントリー時、選択音を鳴らすよう変更してver4.2として公開

なんとかステージ4が形になったのでVer4.0ver4.2として公開してみます↓
Solid State SURVIVOR Ver4.2 (右クリック→対象をファイルに保存で保存して下さい。)

6ebc9646.jpg
今回のバージョンアップでは、ステージ4の追加とランキング表示が主な追加点なのですが
ステージ4に関しては、ちょっと難しくしすぎたかな?でも後半ステージなので
コレくらいの難易度でも良いかな?と、かなり悩んで調整してみました。
一応、避けれない弾はないはずです。
それと今回はステージ4を終了しても何も起きませんので、ポーズボタンで終了させて下さいm(_ _)m

ランキング表示については暫定仕様でして、音楽も鳴りませんし背景をどうするかも悩み中です。
今のところ、背景はゲーム画面が延々流れるのですが、それだと最後までゲームが進行してしまうので
ネタばれ気味ですし。かといって別の背景にするのも味気ないなぁ・・・と色々と考え中。

あと、ジョイスティックの有無を検出するように変更してみたのですが、現状では自動的に
切り替わるのですが、そうではなくてコンフィグの設定画面にキーボードとジョイスティックの
二つの設定を入れようかと検討中です。

とりえあず、今回もバグが無いようにしたつもりなのですが、なにか不具合やご意見など御座いましたら
お気軽に教えて頂けると嬉しいです^^

ジョイスティックがパソコンに装着されているかどうかを検出するようにしました。
私はHSPでジョイスティックを使用出来るようにする為に、サイバーステーション200Xさんで
配布されているCK JOYFORCE.DLLを使用しているのですが
これのck_joystickという命令で、ジョイスティックを検出出来ます。

ジョイスティックが使用されていなければ、statに1が返るようになっているので
ck_joystick ky
 joystat=stat
と書いて・・・
iniファイルを読み込む時に
 if joystat=1 : fileini "./config/configkey.ini"  //読み込むファイル設定 ジョイスティック無し時
 if joystat=0 : fileini "./config/configjoy.ini"  //読み込むファイル設定 ジョイスティック有り時
として、ジョイスティックが無い時はジョイスティック無し用のiniファイルを読み込み
ジョイスティックがある時はジョイスティック有り用のiniファイルを読み込むように変更しました^^

やっとメトロイドプライム3が終りそうなので、そろそろ本格的に作製を再開できそうなのですが
スターソルジャーRもプレイしたいし、来月のバーチャルコンソールで大好きな武者アレスタも
配信されるようなので、またまたゲームばっかりプレイしてしまいそうな気が・・・(汗)

Twitter
カレンダー
01 2025/02 03
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
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]