python - Really struggling with jumping -
i've tried try , make sprite jump i've decided start scratch , try , find way again. way guys can help. collision detection depends on vspeed dont think can set vspeed 0 when hit platform. i've been stuck on ages. right character moves , down. simple jump need. appreciated!
class player(pygame.sprite.sprite): def __init__(self,x,y,width = 65, height = 35): pygame.sprite.sprite.__init__(self) self.x = x self.y = y self.hspeed,self.vspeed = 2,4 self.images=[] r0 = pygame.image.load("images\player\i1.png") r1 = pygame.image.load("images\player\i2.png") r2 = pygame.image.load("images\player\i3.png") r3 = pygame.image.load("images\player\i4.png") self.hurt = pygame.image.load("images\player\hurt.png") self.images.append(r0) self.images.append(r1) self.images.append(r2) self.images.append(r3) self.rotatedimages = [] rr0 = pygame.transform.flip(r0 ,true, false) rr1 = pygame.transform.flip(r1 ,true, false) rr2 = pygame.transform.flip(r2 ,true, false) rr3 = pygame.transform.flip(r3 ,true, false) self.rotatedimages.append(rr0) self.rotatedimages.append(rr1) self.rotatedimages.append(rr2) self.rotatedimages.append(rr3) self.gravity = 0.5 self.index = 0 self.image = self.images[self.index] self.rect = pygame.rect(self.x,self.y,width,height) self.timenum=0 self.timetarget=10 self.timer = 0 self.collision = false def level1platcoll(self, blocklistgrass, traplist, enemygroup, powerups): platformcollision = pygame.sprite.spritecollide(self, blocklistgrass, false ) each_object in platformcollision: self.collision = true if self.collision == true: self.onground = true if self.vspeed > 0: self.rect.bottom = each_object.rect.top if self.vspeed <0: self.rect.top = each_object.rect.bottom def move(self): key = pygame.key.get_pressed() if key[pygame.k_left]: self.rect.move_ip(-self.hspeed,0) if key[pygame.k_right]: self.rect.move_ip(self.hspeed,0) if key[pygame.k_up]: self.rect.y -= self.vspeed if key[pygame.k_down]: self.rect.y += self.vspeed
when press
k_upsetvchange = vspeed(andself.onground = false)in every frame/loop use
y -= vchangejumpin every frame/loop use
vchange -= gravityslow down jump.
first move player up, gravity slow down player , make player moving down.
(when "press" mean single moment when key change state pygame.keyup pygame.keydown - not when keep pressed - have use for event in pygame.event.get() instead of pygame.key.get_pressed() or check onground k_up )
Comments
Post a Comment