首页 > 解决方案 > 如何让我的飞机/敌人班级上下飞行

问题描述

所以我一直在制作这个游戏,我一直想制作它,所以当我的敌人/飞机类到达我的屏幕顶部时,它开始下降,并且在我的屏幕底部也一样,但会上升。我遇到了这个问题,如果我的飞机会下降但不会上升

https://gyazo.com/8ae464daf8f2d0d4ab51486fba42ebbe

正如你从视频中看到的,敌机会下降,但当它击中我的底部屏幕时不会开始上升。

这是我尝试过的,但没有奏效。

if enemy1.y > 470:
        enemy1.y -= playerman.speed
    elif enemy1.y < 500:
        enemy1.y += playerman.speed

我的完整代码

import pygame
pygame.init()

# Build The Screen
window = pygame.display.set_mode((700,500))

# Name Screen
pygame.display.set_caption("Noobs first Game")


# Class Player
class player:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.speed = 5
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("heroplane1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft=(self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        player_rect = self.ss1.get_rect(center = self.rect.center)
        player_rect.centerx += -7
        player_rect.centery += -6
        window.blit(self.ss1,player_rect)

# Class Enemy
class enemy:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("enemyplane1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy_rect = self.ss1.get_rect(center = self.rect.center)
        enemy_rect.centerx += -2
        enemy_rect.centery += -6
        window.blit(self.ss1,enemy_rect)


# Class Enemy2
class enemy2:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("enemyplane2.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy2_rect = self.ss1.get_rect(center = self.rect.center)
        enemy2_rect.centerx += -4
        enemy2_rect.centery += -6
        window.blit(self.ss1,enemy2_rect)


# Class Enemy3
class enemy3:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("enemyplane3.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//9,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        enemy3_rect = self.ss1.get_rect(center = self.rect.center)
        enemy3_rect.centerx += -4
        enemy3_rect.centery += -6
        window.blit(self.ss1,enemy3_rect)


class bg:
    def __init__(self,x,y,width,height,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,y,width,height)
        self.ss1 = pygame.image.load("Skybg1.png")
        self.ss1 = pygame.transform.scale(self.ss1,(self.ss1.get_width()//1,self.ss1.get_height()//1))
    def draw(self):
        self.rect.topleft = (self.x,self.y)
        pygame.draw.rect(window,self.color,self.rect)

        bg_rect = self.ss1.get_rect(center = self.rect.center)
        bg_rect.centerx += -2
        bg_rect.centery += -1
        window.blit(self.ss1,bg_rect)

        
# Color
white = (255,255,255)

# Draw Player
playerman = player(5,250,90,40,white)

# For Enemy
enemy1 = enemy(400,100,90,40,white)

# For Enemy2
enemyp1 = enemy2(400,300,90,40,white)

# For Enemy3
ememyq1 = enemy3(400,400,90,40,white)

# For bg
bg1 = bg(100,0,500,500,white)


# Redrawwinodw
def redrawwindow():
    window.fill((0,0,0))

    # Draw bg
    bg1.draw()
    
    # Draw playerman
    playerman.draw()

    # Draw enemy
    enemy1.draw()

    # Draw enemy2
    enemyp1.draw()

    # Draw enemy3
    ememyq1.draw()


# FPS Cnd Clock
fps = (30)
clock = pygame.time.Clock()


# Main Loop
run = True
while run:
    clock.tick(fps)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    bg1.x -= playerman.speed


    # enemy1 plane go brr
    if enemy1.y > 470:
        enemy1.y -= playerman.speed
    elif enemy1.y < 500:
        enemy1.y += playerman.speed



            

    # Keys For Playerman
    keys = pygame.key.get_pressed()

    if keys[pygame.K_a] and playerman.x > playerman.speed:
        playerman.x -= playerman.speed
        

    if keys[pygame.K_d] and playerman.x < 260 - playerman.width - playerman.speed:
        playerman.x += playerman.speed

    if keys[pygame.K_w] and playerman.y > playerman.speed:
        playerman.y -= playerman.speed

    if keys[pygame.K_s] and playerman.y < 500 - playerman.height - playerman.speed:
        playerman.y += playerman.speed
        
# Update And Other Sutff    
    redrawwindow()
    pygame.display.update()
pygame.quit()
        

标签: pythonpygame

解决方案


使用变量enemy.direction = "top" / "bottom"来控制方向。

然后检查

if enemy.direction == "bottom" and enemy.y > 470: 
    enemy.direction = "top" 
    enemy.speed = -enemy.speed 

if enemy.direction == "top" and enemy.y < 0: 
    enemy.direction = "bottom" 
    enemy.speed = -enemy.speed 

enemy.y += enemy.speed

最终你可以使用speed这个

if enemy.speed > 0 and enemy.y > 470: 
    enemy.speed = -enemy.speed 

if enemy.speed < 0 and enemy.y < 0: 
    enemy.speed = -enemy.speed 

enemy.y += enemy.speed

你应该在课堂上的功能中做到这一点

def update(self):

    if self.speed > 0 and self.y > 470: 
        self.speed = -self.speed 

    if self.speed < 0 and self.y < 0: 
        self.speed = -self.speed 

    self.y += self.speed

推荐阅读