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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0823
ポテキングアクションRPGの敵の動き3解決


ポテキング

リンク

2013/8/23(Fri) 01:27:06|NO.56600

アクションRPGの敵の動きって自機を取り囲んでって言うか
前方に敵がいたらそれをよけて近づいてきますよね

buffer 2 color 255,,:boxf 0,0,32,32 color ,,255:boxf 32,0,64,32 dim mob,10:dim mx,10:dim my,10 repeat 5:mob.cnt=1:mx.cnt=0:my.cnt=cnt*32:loop screen 0 x=320:y=240 *main gosub *move gosub *mobmove gosub *draw title ""+my.3 await 10 goto *main *move getkey k1,37:if k1:x-=2 getkey k2,38:if k2:y-=2 getkey k3,39:if k3:x+=2 getkey k4,40:if k4:y+=2 x=limit(x,0,640-32) y=limit(y,0,480-32) return *mobmove repeat 10:cnt2=cnt if mob.cnt>=1{ rex=mx.cnt:rey=my.cnt if (mx.cnt)<=x:mx.cnt+1 if (my.cnt)<=y:my.cnt+1 if (mx.cnt+s)>=(x+s):mx.cnt-1 if (my.cnt+s)>=(y+s):my.cnt-1 //------------mobと自機の衝突判定--------------- x1=x:x2=x+32:y1=y:y2=y+32 mx1=mx.cnt:mx2=mx.cnt+32:my1=my.cnt:my2=my.cnt+32 if(x1<mx2)&(x2>mx1)&(y1<my2)&(y2>my1){ mx.cnt=rex my.cnt=rey } //------------mob同士の衝突判定--------------- mx1=mx.cnt:mx2=mx.cnt+32:my1=my.cnt:my2=my.cnt+32 repeat 10 if (mob.cnt>=1)&(mob.cnt2>=1)&(cnt!cnt2){ mx3=mx.cnt:mx4=mx.cnt+32:my3=my.cnt:my4=my.cnt+32 if(mx1<mx4)&(mx2>mx3)&(my1<my4)&(my2>my3){ mx.cnt2=rex my.cnt2=rey } } loop } loop return *draw redraw 0 color 255,255,255:boxf repeat 10 if mob.cnt:pos mx.cnt,my.cnt:gcopy 2,0,0,32,32 loop pos x,y:gcopy 2,32,0,32,32 redraw return
このソースを実行すると
自機を追尾するんですけど、前方に敵がいるとそれを避けてもっと近づいてほしいんです。
それをやろうと思ってもうまくいきません。
わかる方いましたら教えてくださいよろしくお願いします。



この記事に返信する


who am I?

リンク

2013/8/23(Fri) 15:14:26|NO.56607

アルゴリズムが必要な気がする。



 

リンク

2013/8/23(Fri) 16:49:16|NO.56610

>前方に敵がいたら
>前方に敵がいると
「敵」って敵にとっての仲間ってことか。

その場合、仲間も障害物の1つであるだけだから、
障害物を避けて対象に近付いていく動作を作ったら良いだけではあるけど、難しそうですね。

A*(エースター)アルゴリズムってのが役立つかも。
HSPコンテストにソース付きのがありますよ。
http://hsp.tv/contest2010/entry.php?id=66



ポテキング

リンク

2013/8/23(Fri) 20:25:11|NO.56619

コメントありがとうございます。
NO.56610さんが紹介してくださった作品のソースを見て
ふと思いついた方法をやってみたところ挙動はおかしいですけど
ちゃんとよけて近づいて着てくれるようになりましので解決とさせていただきます。
ご教授していただきありがとうございました。



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