【发布时间】:2021-08-03 16:02:46
【问题描述】:
我正在编写一个 pygame 射击游戏,您必须使用空间站射击从屏幕顶部飞到底部的敌人。但是,我注意到 enemy(enemy.pos_y) 和 bullet(bullet.pos_y) 的 Y 位置正是它们产生的位置, 但即使敌人在游戏窗口中移动(因为 Enemy 类中的 move() 函数)和子弹移动(也因为 move() 函数但在 @987654328 @class)这很明显,因为 Y 值是恒定的(enemy.pos_y=-30 和 bullet.pos_y=STATION_HEIGHT - 5。那么有什么解决方案可以使这些位置的值发生变化(我是说 值,因为在屏幕上敌人和子弹的位置发生了变化)并且仍然在那些给定的位置产生它们?这个问题阻止了我进一步的步骤,因为例如使敌人和子弹发生碰撞是不可能的,因为就像他们从不移动,所以他们永远不会相遇。那么如何检测这些物体的位置值的变化呢?
在这张图片中你可以看到敌人的位置值保持不变:enter image description here
敌人的等级:
import pygame
import math
class Enemy:
def __init__(
self, pos_x: float, pos_y: float, texture: pygame.Surface, speed: float
):
self.pos_x = pos_x
self.pos_y = pos_y
self.texture = texture
self.speed = speed
def move(self):
self.pos_y += self.speed
子弹类:
import pygame
class Bullet:
def __init__(
self, pos_x: float, pos_y: float, texture: pygame.Surface, speed: float
):
self.pos_x = pos_x
self.pos_y = pos_y
self.texture = texture
self.speed = speed
def move(self):
self.pos_y -= self.speed
这里我展示了敌人和子弹(在主循环中):
running = True
while running:
all_event = pygame.event.get()
for event in all_event:
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
shot_sound.play()
# Bullets
bullet = Bullet(
bulletX + station.pos_x,
STATION_HEIGHT + 10,
bullet_texture,
BULLET_SPEED,
)
bullets.append(bullet)
print(f'position X={bullet.pos_x}')
# Enemies move
for enemy in enemies:
for i in range(3):
enemy.move()
for i in range(3):
enemy = Enemy(random.randrange(67, 520), -30, enemy_texture, ENEMY_SPEED)
start_time+=1
if start_time > 200:
enemies.append(enemy)
start_time = 0
你可以在我的 Github 上找到完整的代码:enter link description here
ps。如果这个问题和问题的解释写得不好,我很抱歉,但这是我在 stackoverflow 上的第一个问题,所以我没有真正的经验,如果有什么不明白的,我正在等待问题。
【问题讨论】:
-
" 我注意到enemy(enemy.pos_y) 和bullet(bullet.pos_y) 的Y 位置正是它们产生的位置" 不,这是不可能的。物体要么不动,要么位置随着运动而变化。为什么你认为位置没有改变?