トピック
ベルック beloknova

ARPGの壁の作り方を教えてください!

今アクションRPGを作っているのですが 壁(ぶつかったら進めない)を作り方がわかりません。自分になりに考えてもみたのですがやっぱりわかりません スプライトの移動方法はスライドパットで STICK OUT x,y : mx=mx+x:my=my-y:SPOFS 0,mx,myていう感じです。 スプライトの下のBGを調べて壁を作りたいです。(64番のBGチップは壁みたいな) 不明瞭な点は聞いてください。 皆さんの力を貸してくださいお願いしますm(_ _)m
1そうだね
プレイ済み
返信[1]
親投稿
Godot orz_127
よくわかりませんが BG調べるには、BGGETと言うコマンドが使えそうですよ。
2そうだね
プレイ済み
返信[2]
親投稿
BGのレイヤーが0で、MXとMYがドット単位なら、 IF BGGET(0,MX,MY,1)==64 THEN でスプライトの右上隅が64番のBGチップか調べられます。調べる場所は、MXとMYの値を調整して下さい(足元ならMY+16等々、高さ16の場合)。
2そうだね
プレイ済み
返信[3]
親投稿
ほしけん Hosiken
BGGETの使い方は、他の方向けに作ったサンプルがあるので 良かったら見てみてください。42EXEN3V 十字ボタンで動き、当たると赤くなります。
1そうだね
プレイ済み
返信[4]
親投稿
ベルック beloknova
もし、右から64のBGに触れたとして 左には入力出来ないようにすればいいのかな?
0そうだね
プレイ済み
返信[5]
親投稿
ほしけん Hosiken
STICK OUT x,y IF BGGET(0,mx+x,my+y,1)!=64 THEN  mx=mx+x:my=my-y END でとりあえず壁に引っかかると思います。 壁にめり込んだ分押し戻すようなやり方が理想なのですが、とりあえず上記がお手軽にできると思います。
0そうだね
プレイ済み
返信[6]
親投稿
Godot orz_127
すみません。 使ったことがない者が言うのはなんなのですが、この質問の前に、別の投稿で、BGGETの返値を詳しく教えて欲しいと言うのがありました。 なのでヘルプを見て説明してみたのですが…。 BGGETの返値は、キャラクタ番号+属性の16bitの値なのではないでしょうか? 0~11bitがキャラクタ番号で 12~15は縦、横、回転の3つの属性だったと思います。 IF (BGGET(…) AND 4095) == 64 THEN が正しいと思いますが、当方の認識誤りでしょうか? お二方ともマスクせず返値を比較しているので気になった次第です。
0そうだね
プレイ済み
返信[7]
親投稿
ベルック beloknova
ほしけんさんが教えてくれたやり方でやってみたんですが、壁に突き刺さったまま動かなくなりました。 やっぱり押し出さないとダメっぽいですね…
0そうだね
プレイ済み
返信[8]
親投稿
Godot orz_127
どういう風に作っているかは不明ですが、ギャラが移動する前に、移動予定地をチェックし、移動できない場所だったら、その移動は取り消しとしないとダメなのかなと。 移動してからチェックしていませんか?
0そうだね
プレイ済み
返信[9]
親投稿
BGに反転や回転を加えて居る場合は、Godotさんの謂われる通りですが、通常、壁は反転や回転を加えないので、上位ビットのマスクは必要無いと想います。
0そうだね
プレイ済み
返信[10]
親投稿
ほしけん Hosiken
あっ…BGGETのmy+yがプラスマイナス間違えてました。orz もしそのまま打ち込んだなら、my-yにすれば壁に刺さらなくなるかも? Godotさん 厳密にはそれが正しいですが、壁を縦横反転・回転させることがないのが確実なら、別にやらなくてもいいと思ってます。実際私もやらないこと多いです。
0そうだね
プレイ済み
返信[11]
親投稿
ベルック beloknova
Godotさん> 進める量を増やしたりしたいと考えているので(進む速さ)5ドットずつ動いたとすると そのやり方では4ドットくらい離れた所に壁が出来てしまう気がするのですが…
0そうだね
プレイ済み
返信[12]
親投稿
Godot orz_127
いか☆せんせいさん、ほしけんさん 回答ありがとうございます。 自分でも多分その前提で作っているなら、同様にいちいちマスクしないと思います。 ベルックさん 「4ドットくらい離れた所に壁」とは壁との隙間が4ドット空いているのに進めない、壁ピッタリ迄行けない、と言うことですか? ならば、現在位置から1ドットづつ移動先まで調べていって、行けるところまで進む、とするのでしょうか? すみません、その処理は作ったこともなく想定で言っているだけなので、いか☆せんせいさん、ほしけんさんからの方が正しい解が得られると思います。 お騒がせしました。
0そうだね
プレイ済み
返信[13]
親投稿
ベルック beloknova
Godotさん なるほど!やってみます
0そうだね
プレイ済み
返信[14]
親投稿
ほしけん Hosiken
カベに引っかからなくなった改良版です。 Xだけ動いたとき、Yだけ動いたときで別々に当たり判定を取ります。 万能ではないのですが、超お手軽です。 STICK OUT x,y IF BGGET(0,mx+x,my,1)!=64 THEN mx=mx+x IF BGGET(0,mx,my-y,1)!=64 THEN my=my-y
0そうだね
プレイ済み
返信[15]
親投稿
ベルック beloknova
何だかんだで出来ました、手伝ってくださってありがとうございました!
0そうだね
プレイ済み