我的问题是在我的球员身上,我说了一个方向陈述,如果我向右走,然后向右飞,如果我向左飞,然后向左飞,但是 当我没有点击任何我的玩家没有站着的东西时,它会一直向左或向右点击,我不知道为什么这里有一个video
def draw(self):
self.rect.topleft = (self.x,self.y)
if self.direction == "left":
window.blit(self.painfuls[self.anim_index],self.rect)
self.anim_index += 1
if self.anim_index == len(self.painfuls):
self.anim_index = 0
elif self.direction == "right":
window.blit(self.painful[self.anim_index],self.rect)
self.anim_index += 1
if self.anim_index == len(self.painful):
self.anim_index = 0
else:
window.blit(self.standing[self.anim_index],self.rect)
self.anim_index += 1
if self.anim_index == len(self.standing):
self.anim_index = 0
# import pygame
import pygame
pygame.init()
# window
window = pygame.display.set_mode((1000,500))
pygame.display.set_caption("GHames")
painfuls = [
pygame.image.load("Sprite-0020.png"),
pygame.image.load("Sprite-0021.png"),
pygame.image.load("Sprite-0022.png"),
pygame.image.load("Sprite-0023.png"),
pygame.image.load("Sprite-0024.png"),
pygame.image.load("Sprite-0025.png"),
pygame.image.load("Sprite-0026.png")
]
standing = [
pygame.image.load("Sprite-0056.png"),
pygame.image.load("Sprite-0057.png"),
pygame.image.load("Sprite-0058.png"),
pygame.image.load("Sprite-0059.png")
]
standing = [
pygame.image.load("Sprite-0009.png"),
pygame.image.load("Sprite-0010.png"),
pygame.image.load("Sprite-0011.png"),
pygame.image.load("Sprite-0012.png"),
pygame.image.load("Sprite-0013.png")
]
coins = pygame.image.load("Coin.png")
bg = pygame.image.load("bgrs1.png")
# player class
class player:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.isJump = False
self.JumpCount = 10
self.speed = 5
self.fall = 0
self.rect = pygame.Rect(x,y,height,width)
self.anim_index = 0
self.painful = [
pygame.image.load("Sprite-0009.png"),
pygame.image.load("Sprite-0010.png"),
pygame.image.load("Sprite-0011.png"),
pygame.image.load("Sprite-0012.png"),
pygame.image.load("Sprite-0013.png")
]
self.painfuls = [
pygame.image.load("Sprite-0020.png"),
pygame.image.load("Sprite-0021.png"),
pygame.image.load("Sprite-0022.png"),
pygame.image.load("Sprite-0023.png"),
pygame.image.load("Sprite-0024.png"),
pygame.image.load("Sprite-0025.png"),
pygame.image.load("Sprite-0026.png")
]
self.standing = [
pygame.image.load("Sprite-0056.png"),
pygame.image.load("Sprite-0057.png"),
pygame.image.load("Sprite-0058.png"),
pygame.image.load("Sprite-0059.png")
]
self.direction = "left"
def draw(self):
self.rect.topleft = (self.x,self.y)
if self.direction == "left":
window.blit(self.painfuls[self.anim_index],self.rect)
self.anim_index += 1
if self.anim_index == len(self.painfuls):
self.anim_index = 0
elif self.direction == "right":
window.blit(self.painful[self.anim_index],self.rect)
self.anim_index += 1
if self.anim_index == len(self.painful):
self.anim_index = 0
else:
window.blit(self.standing[self.anim_index],self.rect)
self.anim_index += 1
if self.anim_index == len(self.standing):
self.anim_index = 0
class enemy:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color, self.rect)
class coin:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
self.coins = pygame.image.load("Coin.png")
self.rect = pygame.Rect(x,y,coins.get_width(),coins.get_height())
self.coins = pygame.transform.scale(self.coins,(self.coins.get_width()//2,self.coins.get_height()//2))
def draw(self):
self.rect.topleft = (self.x,self.y)
window.blit(self.coins,self.rect)
class floor:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window, self.color, self.rect)
class enemyplayer:
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
selfwidth = width
self.color = color
self.rect = pygame.Rect(x,y,height,width)
def draw(self):
self.rect.topleft = (self.x,self.y)
pygame.draw.rect(window,self.color,self.rect)
# score for coins
font = pygame.font.Font("freesansbold.ttf", 32)
score = 0
text = font.render("score = " + str(score), True, (255,255,0))
textRect = text.get_rect()
textRect.center = (100,40)
# color
yellow = (255,255,0)
white = (255,255,255)
Green = (0,255,0)
# FPS
FPS = 60
clock = pygame.time.Clock()
# defiine player class
enemyplayer1 = enemyplayer(280,390,40,40, Green)
enemos = [enemyplayer1]
playerman = player(50,390,30,30, Green)
enemy1 = enemy(150,390,150,10, white)
enemy2 = enemy(300,310,150,10, white)
enemy3 = enemy(50,260,150,10, white)
enemies = [enemy1,enemy2,enemy3]
# define floor class
floor1 = floor(-1000,510,1500,50, white)
flories = [floor1]
# coin class
coin1 = coin(180,370,20,20, yellow)
coin2 = coin(250,370,20,20, yellow)
coin3 = coin(360,290,20,20, yellow)
coin4 = coin(140,240,20,20, yellow)
Coins_list = [coin1,coin2,coin3,coin4]
# main loop
bullets = []
runninggame = True
while runninggame:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
runninggame = False
if playerman.y < 150:
playerman.y += 1
for enemy in enemies:
enemy.y += playerman.speed
for coin in Coins_list:
coin.y += playerman.speed
for floor in flories:
floor.y += playerman.speed
for enemyplayer in enemos:
enemyplayer.y += playerman.speed
if playerman.y > 450:
playerman.y -= playerman.fall
for enemy in enemies:
enemy.y -= playerman.fall
for coin in Coins_list:
coin.y -= playerman.fall
for floor in flories:
floor.y -= playerman.fall
for enemyplayer in enemos:
enemyplayer.y -= playerman.fall
if enemyplayer1.x > 150:
enemyplayer1.x -= playerman.speed
else:
enemyplayer1.x < 250
enemyplayer1.x += playerman.speed
if playerman.rect.colliderect(enemyplayer1.rect):
playerman.x = 50
playerman.y = 390
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
playerman.direction = "left"
playerman.x -= playerman.speed
if playerman.x < 100:
playerman.x += playerman.speed
for enemy in enemies:
enemy.x += playerman.speed
for coin in Coins_list:
coin.x += playerman.speed
if keys[pygame.K_RIGHT]:
playerman.direction = "right"
playerman.x += playerman.speed
if playerman.x > 400:
playerman.x -= playerman.speed
for enemy in enemies:
enemy.x -= playerman.speed
for coin in Coins_list:
coin.x -= playerman.speed
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
collide = False
for enemy in enemies:
if playerman.rect.colliderect(enemy.rect):
collide = True
playerman.y = enemy.rect.top - playerman.height + 1
if playerman.rect.right > enemy.rect.left and playerman.rect.left < enemy.rect.left - playerman.width:
playerman.x = enemy.rect.left - playerman.width
if playerman.rect.left < enemy.rect.right and playerman.rect.right > enemy.rect.right + playerman.width:
playerman.x = enemy.rect.right
if playerman.rect.colliderect(enemyplayer1.rect):
collide = True
playerman.y = enemyplayer1.rect.top - playerman.height + 1
if playerman.rect.right > enemyplayer1.rect.left and playerman.rect.left < enemyplayer1.rect.left - playerman.width:
playerman.x = enemyplayer1.rect.left - playerman.width
if playerman.rect.left < enemyplayer1.rect.right and playerman.rect.right > enemyplayer1.rect.right + playerman.width:
playerman.x = enemyplayer1.rect.right
for one in range(len(Coins_list)-1,-1,-1):
if playerman.rect.colliderect(Coins_list[one].rect):
del Coins_list[one]
score += 1
text = font.render("score = " + str(score), True, (255,255,0))
textRect = text.get_rect()
textRect.center = (100,40)
if playerman.rect.colliderect(floor1.rect):
collide = True
playerman.isJump = False
playerman.y = floor1.rect.top - playerman.height + 1
if playerman.rect.right > floor1.rect.left and playerman.rect.left < floor1.rect.left - playerman.width:
playerman.x = floor1.rect.left - playerman.width
if playerman.rect.left < floor1.rect.right and playerman.rect.right > floor1.rect.right + playerman.width:
playerman.x = floor1.rect.right
if playerman.rect.bottom >= 500:
collide = True
playerman.isJump = False
playerman.JumpCount = 10
playerman.y = 500- playerman.height
if collide:
if keys[pygame.K_SPACE]:
playerman.isJump = True
playerman.fall = 0
else:
if playerman.JumpCount > 0:
playerman.y -= (playerman.JumpCount * abs(playerman.JumpCount))*0.5
playerman.JumpCount -= 1
else:
playerman.isJump = False
playerman.JumpCount = 10
window.fill((130,0,0))
for enemyplayer in enemos:
enemyplayer.draw()
for floor in flories:
floor.draw()
playerman.draw()
window.blit(text,textRect)
for coin in Coins_list:
coin.draw()
for enemy in enemies:
enemy.draw()
pygame.display.update()
pygame.quit()
将每个对象更改为图像很容易,您可以使用
pygame.image.load(filename)
加载图像,然后将其显示在屏幕上在player类中,加载图像并更改
然后,要将它们放到屏幕上,请单击它们
然后当你改变方向时
对于其他类,您不需要
self.direction
,它们只有一个方向,所以只需blit一个图像如您所见,我使用了图像宽度和高度,而不是作为
self.rect
的参数传递的w
和h
,因此您可以去掉这些,您还必须确保图像的大小正确您可以使用
pygame.transform.scale(image,size)
将图像大小调整到正确的大小例如
self.left_image = pygame.transform.scale(self.left_image,(100,100))
。这会将图像更改为100x100,但可能会因此而失真这会将图像缩放到一半大小,保持纵横比
对于动画,我发现最好使用一个列表,然后获得每个精灵,幸运的是,您已经很好地命名了它们,您可以这样做
str(i).zfill(4)
使其前面有3个零然后通过动画有一个计数器
循环是这样的,你不需要为每个图像都有一个
pygame.image.load()
,你只需要一个或者只是没有循环
然后确保
self.rect.topleft =
位于if语句之外,因为您希望它在每一帧发生,而不仅仅是在动画结束时发生相关问题 更多 >
编程相关推荐