2016-05-09 2 views
0

привет, используя этот код, чтобы заставить игрока справиться с положением мыши (влево/вправо), но когда мышь останавливается в определенном месте, игрок идет за ним, а затем начинает вибрировать слева направо. . Я думаю, проблема в себе .vel_x функции обновления.как я могу заставить моего игрока остановить вибрацию слева направо?

class Player(pygame.sprite.Sprite): 
#init Player Sprite 

#sprite player 
def __init__(self): 

    pygame.sprite.Sprite.__init__(self) 

    self.image=pygame.image.load(os.path.join(image_folder,"Player.png")) 
    self.rect = self.image.get_rect() 
    self.vel_x = 0 
    self.speed = 30 
    self.friction = 3.5 
    self.rect.center = (420,360) 
    self.delta = clock.tick(FPS)/1000.00 

def update(self): 


    self.getX = pygame.mouse.get_pos()[0]-100 # get the X position of mouse 
    self.rect.x +=self.vel_x 
    ##i think the problem is in here 
    self.vel_x = self.vel_x*(1-min(self.delta*self.friction,1)) 


    #print "the GetX is ", self.getX 
    #print "the Rect.x is ", self.rect.x 
    if self.getX > self.rect.x: 
     self.vel_x+= self.speed*self.delta 
    else: 
     self.vel_x-= self.speed*self.delta 

ответ

1

Проблема заключается в вашем размере шага скорости. self.speed*self.delta больше, чем 1 пиксель, это пространство, которое потребляет курсор мыши. Попробуйте проверить расстояние между вашим игроком и курсором. Если это расстояние меньше определенного разрешения, не обновляйте положение спрайта.

resolution = 5 # pixels 
if abs(self.getX - self.rect.x) > resolution: 
    if self.getX > self.rect.x: 
     self.vel_x+= self.speed*self.delta 
    else: 
     self.vel_x-= self.speed*self.delta 

else: 
    self.vel_x = 0 
+0

ummm, u получил его, благодаря его работе :) – karim

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