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

pygame 中子弹的 x 位置

如何解决pygame 中子弹的 x 位置

代码

import pygame
import sys
from pygame.locals import *

count = 0
moving = False

def blast1():
    blast.y -= bl

def player_animation():
    global player_speed
    player.x = player_speed

pygame.init()
running = True

clock = pygame.time.Clock()

bl = 1
player_speed = 1

player = pygame.Rect(250,450,50,50)
blast = pygame.Rect(player.x,player.y,10,10)

screen = pygame.display.set_mode((500,500))
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    player_animation()
    blast1()

    screen.fill((255,255,255)) #color
    pygame.draw.ellipse(screen,[0,255],player)
    pygame.draw.ellipse(screen,0],blast)
       
    keys=pygame.key.get_pressed()
    if keys[K_LEFT] and player.x !=  -4 :
        player_speed -= 5

    if keys[K_RIGHT] and player.x !=  451:
        player_speed += 5
    pygame.display.flip()
    
    clock.tick(30)
blast.x = player.x
pygame.quit()

我的目标很简单。我想创建一个可以左右移动的球。然后我想创建一个从“玩家”的位置发射的子弹。我在这方面遇到了一些麻烦,我不知道为什么,但是当我声明子弹 blast = pygame.Rect(player.x,10) 的位置时,只有 y 位置有效。 x 位置不知何故位于屏幕中间而不是播放器上。我该如何解决这个问题?

解决方法

线

blast = pygame.Rect(player.x,player.y,10,10)

Rect分配给blast,带有玩家此时的位置。在您编辑其位置之前,此爆炸将保持静止。您只需在此处更改 y 位置:

blast.y -= bl

但是您在发射子弹时不会更新 x 位置。你可以这样做:

def launch_blast(): # call this function when you create the bullet.
                    # At this point in the program,just call it at the beginning.
    blast.x = player.x + player.width / 2 - blast.width / 2

def blast1():
    blast.y -= bl

要发射多个子弹,您可以使用以下代码:

import pygame
from pygame.locals import *
pygame.init()

class Bullet:
    def __init__(self):
        self.rect = Rect(player.rect.x - 5 + player.rect.width / 2,player.rect.y,10)

    def move(self):
        self.rect.y -= 10 # move up
        pygame.draw.ellipse(screen,[0,255,0],self.rect) # draw on screen

class Player:
    def __init__(self):
        self.rect = pygame.Rect(250,450,50,50)

    def move(self):
        # move
        keys = pygame.key.get_pressed()
        if keys[K_LEFT]:
            self.rect.x -= 5
        if keys[K_RIGHT]:
            self.rect.x += 5

        # don't go out of the screen
        self.rect.x = min(max(self.rect.x,0),500 - self.rect.width)

        # draw on screen
        pygame.draw.ellipse(screen,255],self.rect)

player = Player()
bullets = []

clock = pygame.time.Clock()
screen = pygame.display.set_mode((500,500))
running = True

while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
        if event.type == KEYDOWN and event.key == K_SPACE:
            bullets.append(Bullet()) # generate a new bullet when space pressed

    screen.fill((255,255)) # white

    for bullet in bullets: # draw each bullet generated
        bullet.move()
        if bullet.rect.x < bullet.rect.height: # if out of the screen,bullets.remove(bullet) # then remove it
    player.move() # draw the player

    pygame.display.flip()
    clock.tick(30)

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