お詫びと訂正

「敵弾の出現」処理にバグがありました。お詫びして訂正します。
 敵が弾を連射する時に、弾が変な位置に出てしまうことがあるというものです。
 敵のy座標が0未満の場合は弾を出さないようにしているのですが、例えば5発連射する時に、最初の2発はy座標が0未満だったので出さなかったが、3発目の時に0以上になったので出した、という時に起こります。
 1発目の座標(fstx,fsty)が設定されていないのでそうなります。

(誤)

	; 敵弾の出現
	repeat 10
		k=enekind.cnt
		l=32*(eneclass.k+1)
		if ((enemyf.cnt=1)|(enemyf.cnt=2))&(enemyx.cnt>=0)
			&(enemyx.cnt<=(xsize-l))&(enemyy.cnt>=0)
			&(enemyy.cnt<=(ysize-l)) {
			n=cnt
			f=0
			i=0
			s=bfrtime.k
			if enemycnt.n<s { continue }
			repeat
				p=shotpat.k.i
				repeat nbatshot.p
					if enemycnt.n=s {
						f=1
						j=cnt
						break
					}
					if enemycnt.n<s {
						f=2
						break
					}
					if cnt!(nbatshot.p-1) { s=s+btwtime.p }
				loop
				if f!0 { break }
				s=s+afttime.p
				i=i+1
				if shotpat.k.i=-1 { i=0 }
				if shotpat.k.i=-2 { break }
			loop
			if f!1 { continue }
			if j=0 {
				fstx.n=enemyx.n+((l-8)/2)
				fsty.n=enemyy.n+((l-8)/2)
				if batdir.p=0 {
					fstangle.n=64
				}
				else {
					ematan r,playerx+12-fstx.n,playery+12-fsty.n
					fstangle.n=(192-r)&255
				}
			}
			m=0
			repeat 100
				if (eshotf.cnt=0)&(m<nbat.p) {
					eshotf.cnt=1
					eshotx.cnt=fstx.n
					eshoty.cnt=fsty.n
					smeshotx.cnt=eshotx.cnt<<8
					smeshoty.cnt=eshoty.cnt<<8
					r=(fstangle.n+batangle.p.m+(dbatangle.p*j))&255
					smeshotdx.cnt=shotspeed.p*vcos.r
					smeshotdy.cnt=shotspeed.p*vsin.r
					m=m+1
				}
				if m=nbat.p { break }
			loop
		}
	loop

(正)

	; 敵弾の出現
	repeat 10
		k=enekind.cnt
		l=32*(eneclass.k+1)
		if (enemyf.cnt=1)|(enemyf.cnt=2) {
			n=cnt
			f=0
			i=0
			s=bfrtime.k
			if enemycnt.n<s { continue }
			repeat
				p=shotpat.k.i
				repeat nbatshot.p
					if enemycnt.n=s {
						f=1
						j=cnt
						break
					}
					if enemycnt.n<s {
						f=2
						break
					}
					if cnt!(nbatshot.p-1) { s=s+btwtime.p }
				loop
				if f!0 { break }
				s=s+afttime.p
				i=i+1
				if shotpat.k.i=-1 { i=0 }
				if shotpat.k.i=-2 { break }
			loop
			if f!1 { continue }
			if j=0 {
				fstx.n=enemyx.n+((l-8)/2)
				fsty.n=enemyy.n+((l-8)/2)
				if batdir.p=0 {
					fstangle.n=64
				}
				else {
					ematan r,playerx+12-fstx.n,playery+12-fsty.n
					fstangle.n=(192-r)&255
				}
			}
			if (enemyx.n>=0)&(enemyx.n<=(xsize-l))&(enemyy.n>=0)
				&(enemyy.n<=(ysize-l))&(fsty.n>=0) {
				m=0
				repeat 100
					if (eshotf.cnt=0)&(m<nbat.p) {
						eshotf.cnt=1
						eshotx.cnt=fstx.n
						eshoty.cnt=fsty.n
						smeshotx.cnt=eshotx.cnt<<8
						smeshoty.cnt=eshoty.cnt<<8
						r=(fstangle.n+batangle.p.m
							+(dbatangle.p*j))&255
						smeshotdx.cnt=shotspeed.p*vcos.r
						smeshotdy.cnt=shotspeed.p*vsin.r
						m=m+1
					}
					if m=nbat.p { break }
				loop
			}
		}
	loop


[修正版をダウンロード]

[目次へ][前へ] inserted by FC2 system