ページ 11

アクションゲームに坂道を追加したい

Posted: 2013年2月12日(火) 19:04
by lava
DXライブラリでマリオのような2Dアクションゲームを作っていて、マップの仕掛けをいろいろ作ったのですが、
未だに坂道だけできていません。坂道を作るのを手伝ってもらえないでしょうか?

作ろうとしているのは、ブロック1マス分の角度45度の上り坂と下り坂、
あともうひとつ ブロックを横に2マス分使った角度25,5度の上り坂と下り坂です。

とりあえず考えてみたんですが、まずマップチップのブロックに属性というのが付けてあって、
例えば属性『Slip』が1のブロックは滑って、0だと滑らない。みたいにしています。
それに属性『Slope』というのを作って、それが1だと45度の上り坂、2だと下り坂、3だと25,5度上り坂の左側…としていって、
0だと坂ではない。としてみました。

そして、『Slope』のブロックに接触しているときだけプレイヤーの高さを補正するようにしてみました。
なのですが、私はプレイヤーキャラクターのグラフィックの中心の真下がちょうど坂に接触するようにのぼらせたいのです。
要するに、プレイヤーキャラは縦横32pixずつなので、Player->X+16とplayer->Y+31の座標を基準にしたいのです。

作ってみたプログラムが、
プレイヤーの中心の真下のマスの属性が『Slope=1』だったら、プレイヤーのY座標を
『プレイヤーの真下のY座標(Y+31)を32で割ってから32を掛けた数(あまりを切り捨てる)から、
プレイヤーの中心のX座標(X+16)を32で割ったあまり を引いた数』にするというものなのですが、

コード:

//坂道1(右上がり45度)
if(MapAttr[MAP_CHIP(((int)Player->Y+31)/32,((int)Player->X+16)/32)].Slope==1 ){
	Player->Y = (((int)Player->Y+31)/32)*32 - ((int)Player->X+16)%32;
}
のぼる以前に、上り坂の隣が通れないブロックなのでひっかかって登れませんし、
無理やり登らせても補正がかかるのは坂のマスに接触しているときだけなので一番上まで登れません。

まずこんな式を描いてる時点で怪しいと思うんですが、何か良い方法はないでしょうか?