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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1114
E.Tアクションゲームについて12解決


E.T

リンク

2014/11/14(Fri) 22:40:10|NO.66015

こんばんは。
以前から2〜3回アクションゲームについて質問させて頂いているのですが
今回サンプル?なしで一から作成しているのですがプレイヤーと
地面の当たり判定がわかりません。
以前はマップチップサイズずつ移動のほうほうでしたが
今回は2ドットぐらいずつの移動なのでわかりません。
とりあえずマップスクロール・マップ描画などができています。
現在のデータのダウンロードリンクを貼っておくので
当たり判定の方法がわかる方は教えて下さい。
おねがいします。

ダウンロードリンク:http://1drv.ms/1zUky0h



この記事に返信する


E.T

リンク

2014/11/15(Sat) 10:27:18|NO.66018

すいません。
マップ判定の前にマップの描画部分からおかしかったです…
画像を編集してブロックごとの周りに枠を書いて実行した結果
マップが1〜5ドット程度重なっていることが判明しました。
たぶん今当たり判定をやってもマップ自体がずれているので
当たり判定が正常じゃなかったみたいです。


//マップ描画 *MAPXY repeat map_text_max_y map_loop_y=cnt repeat map_text_max_x color 255,255,255 gmode 4,100,100,255 pos cnt*MAPCHIPSIZE-px,map_loop_y*MAPCHIPSIZE-py celput 1,MAP(cnt,map_loop_y),1,1 loop loop return

のposでちゃんと位置をやってるはずなのに…
何が原因でしょうか?



HIJIKI

リンク

2014/11/15(Sat) 18:15:39|NO.66025

E.Tさん

こんばんは。

さっそくですが、下記について、こちらで検証してみましたところ、
仰っている内容が再現できませんでした。
これは、私の理解が間違っているのでしょうか?

>マップ判定の前にマップの描画部分からおかしかったです…
>画像を編集してブロックごとの周りに枠を書いて実行した結果
>マップが1〜5ドット程度重なっていることが判明しました。

[画像を編集してブロックごとの周りに枠を描いて実行した結果]
http://holyweb.pgw.jp/hijkcapture/hijiki/ahce9223.png



E.T

リンク

2014/11/15(Sat) 18:45:25|NO.66027

>HIJIKIさん
あれ…?
□のくっつくところに2ドットあるから太く見えてただけですね…



E.T

リンク

2014/11/15(Sat) 19:06:00|NO.66029

当たり判定って左をおしたらvx=-1みたいなかんじして
ブロックだったらvx=0に変更して
px+=vxッて感じにしようと思ってるんですけど
こんな考え方で大丈夫でしょうか?
当たり判定はどのような計算でできますか?



E.T

リンク

2014/11/15(Sat) 19:16:50|NO.66030

連続投稿すいません。
当たり判定って左をおしたらvx=-1みたいなかんじして
ブロックだったらvx=0に変更して
じゃなくて
左をおしたらvx=-1みたいなかんじして左が
ブロックだったらvx=0に変更して
でした



暇人

リンク

2014/11/16(Sun) 20:26:06|NO.66066

マップチップとキャラの当り判定は、色々解説があると思う
ここの掲示板でも数十回はされてると思う
それらを見てないのか、見ても分からないのか、自分のゲームに応用できないのか分からないが

とりあえず判定の入り口だけ説明する

サブルーチンの*ATARIに

title ""+MAP((px+ginfo_winx/2)/MAPCHIPSIZE,(py+ginfo_winy/2)/MAPCHIPSIZE)
を追加

これが点とマップチップの基本的な判定になる
普通キャラは点じゃ無く大きさを持ってるから
これだけだとキャラの左上しか判定できないので
キャラの4角全部を判定したりする



aaa

リンク

2014/11/16(Sun) 20:51:55|NO.66067

とりあえず動けばいいのであれば、
*KEYと*ATARIのサブルーチンを以下に置き換えれば動くと思われます。
(考え方は暇人さんの内容と同じと思われます)


