キャラクタ(その(x、y)の位置がbodycに格納されています)と複数のプラットフォームがあります。これらのプラットフォームは変数 "plist"で表され、ファッション[[x、y]、pygame.Surfaceインスタンス]に格納されます。キャラクターは速度でジャンプする。(Python)Platformer - 文字がスキップされる/間違って配置される
これは私の現在のアルゴリズムである:
def onplatform(self):
for i in plist:
if intersect(i[0]+list(i[1].get_size()), [bodyc[0], bodyc[1], 50, 50]):
return True, plist.index(i)
return False, len(plist)
onplat=self.onplatform()
if yvelocity!=-13:
bodyc[1]-=yvelocity
if yvelocity>-12: yvelocity-=1
if yvelocity==-13 and not onplat[0]: yvelocity=-1
if onplat[0] and -13<yvelocity<-1:
yvelocity=-13
bodyc[1]=plist[onplat[1]][0][1]-50 #(y-value of platform)-50
if pressed[pygame.K_UP] and yvelocity==-13:
yvelocity=13
このアルゴリズムの問題点は、キャラクターが下のプラットフォーム上にない場合でも、プラットフォームに触れたとき、コードが上に文字を入れるということですとにかくプラットフォーム。
ヒットボックスが非常に小さい(1ピクセルまたは3ピクセル高い)ようにしようとしましたが、速度がプラットフォーム上でキャラクタをスキップするため、キャラクタはプラットフォームに全く触れません。 5または7ピクセルのように大きく設定すると、上記と同じ問題が発生します。
これを簡単に修正する方法はありますか?