[英]I have animated left and right character how could I animate my right and left standing without it blitting all at the same time?
所以我为我的角色设置了动画,如果我要右击这个,如果我要左击这个,但是当我不向右移动时,我怎么做呢?
我设法为我的右侧做到了,但我知道为什么我的左侧不工作VIDEO
def draw(self):
self.rect.topleft = (self.x,self.y)
if self.direction == "left":
self.clock.tick(self.fps)
player_image = self.lefts[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.lefts):
self.anim_index = 0
elif self.direction != "left":
player_image = self.standingleft[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.standingleft):
self.anim_index = 0
if self.direction == "right":
player_image = self.rights[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.rights):
self.anim_index = 0
elif self.direction == "standright":
player_image = self.standingright[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.standingright):
self.anim_index = 0
我的播放器 class
# player class
class player:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.color = color
self.height = height
self.width = width
self.speed = 5
self.isJump = False
self.JumpCount = 10
self.fall = 0
#hit box
self.hitbox = (self.x + 20, self.y, 28, 60)
self.stand = pygame.image.load("stands.png")
self.rights = [pygame.image.load("L1.png"),
pygame.image.load("L2.png"),
pygame.image.load("L3.png"),
pygame.image.load("L4.png"),
pygame.image.load("L5.png"),
pygame.image.load("L6.png"),
pygame.image.load("L7.png"),
pygame.image.load("L8.png"),
pygame.image.load("L9.png"),
pygame.image.load("L10.png"),
pygame.image.load("L11.png"),
pygame.image.load("L12.png"),
pygame.image.load("L13.png"),
pygame.image.load("L14.png"),
pygame.image.load("L15.png")]
self.fps = 50
self.clock = pygame.time.Clock()
self.lefts = [pygame.image.load("e1.png"),
pygame.image.load("e2.png"),
pygame.image.load("e3.png"),
pygame.image.load("e4.png"),
pygame.image.load("e5.png"),
pygame.image.load("e6.png"),
pygame.image.load("e7.png"),
pygame.image.load("e8.png"),
pygame.image.load("e9.png"),
pygame.image.load("e10.png"),
pygame.image.load("e11.png"),
pygame.image.load("e12.png"),
pygame.image.load("e13.png"),
pygame.image.load("e14.png"),
pygame.image.load("e15.png")]
self.standingright = [pygame.image.load("d1.png"),
pygame.image.load("d2.png"),
pygame.image.load("d3.png"),
pygame.image.load("d4.png"),
pygame.image.load("d5.png"),
pygame.image.load("d6.png"),
pygame.image.load("d7.png"),
pygame.image.load("d8.png"),
pygame.image.load("d9.png"),
pygame.image.load("d10.png"),
pygame.image.load("d11.png"),
pygame.image.load("d12.png"),
pygame.image.load("d13.png"),
pygame.image.load("d14.png"),
pygame.image.load("d15.png")]
self.standingleft =[pygame.image.load("s1.png"),
pygame.image.load("s2.png"),
pygame.image.load("s3.png"),
pygame.image.load("s4.png"),
pygame.image.load("s5.png"),
pygame.image.load("s6.png"),
pygame.image.load("s7.png"),
pygame.image.load("s8.png"),
pygame.image.load("s9.png"),
pygame.image.load("s10.png"),
pygame.image.load("s11.png"),
pygame.image.load("s12.png"),
pygame.image.load("s13.png"),
pygame.image.load("s14.png"),
pygame.image.load("s15.png")]
self.rights = [pygame.transform.scale(image,(image.get_width()//5,image.get_height()//5)) for image in self.rights]
self.lefts = [pygame.transform.scale(image,(image.get_width()//5,image.get_height()//5)) for image in self.lefts]
self.standingright = [pygame.transform.scale(image,(image.get_width()//5,image.get_height()//5)) for image in self.standingright]
self.standingleft = [pygame.transform.scale(image,(image.get_width()//5,image.get_height()//5)) for image in self.standingleft]
self.bo_index = 0
self.start_time = pygame.time.get_ticks()
self.anim_fps = 400
self.anim_index = 0
self.stans_index = 0
self.direction = "right"
self.direction = "left"
self.direction = "standright"
self.rect = pygame.rect = pygame.Rect(self.x,self.y,width, height)
def draw(self):
self.rect.topleft = (self.x,self.y)
if self.direction == "left":
self.clock.tick(self.fps)
player_image = self.lefts[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.lefts):
self.anim_index = 0
elif self.direction != "left":
player_image = self.standingleft[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.standingleft):
self.anim_index = 0
if self.direction == "right":
player_image = self.rights[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.rights):
self.anim_index = 0
elif self.direction == "standright":
player_image = self.standingright[self.anim_index]
self.anim_index += 1
if self.anim_index == len(self.standingright):
self.anim_index = 0
我建议实现一个if
- elif
- else
语句并简化代码:
def draw(self):
self.rect.topleft = (self.x,self.y)
if self.direction == "right":
image_list = self.rights
elif self.direction == "standright":
image_list = self.standingright
elif self.direction == "left":
image_list = self.lefts
else:
image_list = self.standingleft
if self.anim_index >= len(image_list):
self.anim_index = 0
player_image = image_list[self.anim_index]
self.anim_index += 1
无论如何,问题是设置playerman.direction
的代码。 注意"left"
方向已设置,但会立即被"standright"
覆盖:
keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: playerman.direction = "left" # [...] playerman.direction = "standright"
如果按下一个键,则设置playerman.direction
,如果没有按下任何键,则切换到"standright"
或"standleft"
:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
playerman.direction = "left"
# [...]
elif keys[pygame.K_RIGHT]:
playerman.direction = "right"
# [...]
else:
if playerman.direction == "left":
playerman.direction = "standleft"
else:
playerman.direction = "standright"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.