HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0827
TATA正確な当たり判定2解決


TATA

リンク

2009/8/27(Thu) 13:17:31|NO.27349

HSPDX.ASで、横スクロール系のアクションゲームを作成しております。
当たり判定についていろいろ調べたのですが、あまりいいものが見当たらず
質問させていただきます。

キャラクターの画像通りの当たり判定を持たせることはできるのでしょうか?

真四角の映像から、透明色として表示していない部分でも、衝突判定されて
しまうので、この部分を当たらない様にしたいです。



この記事に返信する


リンク

2009/8/27(Thu) 22:22:53|NO.27361

こんばんは

ドット単位での当たり判定、
HSPDXではないですけどサンプルを作ってみました。
HSPDXで使うにはちょっと工夫がいると思います……。
文字の白い部分が接触すると、タイトルに「HIT!」が表示されます。


screen 1, 128, 64 cls 4 color 255, 255, 255 font msgothic, 64 mes "八十" gsel 0 px = 100 : py = 100 ex = 200 : ey = 100 *main stick k, 15 if k & 1 : px -= 1 if k & 2 : py -= 1 if k & 4 : px += 1 if k & 8 : py += 1 res = 0 ; まずは画像の矩形で判定 if px < ex + 64 and px + 64 > ex and py < ey + 64 and py + 64 > ey { ; 接触している矩形の幅と高さを求める w = 64 - abs(px - ex) h = 64 - abs(py - ey) ; 自分の画像データでの読み出し開始点を求める psx = limit(ex - px, 0, 63) psy = limit(ey - py, 0, 63) ; 相手の 〃 esx = limit(px - ex, 0, 63) esy = limit(py - ey, 0, 63) gsel 1 repeat w x = cnt repeat h y = cnt pget psx + x, psy + y if ginfo_r { y = cnt pget 64 + esx + x, esy + y if ginfo_r { res = 1 break } } loop if res : break loop gsel 0 } ; 白い部分が当たっていた場合はHIT!を表示 if res { title "HIT!" } else { title "カーソルキーで移動します" } redraw 0 color 0, 0, 0 : boxf gmode 2, 64, 64 pos px, py gcopy 1, 0, 0 pos ex, ey gcopy 1, 64, 0 redraw 1 await 16 goto *main

動きを重くしないように、最初に矩形同士で判定してます。
そのあと、実際にふたつの画像が重なっている範囲のなかで
透明色ではない部分が重なっているかどうかを見てます。
キャラクターがふたりしかいないから重くなっていないだけかも知れませんが…。
pgetよりも、当たり判定用の配列を作っておく方が、動作が早いかも知れませんー

…自分のゲームにも組み込んでみようかな(´・ω


ではでは、ゲーム作り頑張ってください〜^^



TATA

リンク

2009/8/28(Fri) 01:58:32|NO.27364

返信ありがとうございます!

なるほどー
とりあえず小1時間眺めてやっと理解しました。
てっきりES命令系の方でできると思い込み、そっちばっかり見てました。
こんなこともできるんですね。

DX系に対応させつつ、私のゲームにまで対応させるとなると、う〜ん……

どうやら不可能では無いみたいです。
とりあえずやってみたいと思います。
わざわざプログラム組んでいただいて、ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.