如何解决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 举报,一经查实,本站将立刻删除。