微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何让飞机/敌机上下飞

如何解决我如何让飞机/敌机上下飞

所以我一直在做这个游戏,我一直想做到这一点,所以当我的敌人/飞机类到达屏幕的顶部时,它开始下降,而在屏幕的底部也一样,但是上升了。我遇到了这个问题,因为我的飞机会掉下来但不会升起

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,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,color):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.color = color
        self.rect = pygame.Rect(x,height)
        self.ss1 = pygame.image.load("enemyplane1.png")
        self.ss1 = pygame.transform.scale(self.ss1,self.ss1.get_height()//9))
    def draw(self):
        self.rect.topleft = (self.x,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,height)
        self.ss1 = pygame.image.load("enemyplane2.png")
        self.ss1 = pygame.transform.scale(self.ss1,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,height)
        self.ss1 = pygame.image.load("enemyplane3.png")
        self.ss1 = pygame.transform.scale(self.ss1,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,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.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,white)

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

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

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


# Redrawwinodw
def redrawwindow():
    window.fill((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()
        

解决方法

使用变量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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。