Help us understand the problem. What is going on with this article?

Processingにおけるオブジェクトがジャンプする挙動の再現

Processingにおけるオブジェクトがジャンプする挙動の再現

学校の授業でprocessingについて扱ったのですが、そこで私はマリオを再現しました。そのツイートを宣伝として貼っておきます。

https://twitter.com/syunki____/status/1269528018076102657?s=20

さて、今回はその中で考えたジャンプの挙動について紹介しようと思います。
まず、マリオの高さをどうやって描いているかですが、基本的には高校物理の力学公式である

y=1/2gt^2+vt+y0

を応用しています。yは高さの座標、tは時間、vは初速、y0は初期位相を表しています。マリオの高さはこの式だけで表現しています。ですがこれだけではうまくいかなかったため、マリオが地面の高さにいるとき、この式の中のgを0にしていました。それ以外の高さにいるときにgを適切な定数(この値によって挙動が現実に近くなるかそれとも宇宙のようにゆっくり動くかを決めることができます)に設定することで重力を再現できます。こうしておくことで例えば段から落ちることなど何らかの原因でマリオが空中に放り出されたとしてもきれいに落下してくれます。


次にジャンプの仕組みですが。何らかの形(私はマウスの右クリック)でジャンプの入力がなされたとき、その高さをy0に保存します。そして初速vに値を与えます。言い忘れていましたがマリオがジャンプするときだけこのvには値を入れるようにします。ですから再び地面に戻ってきたらvは0に戻します。また、ジャンプが入力された瞬間にtもカウントし始めます。これも地面に戻れば0に戻します。これだけで基本的にはジャンプの機構が完成します。


次にyをint型にするかfloat型にするかという問題ですが、私はできるだけスムーズな描写を求めてしまったためfloat型にしました。ですがその弊害として着地するときに地面を突き破るバグが多発しました。その時はy座標が地面より大きくなったら地面の高さに強制的に戻すという式を組み込んでいれば解決できます。ですがこの方式はもっと複雑な地形になったりした場合応用を利かせにくい、バグが起きやすいと考えているのでもっといい方法があればぜひお聞かせください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした