トップページgamedev
1001コメント296KB

HSP - Hot Soup Processor [7]

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。04/06/10 04:28ID:cbXY3kVC
前スレ
  HSP - Hot Soup Processor
   http://game.2ch.net/gamedev/kako/1005/10053/1005332663.html
  HSP - Hot Soup Processor [2]
   http://game.2ch.net/test/read.cgi/gamedev/1035428757/
  HSP - Hot Soup Processor [3]
   http://pc2.2ch.net/gamedev/kako/1043/10436/1043609896.html
  HSP - Hot Soup Processor [4]
   http://pc2.2ch.net/test/read.cgi/gamedev/1047082415/
  HSP - Hot Soup Processor [5]
   http://pc2.2ch.net/test/read.cgi/gamedev/1058507713/
  HSP - Hot Soup Processor [6]
   http://pc5.2ch.net/test/read.cgi/gamedev/1078660876/

関連サイト
  ONION software (本家)
   http://www.onionsoft.net/
  HSP CENTER
   http://hspcenter.com/
  HSP ML
   http://garde.esprix.net/hsp-ml/
0280名前は開発中のものです。04/07/05 13:14ID:+nEAs13D
連レススマソ
>>267
A1 = 自弾Xと敵Xの差
B1 = 自弾Yと敵Yの差
A2 = (-自弾サイズX<A1)&(A1<敵サイズX)
B2 = (-自弾サイズY<B1)&(B1<敵サイズY)
if (A2&B2)=1 : 当たり
みたいな感じでやってる。確かどっかの
ページで解説したやつをパクった。

>>269
自機のサイズが2*2で、移動量が1フレーム2〜4ドットにしてるから、
敵弾のスピードが1フレーム1ドット移動ならOKだけど、
もぅ少し速い弾(をメインにする予定)だとたまに抜ける時があるんですわ。
でも、ある程度場に残って邪魔する弾なんか作ったときは
参考にさせてもらうんで助言感謝
0281名前は開発中のものです。04/07/05 14:46ID:axZG/CqA
描画と当たり判定のフレームを別にする。
当たり判定はするが描画しないフレームが存在するようにする。
0282名前は開発中のものです。04/07/05 15:10ID:KIC705X9
>>273
LARGE_INTEGERは基本的に64bit整数型
0283名前は開発中のものです。04/07/05 17:59ID:xyIT+t5Z
プラグインにある衝突判定命令使うほうが速いだろう。
すり抜けが嫌なら、弾のスプライトを進行方向逆に少し伸ばして長方形にすれば?
その場合回転使うと描画が重くなる可能性あるので16方向くらいで用意したほうが良いけど。
0284名前は開発中のものです。04/07/05 18:45ID:+nEAs13D
>弾のスプライトを進行方向逆に少し伸ばして長方形に
斜め長方形は無理でそ? 長方形で縦や横に大きく当たり判定が
取れたとしても、斜めだと正方形の当たり判定にせざるを得ないから、
こだわるとレイヤー作って色取得、みたいなことしなきゃならないっぽい。
0285名前は開発中のものです。04/07/05 19:01ID:c3p/S4A+
ごめん回転させないと無理だった
0286名前は開発中のものです。04/07/05 19:18ID:C/CG0pTe
>>282
誰も聞いてないし
0287名前は開発中のものです。04/07/05 19:27ID:roeLUvRh
しかし100位の描画と判定で重くなるって
スペック低いだけじゃないの?
0288名前は開発中のものです。04/07/05 19:35ID:zUjbqKss
そういえば最低動作環境ってどれくらいを想定して作ってる?
よほど古いPCじゃない限り2Dシューティングで重くなるなんてことないと思うが
0289名前は開発中のものです。04/07/05 19:47ID:FU0s4jcc
PenIII-800&GeForce2くらいで動きゃ良いかなとは思ってるけど、
前に作ったのはPenIII-500でも平気だった。

最近はDirectX自体がそこそこのスペック(CPU&VGA)を要求するから
DirectX使うならある程度切り捨てないとダメかもよ。
0290名前は開発中のものです。04/07/05 21:05ID:+nEAs13D
自弾(50個)vs敵(20匹)が画面上いっぱいで
弾移動が1フレームに5ドットの時の当たり判定の場合

repeat 50  ;自弾50個
   repeat 5 ;1ドットずつ5回動かす
   自弾の移動処理
   10命令くらい?
   当り判定サブルーチンへ
   loop
loop
*ATARI
  repeat 20 ;敵数20
  当り判定命令20くらい
  loop
  return
とすると、
50*((5*20*20)+10) = 100500命令
うちのPCでは、上のほうでやったベンチマークテストの方法だと、
100500命令実行するのに25〜30msくらいかかる。

今は大雑把にやって全然正確な値じゃないけど、
少なくとも60FPSを保つのに必須の1フレーム16msは大幅に越えて
しまうのよ。

(上のルーチンを見て、255が言ったように
 組み方が悪い! と言う人が居たら是非、
 もっと速く動く組み方を教えて欲しい!
 お願いします!)
0291名前は開発中のものです。04/07/05 21:21ID:T1MN9eXN
HSPを卒業して他の言語で組む
0292名前は開発中のものです。04/07/05 21:26ID:KiQiLVex
>>290
マシンスペックは?
0293名前は開発中のものです。04/07/05 21:34ID:+nEAs13D
>>292
セレロン1.7G
メモリは関係ないと思うけど、256ある
VRAMは16Mあるから、
わけわからんエフェクトつけない限り、
描画関連で遅くなることはまずないと思う。
0294名前は開発中のものです。04/07/05 21:52ID:MIzlaErt
>>290
最初に、5ドット進む距離を内包する正方形でも求めて、敵を絞り込んでから1ドットずつ絞り込んだ敵で判定しては?
その処理方法だとこれぐらいかな?
0295名前は開発中のものです。04/07/05 22:12ID:+nEAs13D
>>294
お?それというのは、
敵が回りにいないのに当り判定をするのは無駄だから、
近い敵だけ探して判定すると言うこと?

