投稿記事

ゆっくりマインカートの記事 (9)

あまぐもホルン 2022/05/20 15:00

ゆっくりマインカート プレイしてくださってありがとうございます。

ゆっくりマインカート完成しました!

ゲームURL

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

 予定していた全7ステージの実装が終わり、完成させることが出来ました。
 プレイ数も1300回に達して予想以上のプレイ数にありがたく思っております。
 プレイしてくださった皆様。
 ツイッターやニコニコ動画の進捗動画に反応をくれた皆様。
 ゲーム背景を描いてくださったモモソーセージ様。
 フリー素材として素敵な画像や音源を公開してくださった皆様。
 本当にありがとうございました。


広告のお礼

ゲームに広告をしてくださったニコニコユーザーの皆様ありがとうございます!
この場で皆様のご紹介とお礼をさせていただきます。
kkkk 様    応援者 様       774 様
letlot 様    たなっち-IKU 様    フリー素材遊び 様
てぃ~( ^^) _?~~ 様(文字化けすいません)

広告・プレイありがとうございました。

あまぐもホルン 2022/05/02 18:00

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

ゆっくりマインカート解説記事 三回目。
今回は背景レイヤーの生成とスクロールについてです。
GameMakerのプログラム的な話が続くので興味のある方だけどうぞ!


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


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


やりたい事と条件

  • スクロールする背景はリピート表示する
  • 複数枚の背景レイヤーをスクロールする
  • 奥行き感を出す為に、レイヤー毎のスクロール速度を変化させる
  • トロッコがミスした時、ステージを一定距離戻る事に対応する
  • 紅魔館や鳥居など、一度しか出現しない背景もある


ステージ1の背景はこの3枚の画像を重ねている


鳥居や手水舎は一回しか表示しません

単純にスクロールを行いたい場合は
BackgroundレイヤーのHorizontalSpeedを設定すればいいんですが、
その場合はスタート直前・ゴール直後のカメラが移動していないタイミング
ミスしてトロッコが後に戻るタイミングでもスクロールして不自然になるので
カメラオブジェクトの位置を参照しながらスクロールするようにしました。

プログラムの簡単な説明

初期化生成

背景レイヤーには1枚につき4つの情報を設定します。

  • 画像データ
  • 繰り返し背景かどうか
  • スクロール相対速度
  • オフセット(背景をずらして表示する位置)

これらの設定情報を参照しながらレイヤーを作成します。

ゲーム中の背景のスクロール

今回はトロッコに追従するカメラのx位置を使いました。
毎ステップ、カメラの位置を参考にレイヤーのx位置を再計算することで
スクロールを実現しています。
具体的には(カメラのx位置)×(スクロール相対速度)+(オフセット)
という計算式です。

感想

今回こんなスクロール方法を考えましたが、
ミスした時だけBackgroundレイヤーのHorizontalSpeedをいじって、
復帰時に元に戻すという方法でもよかったかなと思います。
今度似たようなことをするときに試してみたいと思います。


今回はこんな感じです。
GameMakerの参考になれば幸いです。
ありがとうございました!

フォロワー以上限定無料

ゆっくりマインカートの背景の生成と制御のプログラムコードを記載しています

無料

あまぐもホルン 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つを予定)

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


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

« 1 2

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索