円の当たり判定で色々試してみる

基本の当たり判定と言えば矩形の当たり判定と円の当たり判定があります。ほかにも色々な方法があるようですがここからは数学が分からないと厳しい領域に入ってきます。数学をちゃんと勉強しないとこれ以上先に進めない壁がここにあります(;’∀’)

と、まぁ確かにすべてを自分一人で作ろうとすると数学は必須になるわけですが今は他人が作ってくれたプログラムを利用すればわからなくても何とかできてしまう時代。。

しかし!やはり出来る限り一人の力で作って

「全部俺様一人でつくったぞ!」ドヤァ

と言いたい!!

そんなわけで、たとえ矩形と円の当たり判定しかできなくても工夫次第でもうちょっと複雑なこと出来るように挑戦しようぜ!!っていうことです。

おさらい

矩形の当たり判定は単純にキャラのx・y座標と幅・高さを使ってお互いの位置が重なっているかをチェックします。

円の当たり判定はキャラ同士の距離がキャラの半径の和より小さくなると当たったとなります。

この辺はググればいくらでも情報があるのでわからない人はググってください(^^;)

問題はここから。これ以上先の当たり判定はググっても数学が分かる前提で書いてあるのでわからん奴にはさっぱりわからん(´;ω;`)

しかし、ここからがたとえ学が無くても出来る男の本領発揮!

当たり判定を二つ使う

矩形と円は出来た。しかし他の形はどうしていいのかわからん。。

なんかいい方法はないだろうか、と考えて閃いたのが当たり判定を二つ使う方法。これが単純だけど効果的。

例えば円と線を組み合わせて

かまぼこ型の当たり判定を作ることができる(赤いところが当たる範囲)。円の当たり判定では当たっていてもある位置より下の場合は当たっていない、て書けば出来る。

もう一つ、円を二つ使ってみると

こんな形のも出来る(赤いところが当たる範囲)。

これを上手く使えば例えばこんな形の障害物が

横からニョキっと出てくるのがつくれたりするわけですよ。

すごくね?(*´ω`)

もちろん画像の動きと合致するように当たり判定も動かさないといけないから大変だけどね。

でもシューティングゲームでこういうの出来たらかなりプロっぽくない?

まとめ

というわけで数学がわからなくても努力と根性とアイデアで何とかなるわけです(*´ω`)

出来ないなら、わからないなら、出来る範囲で考える!

諦めちゃだめです(‘ω’)ノ

プログラミングを上達させる開発のコツ

今回は私自身がゲーム開発をする際に心がけていることをいくつか紹介したいと思います。

以前「ゲームをきちんと完成させる方法」という記事を書きましたが今回はそれの補足というか、私なりのプログラミングが上達する開発の仕方を紹介します。

その1 習得目標を決めておく

毎回ゲームを作る際に新しく習得したい技術を決めておきます。

私自身も素人開発者なのでゲーム開発で知らないことは山ほどあるわけです。そんな状態で試行錯誤しながらゲームを作っていくわけなので毎回なにかしらの目標を作っておいた方が良いです。

ゲーム開発の的を絞るとどこに注力するのかわかるのでうまく集中できますし、出来たときに達成感もあってとても良いです。

その2 目的が達成したら適度に完成させる

目標をもってゲームの開発を始めたのなら、目的を達成できた時点で適度に完成させてしまいましょう。

深追いは厳禁です。こだわりも厳禁です。目標が達成出来たら適度に見切りをつけてうまくまとめて完成させればいいんです。

こだわりや完成度なんてのは本気で作品としてお客さんから金を取るレベルのものをリリースする時までいらないと思います。

個人的には経験こそが最大の上達方法だと思っているので、完成度にこだわるよりはさっさと次の制作に取り掛かって経験を積んだ方が良いと思います。

ただ、完成度に関しても目標の持ち方だと思うので「ある部分だけ市販ゲーム級のものをつくる」って決めて取り組むのであればいいと思います。

その3 プログラミングに近道はない

これだけちょっと違う感じだけど、書きたいので書いておきます。

一人でコツコツゲームを作ってきて感じたことは

「プログラミングの上達は繋がっている」ってこと。

何かが分かるようになると次の何かが分かり始めるというか、いままで理解できなかったことが、あることを理解できるようになると分かるようになる、っといった感覚があります。

全部繋がっているというか、順番に一つ一つ理解していかないといけない。一本道ってわけではないですけど、段階的な理解みたいなものがあって、その途中を飛ばして先に進むということは出来ないんだろうと思います。

だからそういうことも踏まえて適切な目標設定をして一つひとつ乗り越えていくのが良いんじゃなかろうかと思います。

まとめ

偉そうに書いてますが私も素人開発者です(*´ω`)。毎回、壁にぶち当たりながらその度に試行錯誤して乗り越えてます。