まじゴメン、バカで理解できんかった・・・(='ω`)トホー
0296名前は開発中のものです。04/07/05 22:16ID:9NpQ14pT
自機に近い弾だけ先に抽出するとか…。
つか少しくらいのすり抜け気にするな。
0297名前は開発中のものです。04/07/05 22:19ID:9NpQ14pT
ああすまん重複
0298名前は開発中のものです。04/07/05 22:20ID:MIzlaErt
>>295
そう。
5回、全敵に対してやるのはかなりの無駄だからなぁ・・・
できるだけ、絞り込まないと。
0299名前は開発中のものです。04/07/05 22:22ID:Kz1aLSou
295さんじゃないけど、同じくstg作っているものとして関心あります。
いや、295さんと違い、わたしは弾のすり抜け問題なぞここを見て初めて認識したのですが。
es_checkで済ませ、すり抜けることがありうるなんて考えてもいなかった…。

294さんのおっしゃるのは、たとえば透明な、実際の弾よりも大きめのスプライトを一緒に飛ばして
それで簡易に当たり判定。
もしも判定がイエスならば、細かくさらに判定ということでしょうか?
0300名前は開発中のものです。04/07/05 22:23ID:Kz1aLSou
すみません、書き込んでいる間に返事がありましたね…。
0301名前は開発中のものです。04/07/05 22:42ID:+nEAs13D
ふむ、なるほど。
場に弾が200個あって5回判定すると1000、
近いのだけ抽出すれば、200回強で済むわけか。
今まで考えもつかなかったなぁ。これでかなり
処理速度が向上しそうだ、助言マジ感謝!

>>296
ゲームとして成り立つなら
気にしなくてもOKだとは思うけどねw

299氏も同じSTG製作ガンバロナー
0302名前は開発中のものです。04/07/05 23:20ID:MIzlaErt
さっき思いついたが、1フレームにそれぞれ高々数ドットしか進まないと考えると、
ある一定距離以上の弾は数フレーム間は判定をはしょってもいいな、と。
けど、FPSが揺れるから微妙か・・・
0303名前は開発中のものです。04/07/05 23:24ID:Gm3z7601
http://ww22.tiki.ne.jp/~y-shirakawa/hsp/sokudo.txt
速度。
へんなテストばっかりだが。
0304名前は開発中のものです。04/07/05 23:26ID:kc0/J2bA
アセンブリに落とせれば凄く勉強になるのになぁ。
0305名前は開発中のものです。04/07/05 23:27ID:ob4Ta5mK
ま、弾幕シューティングなら敵弾はゆっくり飛ばそうぜってことだな。
0306名前は開発中のものです。04/07/05 23:29ID:+nEAs13D
それは、敵弾と自機との距離の差を求めて、
一定範囲内に入ったら細かくするってこと?
なんかこのスレの方々は、優しくレスくれて涙が出るよ、ありがとう!

@弾を中心に範囲を決めたレイヤーを打ち出し、
 レイヤー内に対象が入ったら細かく判定する。
A弾と対象の差を求めて、対象と近づいた値のものだけを
 判定する。
どちらの方法も 大雑把→詳細 と、2重の判定を
するってことになるね。ふむふむ。
Aで差を求めたほうが簡潔でいいかなぁ?
0307名前は開発中のものです。04/07/05 23:42ID:MIzlaErt
>>306
あー、302のことは、一定距離以上の弾は、初めから判定を数フレームやらないという意味ね。
説明しにくいけど
1フレームにnドット進むならmフレーム進むのはその弾中心の円内(半径mnドット)にいるはず。
逆に、自機も同じようにその自機中心の円内にいるはず。
とすると、円同士が重ならなかったら、mフレームはその弾との判定はしなくてもいい。
・・・って感じなんだけど、実装するとなるとちょっとめんどくさそうだ・・・
それに計算で逆に遅くなっても意味ないし、バグの原因を作りそうだな・・・
あんまり効力はなさそうでメンゴ(汗
0308名前は開発中のものです。04/07/06 00:43ID:IGUAa5VB
>281
のやり方でいいんでない?

描画1フレーム中に「座標更新〜当り判定」を2回以上にする。
0309名前は開発中のものです。04/07/06 00:45ID:IGUAa5VB
そもそも弾幕ゲーのお約束として

遅い弾は小さくて大量
速い球はデカイor長くて小量

だし。
0310名前は開発中のものです。04/07/06 01:22ID:7+H5IcQB
軽くで良いからx軸y軸でソートしておく。
そうすると当たり判定が一気に省ける。
弾幕系は当たり判定に関係ない弾が多いから。
0311名前は開発中のものです。04/07/06 03:10ID:e7tYRum6
あれ?
もう一つのPC Duron 800MHz : Meで測ったら、2400msぐらい・・・
>>268とあんまり変わらない・・・
そういえば、前作ったシューティングゲー(DirectX無し)も>>268のPCより、Meの奴のほうがFPS出てるんだよね・・・
なんか、泣けてきた・・・
0312名前は開発中のものです。04/07/06 07:32ID:TMdzeQ9w
>>308
それをやってるから処理速度が追いつかなくなる、
という話題なのだが・・・。
当り判定が突き抜ける問題はいくらでも克服できるようになったよ。

>>310
すまそ相変わらずバカで理解できなかった・・・。
詳しくお願いしま。
031330804/07/06 08:18ID:IGUAa5VB
>312
スマソ.斜め読みしてた。
0314名前は開発中のものです。04/07/06 21:28ID:7g+fejGr
>312
310ではないけど例えば弾のX座標を取得して10,2040,50,80,100という風にソートしておいて
自機+-10以内に入ってる弾だけ当たり判定をするっていう事かな
やり方は違うけど弾幕の場合どの方法でも自機に近い弾だけを当たり判定するって考え方は同じかと
0315名前は開発中のものです。04/07/06 21:57ID:TMdzeQ9w
>>314
なるほど理解した
みんなのおかげで、自機に近い弾だけ判定するというのは
かなーり理解しました、マジ感謝、頭が上がらんよ
310(314)氏のも参考にして、時間はたっぷりあるので
簡易判定を飛ばす、差を求める、ソートする
の3つは全部試してみまつ

俺、暗算とか頭で考えるの苦手だから
実際に動かしてみないと理解できないんだよね
(プログラマにとって致命的だな)
試して、一番速いのを実装することにしまw
0316名前は開発中のものです。04/07/06 22:18ID:FsblUBdJ
ソートするなら、めんどくさい(高度な)ソートルーチン組まないと逆に低速化するだろう
と予言
0317名前は開発中のものです。04/07/06 22:39ID:eF+CU01H
正確にはソートというより並び替えだね。
大抵は前後の順番が入れ替わるだけだから。
弾を発射するときだけ重くなるけど他は大して重くならないと思う。
毎フレーム比較するんじゃなくて各フレームで部分部分比較すれば
そんなに誤差でないと思うし。
0318名前は開発中のものです。04/07/06 23:21ID:7Csr8IqI
当方のHSPがおかしい・・・
OS(XP pro)なんだが、await 1がどうみてもwait 1になってる・・・それもawait 10までwait 1。
でも、ソースによってはwait 1扱いにはならない。
なんだよ、これ・・・OTL
0319名前は開発中のものです。04/07/06 23:21ID:IwrX1p6y
goto命令で、
ラベル名に変数を使うのは仕様上無理らしいんですが、
他の方法でそれに近いことをするのは出来ませんか?
ないなら諦めて、地道に名前書きますが・・・
0320名前は開発中のものです。04/07/06 23:38ID:FsblUBdJ
>>319
onで実現できるように書いたら
0321名前は開発中のものです。04/07/06 23:43ID:KeokYOn1
on gotoでは駄目?
0322名前は開発中のものです。04/07/06 23:55ID:7KCQMY1y
>>315
速いソートルーチンを組んでおくと
ゲームを作る上でめちゃめちゃ便利なので
(ハイスコアのソートとか、ホーミング武器の標的選択順とか)
面倒でも手をつけておくことをおすすめする。
0323名前は開発中のものです。04/07/06 23:58ID:IGUAa5VB
>315
水を差すようで悪いが
労力の割にはあまり報われない気が…

自機当り判定が2*2ドットでも敵弾の最小8*8(東方の最小弾が見た目上はこの大きさ)が貫通するのに
相対速度が最低でも10ドット以上(敵弾の判定も見た目より小さいのかもしれないけど)

8*8の弾なんてせいぜい1フレームあたり6〜8ドット移動ぐらいまでだと思うし
1フレーム1〜2回くらいの当り判定計算でも十分な希ガス。
いくらなんでも1ドット動くごとに判定してやる必要はないと思う。

もっと小さい敵弾を想定しているならある程度仕方ないけど。

HPS製の飛翔鮎(体験版しかやったことないけど)みたいに思いきって最小敵弾16*16にするとか。
東方を久しぶりにやってみたら速い弾は16*16で8*8の弾は遅いし。(意外と16*16の弾がメインだった)
案外1フレーム1回しか計算してないのかもしれない。

032431904/07/07 00:11ID:dPzWJtlV
onですか・・・
分岐が数百個なので結構面倒ですね・・・。
文字が横に伸びてしまうのがちょっと難点ですが
それで頑張ってみることにします。
ありがとうございました
0325名前は開発中のものです。04/07/07 00:15ID:lBWiEqny
>>324
本家より引用
> on a goto *00,*01 ・・・ *09
> on a-10 goto *10,*11 ・・・*19
> on a-20 goto *20,*21 ・・・
0326名前は開発中のものです。04/07/07 00:21ID:du4anfvD
まあ、ラベル多いのが嫌ならラベル使わないような書き方にするしかないな。
if文が多くなりそうだけど。
0327名前は開発中のものです。04/07/07 00:41ID:+Z9KVqsR
>>323
うむ、それについては俺もさすがに考えた(X*Y弾がAドット移動して云々とか)
でも8*8の弾が5ドット動いて、自機が4ドット動けば9ドット
突き抜ける可能性があるのよー。あと、判定は特殊なことしない限り四角形だから、
カドに斜めに入っていったときは判定の幅が小さくなってしまう。

それから、8*8で円形を描くとカドが空くでしょ?
空いたところまで判定入れるの変だな、って思うから、
自分は8*8の弾だったら、判定は6*6or5*5にしたいのよ。

飛翔鮎はやったことないけど妖々夢はある(体験版だけど)
妖々夢の場合は弾遅いけど、怒首領蜂やケツイみたいなのだと
これスゲーなってのが良くある(と思わない?)
ま、そういう有名な弾幕STGを
パクろうってのは無理だけどね(汗
032832704/07/07 00:45ID:+Z9KVqsR
すまそ、よく見たら被った内容多かったね・・・
0329名前は開発中のものです。04/07/07 01:14ID:+Z9KVqsR
TMAX = 50:dim TX,TMAX:dim TY,TMAX:dim TF,TMAX:dim TH,TMAX
dim TSIZEX,TMAX:dim TSIZEY,TMAX:ZX = 30:ZY = 200
screen 0,300,300
*MAIN
redraw 1:redraw 0:color 255,255,255 : boxf:stick KEY,15
if KEY&1 : ZX -= 4
if KEY&2 : ZY -= 4
if KEY&4 : ZX += 4
if KEY&8 : ZY += 4
color 0,0,0 : boxf ZX,ZY,ZX+2,ZY+2:COUNT++:COUNT2++
repeat TMAX : if (TF.cnt=0)&(COUNT>=10):TF.cnt = 1:TX.cnt = 30:TY.cnt = 20:TSIZEX.cnt = 8:TSIZEY.cnt=8:TH.cnt=1:COUNT = 0
if (TF.cnt=0)&(COUNT2>=10):TF.cnt=1 : TX.cnt=30:TY.cnt=20:TSIZEX.cnt=8:TSIZEY.cnt=8:COUNT2=0:TH.cnt=2
if TF.cnt { if TH.cnt=1:TY.cnt += 7
if TH.cnt=2:TY.cnt += 5 : TX.cnt += 5
color 0,0,0 : boxf TX.cnt,TY.cnt,TX.cnt+TSIZEX.cnt,TY.cnt+TSIZEY.cnt
HX1 = TX.cnt-ZX : HX2 = (-TSIZEX.cnt<HX1)&(HX1<2):HY1 = TY.cnt-ZY : HY2 = (-TSIZEY.cnt<HY1)&(HY1<2)
if HX2&HY2 : color 180,0,0 : boxf : TF.cnt = 0
}
if TY.cnt>=300:TF.cnt=0
loop:await 16:goto *MAIN
ちょっと試してみたけど微妙だね・・・
向かって動くと抜ける、
カドは場所によって抜ける
033032304/07/07 01:26ID:f8rNee75
>.327
自機が2*2で敵弾が5*5なら貫通に必要な相対速度が7ドット以上やね。
自機が4ドット速度で5ドット速度で向かってくる敵弾に突っ込めば相対速度は9ドット。
貫通しちゃうね。

自機2*2って小さすぎないかな?(他の弾幕ゲーはどうなんだろ)
上の例なら、自機5*5なら相対速度9ドットでも貫通しないし。

すまそ
怒首領蜂やケツイはやったことないや。

飛翔鮎(hspdx+α)体験版 まだあった。
ttp://www.h7.dion.ne.jp/~tenkuu/

…なんて書いてたらテストサンプルが書きこまれてるのでやってみて寝まつ。
0331名前は開発中のものです。04/07/07 02:43ID:bXVEuOsH
飛翔鮎の2周目?って鬼のように弾速いけどすり抜けないのかな。
0332名前は開発中のものです。04/07/07 02:45ID:h5g+gru7
速すぎて、すり抜けたことが分からないとかw
0333名前は開発中のものです。04/07/07 04:04ID:BWy2IZPg
CAVEシューは確か弾は大きいのも小さいのも全て1ドットで自機は結構大きめだったような
弾幕シューだと一般的に弾か自機どちらかの当たり判定が極小でもう一方は見た目通りかな?
0334名前は開発中のものです。04/07/07 05:28ID:bXVEuOsH
でも怒蜂や大往生よりガルーダのほうが判定小さく感じるな。
0335名前は開発中のものです。04/07/07 07:19ID:f8rNee75
>333
敵弾のほうが小さいケースもあるのか。STGあんまりやらないからシランカッタ。
まぁ両方小さかったらほとんど当らなくなるだろうけど。

個人的にはSTGに限らずアクションゲームの当り判定は見た目どおりのほうが落ち着くな。

ところでリプレイ機能ってどうやってるんだろう?
全ての自機、敵、弾のフレーム毎の位置を記録してるのかな?

ランダム要素が一切なくて入力ログだけをとってるとか?
0336名前は開発中のものです。04/07/07 07:33ID:du4anfvD
>>335
ランダムがあろうとなかろうと関係ない。
なぜなら、乱数の時に自分でシード指定すれば
おなじ、ランダムを再現できるから。
0337名前は開発中のものです。04/07/07 08:33ID:f8rNee75
>336
なるほど。
なんにせよ敵も味方も座標ではなくて
挙動を再現する方法になるな。
0338名前は開発中のものです。04/07/07 08:45ID:du4anfvD
1フレーム単位で全部保存していったらとんでもない量になる。
まあ、せめてタイミング(敵&弾を出す)を覚えさせくぐらいにしないと。
でも、プログラムがめんどくさくなるからランダム再現が一番楽だと思う。
0339名前は開発中のものです。04/07/07 13:02ID:+m8/f1N8
フレームごとのキー入力再現で良いのでは…。
0340名前は開発中のものです。04/07/07 14:36ID:SnTIiwPj
>>339
敵の動きが毎回完全に一致ならね。
ランダム要素使ってるのにキー入力だけでやったらおかしなことになる。
0341名前は開発中のものです。04/07/07 16:22ID:goM21MnB
乱数シードもいっしょに保存しておけば1対1に対応するんじゃないか?
HSPの乱数がどうなってるか知らないけど。
0342名前は開発中のものです。04/07/07 16:23ID:bXVEuOsH
randomizeも一緒に保存すれば良いでしょ。
0343名前は開発中のものです。04/07/07 16:24ID:bXVEuOsH
WAO
被った。
034425404/07/07 23:06ID:+Z9KVqsR
みんなの意見・指摘のおかげで、
無事、うちのPCでFPSを落とさずに敵弾200個を出すことに成功しますた!
自機を4*4ドットに妥協して、敵弾の最小は6*6に。
速さ3以上の弾だけ3ドットに1回の判定を入れることに。

ただ、今は敵弾200個強の時にギリギリで、その他の細かい処理が入ると
どうなるかわからんね。わからん。

感謝の気持ちたっぷりで
報告させてもらいました。ありがとう!
0345名前は開発中のものです。04/07/07 23:39ID:f8rNee75

いつか遊ばせてくれ
0346名前は開発中のものです。04/07/07 23:48ID:N42GpwnW
そいや、最近の弾幕シューて敵弾増えるとソフトでスローかけてるよね。
それやればもう少しごまかせるんじゃない?>>344
0347名前は開発中のものです。04/07/08 00:10ID:cqJ2IUqs
>>303
*@fで強引にやるやり方はバカにできね
caseよりはやくなった まじで
0348名前は開発中のものです。04/07/08 00:38ID:BqmycLWh
>>345
9月下旬までに完成したらこのスレに貼ろうと思うよ
10月になっても現れなかったら挫折したとみて間違いない(爆

>>346
奥の手として頭の片隅に入れておくw
多分自動でスローかかるからわざわざルーチン組む
必要はなさそうですが

>>303のやつ俺も参考にしたね
括弧使うとかなり遅くなるみたいだから、
初めて計算順序を意識してみたよw
0349名前は開発中のものです。04/07/08 00:49ID:xB5ofvzI
オリジナルで作ってコンテスト出せば?
0350名前は開発中のものです。04/07/08 01:00ID:U79Ccyfn
まぁ弾の進行方向真正面にわざわざぶつかっていくこと自体希なケースだし
仮に正面衝突しても、許容値9(自機4*4、敵弾6*6)に対して10の相対速度でぶつかっても
貫通確立は1/9
11の速度でぶつかれば2/10
12の速度なら3/11
13の速度なら4/12 (…計算あってるかな?)
自分ならちょっとくらいの貫通はめんどくさくて目をつぶりそうw

>349
そのほうが有意義かもね


・・

とか書いている間にスゲーーー良い方法を思いついた!!
貫通対策。
0351名前は開発中のものです。04/07/08 02:19ID:xB5ofvzI
>とか書いている間にスゲーーー良い方法を思いついた!!
>貫通対策。

それだけ書いて消えるな!
気になるだろ!w
0352名前は開発中のものです。04/07/08 02:45ID:U79Ccyfn
>351
すまそ w
本当に妥当な方法かどうかフォトショップでのグリッドで方眼紙作って検討してた。

◆漏れが今思いついた貫通対策◆(暫定版)

自機の当り判定に加えて「金魚の糞」式仮想当り判定部を加える。(グラディウスのオプションみたいな)
※ただし、自機停止時には金魚の糞は自機と同じ位置(つまり無し)
金魚の糞に喰らったら、当った弾の移動方向から妥当性を判定する。

例えば ↑から↓にまっすぐ飛んできた弾を自機を横に移動して避けて、金魚の糞に喰らった場合
判定は回避、
金魚の糞が弾の進行方向と同じ(この場合自機の↓にある=自機が↑に進んでる)場合はHit

自機が2*2の当り判定で敵弾最小が6*6なら自機の進行方向逆の後方5ドットに2*2の金魚の糞を配置する。
これで、敵弾に正面衝突しに行った時のみ貫通してしまうのなら貫通を防げる。

難点は自機の方向は8方向しかないこと。敵弾は360度の方向があるから厳密性には欠けるかも。


眠いから朝起きてもっかい妥当かどうか考えてみる w
0353名前は開発中のものです。04/07/08 03:33ID:xB5ofvzI
>>352
判定をもう一つ持たせるってことは判定回数が単純に倍になるんじゃ…。
0354名前は開発中のものです。04/07/08 04:18ID:U79Ccyfn
●…TL

飲み杉かもしれん。普通に1フレーム2回判定したほうがマシだな。
0355名前は開発中のものです。04/07/08 05:38ID:xB5ofvzI
やっぱり、すり抜ける可能性が高い弾(判定小&高速)だけ細かく判定して、
すり抜ける可能性の低いのは通常通りってのが良いんじゃないかなあと思った…。
0356名前は開発中のものです。04/07/08 16:11ID:4Im7pYkj
弾をすり抜けるのは紙一重でたまに避けるシステムですと
仕様にしてしまえばいい。
0357名前は開発中のものです。04/07/08 18:03ID:5941rvZk
いや、そりゃあマズいだろ!
0358名前は開発中のものです。04/07/08 19:37ID:LTYZ/id/
自機の動きと弾の動きを線分にして
それらが交わってるか調べるってのは?
0359名前は開発中のものです。04/07/08 20:53ID:IzDEooJQ
>>358
それは本気で言ってるのか・・・?
0360名前は開発中のものです。04/07/08 21:08ID:5941rvZk
バッファスクリーンに弾の大きさの分だけ描画して色判定は?
全部を描画すると重くなるから自機の周りだけ。
大して変わらないか、逆に重くなる可能性もあるが・・・
0361名前は開発中のものです。04/07/08 21:31ID:U79Ccyfn
そもそも1フレームで貫通するほどの速度は当り判定のすり抜け云々以前に
見た目が許容できないかもしれない。

個人的には
最速でも自身の見た目の大きさの ドット数/フレーム 以内までかなぁ
(自機が16*16なら 16ドット/フレーム 敵弾8*8なら 8ドット/フレーム)
欲を言えば自身の半分まで
(自機が16*16なら 8ドット/フレーム 敵弾8*8なら 4ドット/フレーム)

それより速いと残像拳みたいにみえる。
0362名前は開発中のものです。04/07/08 21:38ID:h44yiRt3
弾幕シューは基本的に弾のろいしな。
0363名前は開発中のものです。04/07/08 22:01ID:LTYZ/id/
>>359
漏れの頭じゃこれしか思いつかなかった。
0364名前は開発中のものです。04/07/08 22:27ID:U79Ccyfn
ビミョウに話し変わるけど、丸い当り判定を使ってるのは漏れだけかな?

丸いって言ってもキャラ間の距離を当り判定に使ってるだけだけど
結果的にはほぼ丸になる。
0365名前は開発中のものです。04/07/08 23:44ID:1VeToSQa
そうでもないでしょ。
でも、大抵、長方形か丸。
まあ、計算的に多角形とか複雑な形は重くなるしなぁ・・・
0366名前は開発中のものです。04/07/09 14:26ID:2obD+d6H
四角の判定ならなんかRECT構造体の重なってる部分かえしてくれるAPIあったんでそれつかってぴたら?
0367名前は開発中のものです。04/07/09 17:53ID:ePV6ulJz
インターセクトってやつか
0368名前は開発中のものです。04/07/09 18:57ID:QP1jsMXM
sinとか√とかそいゆう数学的な計算はどうやるんですか?
0369名前は開発中のものです。04/07/09 19:17ID:QlzJ/HhZ
そいゆうのはマユアリュに書いてあるヨ
0370名前は開発中のものです。04/07/09 19:38ID:QP1jsMXM
また質問なんですが
*main1
x=mousex : y=mousey
color 255,255,255:boxf 0,0,99,23
color 0,0,0:pos 0,0:mes "X="+x+"/Y="+y
getkey a,1
if a : goto *main2
await 5
goto *main1
*main2
end
こんな感じのソフトでHPSのウィンドウじゃない別のウィンドウとかでやりたい
のですがどうやったらいいんですか?
0371名前は開発中のものです。04/07/09 19:48ID:bufBX0Vb
どこを別のウィンドウでやりたいんだ
0372名前は開発中のものです。04/07/09 20:30ID:QP1jsMXM
だからこれはHSPのウィンドウからマウスが出たら計ってくれないじゃん?
それを他のウィンドウとかゲームとか操作とかしながら常に計ってくれるようna
0373名前は開発中のものです。04/07/09 20:39ID:bufBX0Vb
*main1
ginfo 0
x=prmx : y=prmy
color 255,255,255:boxf 0,0,99,23
color 0,0,0:pos 0,0:mes "X="+x+"/Y="+y
getkey a,1
if a : goto *main2
await 5
goto *main1
*main2
end

こういうことをいってんの?
0374名前は開発中のものです。04/07/09 21:00ID:QP1jsMXM
おしい!けど違う。それは他のウィンドウやファイル操作しようとしたら消えてしまう。
0375名前は開発中のものです。04/07/09 21:06ID:bufBX0Vb
もともとそういう仕様ちゃうんか。。。

onclick *click
*main1
ginfo 0
x=prmx : y=prmy
color 255,255,255:boxf 0,0,99,23
color 0,0,0:pos 0,0:mes "X="+x+"/Y="+y
await 5
goto *main1
*click
end
0376名前は開発中のものです。04/07/09 21:08ID:QlzJ/HhZ
レスもらっといて、おしい!じゃねーヨ。
おまいの説明不足だろ。
368の質問といいリア厨以下?
0377名前は開発中のものです。04/07/09 21:14ID:jpMqo0Gr
まあそうでしょうな
だが気にするな
0378名前は開発中のものです。04/07/09 21:17ID:d0zXeIj1
>>370

HSP以外のウィンドウで処理できるものを作りました。
これで完璧です

;--------------------
#include "llmod.as"
mes "対象のウィンドウをクリックしてください"
repeat:wait 1:stick a:if a&256:break
loop:ginfo:pm=prmx,prmy
dllproc "WindowFromPoint",pm,2,1:mes "hWnd:"+dllret
pm=dllret:dllproc "GetDC",pm,1,1:mes "hdc:"+dllret
hdc=dllret:mref bm,67:repeat
ginfo:x=prmx : y=prmy
color 255,255,255:boxf:color 0,0,0:pos 0,0:mes "X="+x+"/Y="+y
pm=hdc,0,0,100,18,bm.4,0,0,0xCC0020:dllproc "BitBlt",pm,9,5
wait 5:loop
;---------------------------
0379名前は開発中のものです。04/07/09 21:34ID:bZYm//1m
人の手を借りまくってコンテストに応募とか?
■ このスレッドは過去ログ倉庫に格納されています