平台游戏中的启动变量
问题描述:
我已经制作了一个平台游戏,其中有通电。其中一个通电是一个闪电,旨在提高你的速度。但是,当我告诉它增加速度时,它会增加速度,但是使我的播放器无需按下我的箭头键即可移动。任何帮助?我知道你看不到它,但是我已经包含了player.update等,但是我没有显示它,所以代码会被缩短。平台游戏中的启动变量
感谢
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 = 0,0
self.speed = 2
self.Jump = 10
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.deadimages = [self.hurt]
self.gravity = 0.35
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
def update(self, event = None):
self.calcgravity()
self.rect.x += self.hspeed
self.rect.y += self.vspeed
#Walking animation of animation when left or right key is pressed.
key = pygame.key.get_pressed()
if self.Timer >= 0:
if key[pygame.K_RIGHT]:
self.TimeNum+=1
if self.TimeNum == self.TimeTarget:
self.index +=1
if self.index >= len(self.images):
self.index = 0
self.image = self.images[self.index]
self.TimeNum = 0
if key[pygame.K_LEFT]:
self.TimeNum+=1
if self.TimeNum == self.TimeTarget:
self.index +=1
if self.index >= len(self.rotatedimages):
self.index = 0
self.image = self.rotatedimages[self.index]
self.TimeNum = 0
# if you go outside the boundaries of the game.
if player.rect.x < 0:
GameOver()
def move(self, hspeed, vspeed):
self.hspeed += hspeed
self.vspeed += vspeed
def Level1Coll(self,PowerUps):
PowerUpsCollision = pygame.sprite.spritecollide(self,PowerUps,True)
for speedboost in PowerUpsCollision:
self.speed = 3
def main()
GameExit = False
while GameExit==False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
player.move(-player.speed,0)
if event.key == pygame.K_RIGHT:
player.move(player.speed,0)
if event.key == pygame.K_UP:
player.move(0,-player.Jump)
JumpSound.play()
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
player.move(player.speed,0)
if event.key == pygame.K_RIGHT:
player.move(-player.speed,0)
if event.key == pygame.K_UP:
player.move(0,0)
答
您设置self.speed
等于3,这通常意味着精灵将在自己的移动与3的速度而不是创建一个新的变量:
extra_speed = 0
并适用于增加精灵速度:
self.rect.y += (self.vspeed + extra_speed)
现在当精灵没有加电,没有任何变化,因为速度没有增加。但是当精灵获得加电时,只需将extra_speed
更改为3,并在精灵完成加电后重置为0。为了解决即时运行的问题,在检查运行之前,使用另一个变量来确定何时运行和使用它。
running = False
#A few lines later into your update function
if running:
self.rect.x += self.hspeed
self.rect.y += (self.vspeed + extra_speed)
上面的代码表示如果running
为真,则适当地移动精灵。否则,请勿移动精灵。
这部分代码看起来不错 - 而'speed = 3'不会改变它 - 也许会显示其余的代码。 – furas
问题是因为在某一时刻你将2加到'hspeed/vspeed',然后减去3,所以它给出'hspeed = -1'或'vspeed = -1'而不是'hspeed = 0'或'vspeed = 0' - 如果你设置'extra_speed = 3',你必须(以某种方式)改变'hspeed'和'vspeed',如果你设置'speed = 3'' – furas