[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前回、「攻撃関連をつくる」などと予告しましたが、まったく違う事をやっていました。
思いつきで
「キャラが坂道を登れるようにしたらすてきかな~」
と早速挑戦してみました。
簡単にできるだろうと考えていたのですが、これがなかなか思うようにいきません。
最初は、坂のオブジェクトに接触したら斜め方向にスピードを加えてやれ、
と考えていたのですが、登らないどころか坂にめり込む始末。
斜面に当たるオブジェクトの当たり判定をPrecise(正確な辺り判定)にしたのですが、これだと、1ドットの階段が出来上がるだけだったようでして、横に進むと同時に縦にも進めなければならなかったようです。
それを実装してみたところ、妙にカクカク動く。
さらには、下りの時に坂から飛び出してしまうという体たらく。
そんなこんなで三日ほど考えていたところで、先達の知恵を借りようと、YOYOGameのフォーラムをうろうろしてみました。
慣れぬ英語に悪戦苦闘しつつ、サンプルらしきものをゲット。
これを自分の作っているゲームの環境に合わせていろいろいじっているうちに、自然と出来てしまいました。
まあつまるところ、ちゃんと理解して出来たというわけではないわけです・・・
自分なりに理解した大まかなやり方としては、
1.左右の移動の際、移動先の前方、前方上に障害物がないかを調べる。
2.前方上に障害物がなければ普通に前進、有る場合は障害物がなくなるまで縦 に移動させ続ける。
何のこっちゃという方が多数おられそうですのでコードを載せておきます。
if(keyboard_check_direct(global.k_left)) //キー入力があったとき
{
for(i=-xspeed-2;i<xspeed+2;i+=1)
{
if(place_free(x-xspeed,y+vspeed) && place_free(x,y + vspeed + 1))
//障害物がなかった時
{
x -= xspeed;
image_xscale = -1;
exit
}
if(place_free(x-xspeed,y-i))//坂にぶつかったとき
{
if(!place_free(x,y+5)&& vspeed = 0)
{
x -= xspeed;
image_xscale = -1;
if(!place_free(x-xspeed,y-i+5))
{y-=i;}
}
exit
}
}
}
おそらくなのですが三行目のfor文がポイントなのではないかと・・・
ちなみに、このコードで扱っているのは16×16のキャラクターですので、扱うサイズによって数値をいくつかいじる必要があるかもです。
斜面を実装
夢枕獏/綾辻行人/椎名誠/北杜夫/スティーブンキング
・ハマったゲーム
R-TYPE/WILD ARMSシリーズ/イースシリーズ/九龍妖魔学園紀/SIREN/ぐわんげ/プロギアの嵐/エスプレイド/エスプガルーダ/式神の城