投稿記事

2022年 04月の記事 (6)

あまぐもホルン 2022/04/30 18:00

トロッコのジャンプについて ~饅頭の慣性がいい感じになった話~

ゆっくりマインカート解説記事 二回目。
今回はトロッコのジャンプ処理についてです。
GameMakerのプログラム的な話が続くので興味のある方だけどうぞ!


プレイ画面へはこちらから!
ゆっくりマインカート(ニコニコアツマール)


ゆっくりマインカートの記事のまとめはこちら
ゆっくりマインカートまとめページ(Cien)


ジャンプの前提

トロッコのジャンプは以下の条件で作っています。

  • レールの上にいるときだけジャンプ可能になる
  • ジャンプボタン入力でジャンプする
  • ジャンプボタンを離すと落下を開始する
  • ジャンプ後一定時間経過でも落下をする
  • 落下の軌道をスムーズにする

トロッコのジャンプ

最終的にこんな処理になりました。
一定時間で落下するだけなら物理公式をそのまま使えてたんですが、
ジャンプボタンを離すまで落下しない
ボタンを押し続けても一定時間でスムーズに落下する
というルールを両立させたせいででだいぶ苦労した記憶があります。

if(canJump)
{//ジャンプできる状態
	if(_JumpKeyPressed)
	{//ジャンプキー入力
		canJump=false;		//ジャンプ可能フラグを消す
		jumping=true;		//ジャンプ中フラグを立てる
		vspeed=jumpSpeed;	//上方向に速度を付ける
        //alarmが起動するとjumpingフラグが折れるようにする
		alarm[0]=jumpTime;	
	}
}
else if(jumping)
{//ジャンプで上昇中の状態
	vspeed+=0.5;	//少しずつジャンプスピードを下げる
	if(_JumpKeyReleased)
	{//ジャンプキーを離すと落下する
		jumping=false;	//ジャンプ中フラグを折る
        alarm[0]=-1;	//alarmを強○的に終了させる
	}
}
else
{//落下中の状態
	//落下最大速度になるまで加速させる
	if(vspeed<fallSpeedMax) vspeed+=0.5;
   	//落下(vspeed<0)するまでは急いでvspeedの値を減らす
	if(vspeed<0) vspeed+=2;
}

ゆっくり霊夢の挙動

ゆっくりに慣性が欲しかった

トロッコは移動や操作を担当するトロッコ本体
アイテムとの当たり判定を担当するゆっくり霊夢
2つのオブジェクトにわけてつくっています。
2つに分けることによってジャンプ時にゆっくり霊夢がトロッコから浮く
という処理を実装しやすいかなと考えてもいました。


こういうのを作りたかった。

最初はトロッコのyの履歴を記録していって、
ゆっくり霊夢は履歴を遡ってyを取得することを考えていたんですが
最終的にイベントのBegin/Endを使うことで簡単に実装できました!
具体的な流れはこんな感じです

1フレームの処理順

  • 1.ゆっくり霊夢のBegin Stepイベント
    • 自身のyにトロッコのyを代入する
  • 2.トロッコのStepイベント
    • レールとの当たり判定やジャンプの制御
  • 3.StepとEnd Stepの間
    • vspeedとhspeedによってトロッコが移動するタイミング
      (1.で取得したyは1フレーム前のyになる)
  • 4.ゆっくり霊夢のEnd Stepイベント
    • 自身のxにトロッコのxを代入する
      (ここで取得したxはトロッコと一致)
  • 5.オブジェクトの描写→次フレームへ

感想

ジャンプって難しいと感じた処理でした。
他の人はどんなプログラムを書いているのか気になります。
学びが足りない...

あとは、ステップのタイミングをずらすことで
ゆっくり霊夢の慣性と自然なジャンプを表現できたのは良かったです。
最初はトロッコの高さ履歴を取るかとか考えてめんどくさかったので、
かなり嬉しい発見でした。

あまぐもホルン 2022/04/28 18:00

レールと当たり判定 ~トロッコが落ちないように~

ゆっくりマインカート解説記事 一回目。
今回はレールとトロッコの当たり判定についてです。
GameMakerのプログラム的な話が続くので興味のある方だけどうぞ!


プレイ画面へはこちらから!
ゆっくりマインカート(ニコニコアツマール)


ゆっくりマインカートの記事のまとめはこちら
ゆっくりマインカートまとめページ(Cien)


プログラムの前提の話

当たり判定の処理はいろいろ方法があるのですが
最終的に以下のルールに落ち着きました。

  • トロッコがレールの上に乗るようにする
  • レールは横幅64ピクセルで一単位とする
  • トロッコの横幅は48ピクセルとする
  • レールは連続で並んでいたり、途中で途切れていることもある
  • トロッコの前端、後端部分がレールに引っ掛かっていれば落ちないようにする

    トロッコとレールの当たり判定部分

    トロッコと3種類のレール(直進・上り坂・下り坂)には、
    それぞれに下の図のように当たり判定を設定しています。
    詳しく言うと、トロッコはスプライトのコリジョンマスクで設定し、
    レールは線分データを各レールインスタンスの変数に記録させています。