//キー入力 *KEY stick ky,15 vx=0:vy=0 if ky&1:vx=-2 if ky&4:vx=2 if ky&2:vy=-2 if ky&8:vy=2 return //当たり判定 *ATARI check_map_x=(px+vx+ginfo_winx/2)/MAPCHIPSIZE check_map_y=(py+vy+ginfo_winy/2)/MAPCHIPSIZE if (check_map_x<0)||(check_map_x>=MAP_X):return if (check_map_y<0)||(check_map_y>=MAP_Y):return if MAP(check_map_x,check_map_y)!=0:return check_map_x_2=(px+vx+ginfo_winx/2+(MAPCHIPSIZE-1))/MAPCHIPSIZE check_map_y_2=(py+vy+ginfo_winy/2+(MAPCHIPSIZE-1))/MAPCHIPSIZE if check_map_x_2<MAP_X{ if MAP(check_map_x_2,check_map_y)!=0:return } if check_map_y_2<MAP_Y{ if MAP(check_map_x,check_map_y_2)!=0:return } if (check_map_x_2<MAP_X)&&(check_map_y_2<MAP_Y){ if MAP(check_map_x_2,check_map_y_2)!=0:return } px+=vx:py+=vy return



E.T

リンク

2014/11/16(Sun) 22:05:13|NO.66071

aaaさんと暇人さんのスクリプトを参考に0から作りなおしてみたら
地面にめり込む・左右のブロックに向かってその方向のボタンを
おすと上に行ってしまうなどよくわからないバグが発生します。

http://1drv.ms/1sXmflc
↑これがバグが発生するスクリプトとデータです。
キャラをアニメーションさせるなどいろいろ改造したのですが
地面に接触中移動が何故か遅い…などいろいろバグが発生します。
結構自分では頑張った方です…
ジャンプの方法や当たり判定の教えてください。
でもaaaさんのスクリプトを以前のデータでやったらしっかりなったのに
なんで0から作りなおしたほうだとできないんだ…?



暇人

リンク

2014/11/19(Wed) 00:37:38|NO.66090

地面にめり込むのは落下量より上昇量のが少ないから
地面の上に乗せたいなら地面の座標から自分の座標を決めるようにする
移動速度が遅いのはめり込んでる時に横の速度が0にされてるから


> if CHECK_MAP_Y_2<MAP_DATA_MAX_Y{ //左下壁判定
> if MAP(CHECK_MAP_X_1 ,CHECK_MAP_Y_2)=0&MAP(CHECK_MAP_X_2 ,CHECK_MAP_Y_2)=0{
> vy+=2
> }else{
> vy=-1
> }
> }
この部分を

//横の座標が変更されてる可能性があるので再度取得 CHECK_MAP_X_1=(px+vx+ginfo_winx/2)/MAP_CHIP //座標取得 CHECK_MAP_X_2=(px+vx+ginfo_winx/2+(MAP_CHIP-1))/MAP_CHIP //座標取得 if CHECK_MAP_Y_2<MAP_DATA_MAX_Y{ //左下壁判定 if (MAP(CHECK_MAP_X_1 ,CHECK_MAP_Y_2)=0) & (MAP(CHECK_MAP_X_2 ,CHECK_MAP_Y_2)=0) and jpf=0 { vy+=2 //縦の座標が変わるので再度取得 CHECK_MAP_Y_1=(py+vy+ginfo_winy/2)/MAP_CHIP // CHECK_MAP_Y_2=(py+vy+ginfo_winy/2+(MAP_CHIP-1))/MAP_CHIP // } if (MAP(CHECK_MAP_X_1 ,CHECK_MAP_Y_2)) or (MAP(CHECK_MAP_X_2 ,CHECK_MAP_Y_2)) {//最終的に足元にブロックが有るか判定 py=CHECK_MAP_Y_2*MAP_CHIP-ginfo_winy/2-MAP_CHIP vy=0 jpf=0 } }
に置き換え

これだけでは完全じゃ無いので問題は残ってる



E.T

リンク

2014/11/19(Wed) 20:57:02|NO.66112

>暇人さん
ありがとうございます。
めり込みや上昇するバグは消えてあとは上下の当たり判定だけです。
とりあえずこんど(明日、明後日は中間テストなので)自分で考えてみますが一応
このスレは残しておきます。
もしわからなかったらお願いします



E.T

リンク

2014/11/20(Thu) 15:54:57|NO.66117

中間一日目も終わっていま続きをして↑ノ当たり判定ができていないのですが
すり抜けブロックも作りたいのですが
if MAP(CHECK_MAP...)!=0:vx=0
の!0は多分空白以外だったら速度を0にするってことですよね。(自分でよくわからない…)
そこで!0を変えればいいのですがどう変えたらいいかわかりません。
右下、右上...ッて感じで全部を変えないといけないのですか?
他にも?ブロック的な奴も作りたいので一つを変えたら全部がかわる+
コードがあまり複雑・長くならない
方法でありますか?



E.T

リンク

2014/11/23(Sun) 23:08:43|NO.66162

とりあえず上のあたり判定ができて一応ゲームぽい物が出来たので
解決にします。
ありがとうございました



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