2017-01-08 12 views
0

Я только видел информацию о столкновениях со стенами здесь, но у меня возникла проблема, заключающаяся в том, что игрок «ударился» головой о потолок. Вместо того, чтобы ударить головой, скорость устанавливается равной 0 и она ускоряется назад из-за силы тяжести, объект становится втянутым вверх по платформе над ней. Почему это не работает и как я могу это исправить? Я следую учебнику и заканчиваю свою собственную адаптацию, и создатель контента сказал, что его будет сложно реализовать. Очевидно, также может возникнуть ошибка, если вы столкнетесь по диагонали? (в соответствии с создателем контента)столкновение с пигмеем с потолком?

Большое вам спасибо, учитель хочет, чтобы я создал что-то, чтобы представить infront людей всего за пару дней без опыта работы с каким-либо игровым движком.

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

У меня есть класс игрока, который имеет такие вещи, как скорость и ускорение, движение работает, и я могу приземлиться на вершину вещей (сначала, если оператор работает), я просто не могу заставить его ударить по нижней части прямоугольника hitbox и остановиться. Речь идет не о скорости, но тем более о размещении игрока после столкновения. Все еще не могу понять. –

ответ

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 секунд, я полагаю, что игрок все еще толкается вверх, пока, очевидно, гравитация не приведет к смещению игрока назад. Любые решения? Похоже, что скорость игроков на самом деле не меняется? sorry im very new to this –

+0

Я начинаю думать, что это не проблема с ускорением, но игрок думает, что он снова сталкивается и застревает в цикле. EDIT: nevermind, я сменил плеер pos y на хиты [0] .rect.bottom - 30, поэтому ошибок при столкновении, спасибо! –

+0

Да, идея состоит в том, что вы должны выйти из своего граничного условия где-то в своем коде, поэтому ваше предложение «player pos y to hits [0] .rect.bottom - 30» делает именно это. Надеюсь, мой ответ помог, хотя! – gom1

 Смежные вопросы

  • Нет связанных вопросов^_^