上が使用画像で下が当たり判定(赤い部分)です

当たり判定処理

レールとトロッコの当たり判定は2段階に分けて行ってます。
第一段階はトロッコとレールがぶつかっているかどうかのチェック。
第一段階でぶつかっていると判断されると、第二段階でぶつかっている高さを算出します。

第一段階


レール(ピンク黄色線)とトロッコ(青四角)でcollision_lineで当たり判定を行います。
レールの当たり判定の線は一本の長い線ではなく、
複数のレールの判定が連なった状態です。(ピンクの線、黄色の線一本が一つの当たり判定)
つまり、当たり判定後は下の4パターンの状態に分かれます。

-ピンクの線だけにぶつかっている
- 黄色の線だけにぶつかっている
- 両方の線にぶつかっている
- どっちにもぶつかってない

どちらかの線にぶつかったと判断されれば第二段階へ進みます。

第二段階


第二段階ではぶつかっ多と判断されるレール線分(ピンク線)
トロッコの中心を通る垂線(青線)交点(水色の点)を求めます。
Gamemaker では線分の交点を求める関数がないので、
適当に交点を算出する関数を作って交点を取得しました。
交点のyをそのままトロッコのyに代入すれば終了です。

感想

当たり判定って難しいなって感じでした。
当たり判定の突き抜けや接触判定時にトロッコが振動するなど、
3Dアクションゲームっぽいバグも発生して微調整に苦労した記憶があります。
バグの対処の過程で
image_angleを設定するとスプライトのコリジョンマスクも
一緒に回転する事を発見したりしました。(もっと早く知りたかった...)

スプライトのコリジョンマスクタイプをPreciseにしたら
もっと簡単に実装できたかもしれません。
次の機会で試してみたいと思います。

今回はここまで。
ありがとうございました。

あまぐもホルン 2022/04/26 18:00

ゆっくりマインカート 公開開始

ゆっくりマインカートを公開してました!
フリーゲームですので、ぜひプレイしてみてください!



プレイ画面へはこちらから!
ゆっくりマインカート(ニコニコアツマール)

4月25日にプレイ数1000回になりました!
遊んでくださった皆様、ありがとうございます!


ゆっくりマインカートの記事のまとめはこちら
ゆっくりマインカートまとめページ(Cien)


どんなゲーム?

東方Projectをモチーフにしたトロッコアクションゲームです。
レールの穴をジャンプで越えながらアイテムを集めてください。
プレイ時間は1ステージ1分ほどです。
ステージ背景を描いてくださったモモソーセージ様のおかげで
素敵なゲームになりましたのでそちらの方もお楽しみください!

ステージは5つ(全部で7つを予定)

ノーマルの霊夢のステージ
スピードアップの魔理沙のステージ
レールが凍って滑るチルノのステージ
画面がどんどん暗くなってゆくミスティのステージ
一部のレールが隠された幽々子のステージ
コースが隆起したり陥没する空のステージ
水流に押されるわかさぎ姫のステージ


頑張って作ったのでぜひプレイしてみてくださいね。
ご感想もぜひぜひお待ちしております!

あまぐもホルン 2022/04/26 18:00

ゆっくりマインカートまとめ記事

ゆっくりマインカート公開しました!

ゲームURL

プレイ画面へはこちらから!
ゆっくりマインカート(ニコニコアツマール)

どんなげーむ?

ゆっくり霊夢が乗ったトロッコを操作して、
東方のキャラ達が用意したコースを駆け抜けようってゲームです。
担当するキャラによる個性的なギミックを搭載してプレイをお待ちしております。
フリーゲームなのでぜひ遊んでみてください!

公開記事

ゆっくりマインカート 公開開始


進捗記事一覧

その1

その2

その3

その4

技術的な記事一覧

レールと当たり判定 ~トロッコが落ちないように~

トロッコのジャンプについて ~饅頭の慣性がいい感じになった話~

ステージ背景を制御したい ~レイヤーの生成と操作~

あまぐもホルン 2022/04/03 22:10

This is My Dungeon 04

こんにちは、AK18です。
This is My Dungeonの復旧進捗記事です。

This is My Dungeonって?

配下のモンスターに指示を出して
ダンジョンに侵入してくる冒険者たちを
撃退するダンジョン防衛ゲーム!

ダンジョンの奥に配置している
ダンジョンコアを壊されるとゲームオーバーなので
最後まで守り抜きましょう

【現在、プロジェクトファイル破損により0から作り直しているところです。
今はスチーム公開のバージョンまで戻すところを目指しております 】

Steamページ  This is My Dungeon

ダンジョンの移動ルートの表示

今回は部屋同士のつながりを表示して
ダンジョンの構造をわかりやすくしてみました。


今日はこれを思いついて実装していたので、
引き続きモンスターダミーと侵入者ダミーの戦闘の実装を作っていこうと思います

今回はこんなところで!
ではありがとうございました!

« 1 2

月別アーカイブ

記事のタグから探す

限定特典から探す

記事を検索