やっぱりプログラミングは上達に時間がかかります。だけれども上達を感じられる楽しさもあります。やる気と根性があれば確実に上達できるはずです。

と私は自分に言い聞かせる(´∀`)

ゲームをきちんと完成させる方法

ゲームを開発しようと意気込んで始めたものの開発の難しさに気づき、漠然として広大な完成イメージに全く近づくことができずに諦めてしまう。。。っていうことが世間のあちらこちらで起きていると思われます。

正直、ゲーム作りって完成させることが難しい。特に今まで何かを作るっていう経験をしたことがない人間には夢だけが広がり過ぎてて、現実を知った瞬間に一気に心が折れてしまうというのは当然の現象だと思う。

料理で考えてみよう

料理したことありますか?なに作れますか?

スマートな方ならもうすでに私の言いたいことは理解していると思いますが、まともに料理したことない人間がうまい飯なんて作れねーんだよ!!カーッ(゚Д゚≡゚д゚)、ペッ

おっと、ちょっと本心が漏れてしまいましたがそういうことです(`・ω・´)

出来ないんですよ。出来ないっていうことを知る。

そう、みんな出来ないところから始まるんです。そして少しずつ出来るようになっていく。そういうもんだということを知ることがまず大事です。

最初にクリア条件を作る

さて、いざゲーム開発を始めたらゲームのクリア条件を先に作ってしまいます。「走ってゴールまで行く」でもいいし「敵を全滅させる」でもいいし「アイテムを全部取る」なんかでもいい、とにかく最初にクリアの条件を決めておきます。そしてステージクリア(ゲームクリア)のシーンを作ってしまいます。

おわかりいただけますでしょうか?

これでゲームは完成してるんですよ(`・ω・´)

「敵を全滅させる」が条件ならとりあえず敵を1匹画面に出しといてそいつを倒せばクリアになります。完成です。感動です(´;ω;`)

 

…えぇ、言いたいことはわかります。

しかし、これで夢半ばで開発がとん挫しようともゲームは完成させられます。

 

個人的な話ですが私ははっきりしたゲームの内容を決めずなんとなく作り始め、結果、目的のわからないクリアも出来ない謎の未完の大作(?)をいくつも作ってしまいました。それらを試作と思えるならいいですが、ゲームとして完成させたいと思って開発していると心がやられます(;´Д`)

作りたいゲームのイメージはしっかり作る

結局作りたいものが何かはっきりしているのか?っていうことが一番大事です。クリア条件を先に作るのもそのためです。

「俺はマリオやロックマンを超えるすごいアクションゲームを作る!!」

みたいな壮大だけどぼやけたイメージだと完成しないです。

「マリオみたいなゲーム作りたいから、手始めにゴールまで走るゲーム作ってみよう!!」

最初はこれくらいでいいです。そしてこの内容でできる限りはっきりとしたイメージを作ります。「まっすぐの道だけどたまにウ〇コとか落ちててジャンプで避けながら進む」みたいな感じでね(そんなゲームどっかにあったなぁ。。)

まとめ

偉そうに書きましたが半分は自分への戒めです(^^;)

ただ、本当にイメージは大事だと思います。強くはっきりイメージがあればあるほど自分の望んだものが出来上がる可能性は確実に高くなります。

ゲームに限らず、料理でも絵でも音楽でもファッションでも人生でもイメージが大事です。はっきりしたイメージであればあるほど達成できる可能性が上がります。

人生はイメージ

そんな言葉をどっかで聞いたような。。

 

キャラクターに簡単な加速度をつける

今日はちょっとした小技の紹介です。キャラクターを動かすときに簡単な加速度みたいなものをつける方法です。

2D横スクロールゲームを作るときに

のような感じでキャラクターの座標に直接数値を足してしまうのは良くありません。特にジャンプ中に方向転換するとカクカクした動きになってしまいます(ファミコンの北斗の拳みたいな感じ)。

それを滑らかにする方法がこちら

だいぶ省略してますが、イメージは伝わると思います。

move_xという移動値を入れる変数を用意します。そして押した方向に対して右なら+、左ならーの値を加算します。そしてそれを移動値としてプレイヤーの座標に加算します。

これによって反対方向を押した瞬間に反対に動くということはなくなり、また、同じ方向を押し続けることで移動値が増え加速しているように見えます。

もちろんこれはキャラクターをジャンプさせるときにも応用できます。

今回は単純に1ずつ加減算してますが、もっと本格的な感じに見せるためには値を工夫する必要が出てきます。いろいろな方法があるようなので探してみると面白いかもしれませんね。

 

以上、小技紹介でした(‘ω’)ノ