これまでのところ、私は平らなプラットフォームと私のキャラクターを上に置いて始めました.
重力とジャンプ機能を実装しました。
したがって、重力の概念は次のように機能し、プレイヤーが下のオブジェクトと衝突するまで下に落下し続けます。
したがって、これは、ヒーローの下に平らなプラットフォームがある場合に機能しますが、屋根を実装したい場合に機能します。だから私のプレーヤーの上と下に平らなプラットフォーム。
私の重力関数はただ落ち続けています。私の地形はすべてpygame.Rectのリストにあります。
私の重力関数はすべての地形を反復し、プレイヤーが床オブジェクトの上にあるかどうかを確認し、そうであれば落下し続けます。
私が気付いた問題は、キャラクターの上にオブジェクトがあるため、落下し続けることです。キャラクターの上にあるタイルを無視して、プレイヤーの下にあるタイルだけに注目し、共謀をチェックする方法がわかりません。
この共謀の問題を理解したら、ジャンプして屋根との衝突を確認し、左右に移動するときにそれを理解できると確信しています。
助けていただければ幸いです。
編集: 地形は私のオブジェクト タイルのリストです。現在、地形には 2 つのオブジェクトしかありません
#this is not correct way initialize just displaying my 2 object's rect
terrain = [<rect(400, 355, 50, 49)>,<rect(500, 198, 50, 49)>]
def GRAVITY(self, terrain):
'''----------break is cutting of parsing the rest of the terrain.
----------Need to search through each terrain. Keep falling until collide with an object under the hero ONLY.
'''
for i in range(len(terrain)):
print i
#stop falling when colliding with object
if terrain[i].top > self.rect.bottom:
print 'above tile while falling'
self.y += JUMPRATE
break
#continue falling if not standing on the object. Also catch when walking of an object then fall.
elif terrain[i].top <= self.rect.bottom and not self.rect.colliderect(terrain[i]):
print 'whoops missed tile'
self.y +=JUMPRATE
break
else:
print 'on tile'
self.y = self.y
break
プレイヤーがジャンプしたときに呼び出される関数です。