python - 如何让我的飞机/敌人班级上下飞行
问题描述
所以我一直在制作这个游戏,我一直想制作它,所以当我的敌人/飞机类到达我的屏幕顶部时,它开始下降,并且在我的屏幕底部也一样,但会上升。我遇到了这个问题,如果我的飞机会下降但不会上升
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()
解决方案
使用变量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
推荐阅读
- flutter - 如何在飞镖中转换地图的关键数据类型?例如来自地图
到地图 - c - 为什么我的 searchPuzzle 函数中的 printf() 语句不起作用?
- dialogflow-es - 如果 Intent 数量超过 200,我们是否应该为所有 Intent 设置单独的函数处理程序
- jquery - 无法使用 jQuery 打开新窗口
- python - LSTM 模型实现
- python - 用漂亮的汤刮 youtube 网站
- selenium - 我在 Capturescreensot 方法和自定义侦听器中收到“java.lang.NullPointerException”
- azure - 有没有办法使用 Graph API 获取管理员同意请求列表?
- javascript - 如何在javascript中将变量修剪并保存到字符串中的第一个空格
- python - 未检测到 Python 3.8 安装