【问题标题】:Enemies' and bullets' positions' value does not change - pygame敌人和子弹位置的值不会改变 - pygame
【发布时间】: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 位置正是它们产生的位置" 不,这是不可能的。物体要么不动,要么位置随着运动而变化。为什么你认为位置没有改变?

标签: python pygame


【解决方案1】:

你实际上只是打印一个新创建的子弹的位置。如果要查看移动子弹的位置,需要在移动子弹的循环中移动 print 语句:

while running:
    # [...]

    for enemy in enemies:
        enemy.move()
        print(f'enemy position Y={enemy.pos_y}')

    # [...]

    for bullet in bullets:
        bullet.move()
        print(f'bullet position Y={bullet.pos_y}')

    # [...]

while running:
    # [...]

    for i, enemy in enumerate(enemies):
        enemy.move()
        print(f'position of enemy {i} Y={enemy.pos_y}')

    # [...]

    for i, bullet in enumerate(bullets):
        bullet.move()
        print(f'position of bullet {i} Y={bullet.pos_y}')

    # [...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多