2017-01-08 11 views
0

私はここの壁との衝突に関する情報しか見ていませんが、プレーヤーを天井に頭部を「バンプ」させる問題があります。頭を打つ代わりに、速度を0に設定し、重力のために後退して加速すると、オブジェクトはその上のプラットフォームの上に吸い込まれます。なぜこれが動作しないのですが、どうすれば修正できますか?私はチュートリアルに従っていて、自分の順応に追いつき、コンテンツ制作者は実装するのが難しいと言っていました。斜めに衝突するとエラーが発生する可能性はありますか? (コンテンツ制作者による)パイゲームと天井との衝突?

先生ありがとう、先生は何日ものうちに何人かのゲームエンジンを経験していない人の前でプレゼンテーションをしたいと思っています。

def update(self): 
    # Game Loop - Update 
    self.all_sprites.update() 
    # check if player hits a platform 
    hits = pygame.sprite.spritecollide(self.player,self.platforms , False) 
    if self.player.vel.y > 0: 
     if hits: 
      self.player.pos.y = hits[0].rect.top 
      self.player.vel.y = 0 
    if self.player.vel.y < 0: 
     if hits: 
      self.player.rect.top = hits[0].rect.bottom 
      self.player.vel.y = 0 
+0

http://gamedev.stackexchange.com/いくつかの助けを持っているかもしれません – depperm

+2

だから、あなたは 'self.player.vel.y = 0 ':同じ条件で必要な場合にも、加速を追加することができますステートメントは、他の場所で変更されたその価値ですか?そうでなければ、if文も真ではないので、何も変わりません。 – numbermaniac

+0

私はベロシティやアクセラレーション、ムーブメントが動作するプレーヤークラスを持っています。私は物事のトップに着陸することができます(最初のステートメントが動作すれば)、私はちょうど矩形のヒットボックスの底に当たって停止することができません。問題は速度に関するものではなく、衝突が発生したときのプレイヤーの配置の方が重要です。まだそれを理解することはできません。 –

答えて

0

が代わりに0に速度を設定するには、境界条件のうち、「下向き」の動きを強制するには-1またはいくつかの他の負の値の速度を設定することをお勧めします。お使いの場合に

if hits: 
     self.player.pos.y = hits[0].rect.top 
     self.player.vel.y = -1 # example velocity 
     self.player.acc.y = 2 # example acceleration 
+0

ありがとうありがとうございます。唯一の問題は、プレイヤーが約2秒間天井に突き当たっていることです。私は、明らかに重力がプレイヤーを降下させるまで、プレイヤーがまだ上に押し込まれていると仮定します。どんな解決策ですか?選手の速度が実際に変化していないようですね?申し訳ありませんが、これは非常に新しいです –

+0

私はそれが加速の問題ではないと思って始めているが、プレーヤーは再び衝突していると思ってループにこだわっていると思っています。 EDIT:nevermind、私はヒット[0] .rect.bottom - 30にプレイヤーpos yを変更したので、衝突のエラーはありません。ありがとう! –

+0

さて、考え方は、あなたのコードのどこかであなたの境界条件から抜け出せなければならないということなので、 'pos [y]ヒット[0] .rect.bottom - 30'というあなたの提案はまさにそれです。私の答えが助けてくれることを願っています! – gom1