Python 如何在pygame中制作子弹动画?
所以我写了我的代码,现在一切都按照我希望的方式运行。 唯一的问题是我的子弹或火球传送到我设定的位置。 我想知道是否有一种方法可以让它看起来像是用pygame之类的东西朝着目的地移动。 非常感谢Python 如何在pygame中制作子弹动画?,python,pygame,Python,Pygame,所以我写了我的代码,现在一切都按照我希望的方式运行。 唯一的问题是我的子弹或火球传送到我设定的位置。 我想知道是否有一种方法可以让它看起来像是用pygame之类的东西朝着目的地移动。 非常感谢 (width, height) = (1300,800) screen = pygame.display.set_mode((width, height)) playerImage = pygame.image.load('player.png') fireballImage = pygame.image
(width, height) = (1300,800)
screen = pygame.display.set_mode((width, height))
playerImage = pygame.image.load('player.png')
fireballImage = pygame.image.load('fireball.png')
pygame.display.set_caption('Game')
transparent = (0, 0, 0, 0)
#Fireball stats
def player(x ,y):
screen.blit(playerImage, (x, y))
pygame.display.flip()
def fireball(x, y):
screen.blit(fireballImage, (fb_x,fb_y))
pygame.display.flip()
fireball_state = "ready"
print('created')
fb_x = x = width * 0.45
fb_y = y = height * 0.8
x_change = 0
y_change = 0
fb_x_change = 0
fb_y_change = 0
pressed = pygame.key.get_pressed()
#mainloop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_d:
x_change = 1
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
x_change = -1
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
x_change = 0
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
y_change = -2
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_s:
y_change = 2
if event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s:
y_change = 0
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
fb_y_change = -400
if event.type == pygame.KEYUP:
if event.key == pygame.K_SPACE:
fb_y_change = 0
x += x_change
y += y_change
fireball(x,y)
fb_x = x
fb_y = y
screen.fill((255,255,255))
player(x,y)
fb_x += fb_x_change
fb_y += fb_y_change
fireball(fb_x,fb_y)
pygame.display.update()
首先,从
player
和fireball
中删除pygame.display.flip()。那是闪烁的。在应用程序循环结束时,一个pygame.display.update()
就足够了。
注意,火球必须在(x,y)
而不是(fb\u x,fb\u y)
def播放器(x,y):
屏幕光点(播放图像,(x,y))
def火球(x,y):
屏幕。blit(火球图像,(x,y))
fireball_state=“准备就绪”
进一步使用/控制每秒的触发器(FPS
):
clock=pygame.time.clock()
#主回路
运行=真
运行时:
时钟滴答声(FPS)
添加火球列表:
火球=[]
按下空格键时生成新火球:
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
fireballs.append([x,y,0,-2])
更新并在循环中绘制火球:
火球中fb的:
fb[0]+=fb[2]
fb[1]+=fb[3]
火球中fb的:
火球(fb[0],fb[1])
请参见示例:
火球=[]
FPS=60
clock=pygame.time.clock()
运行=真
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
fireballs.append([x,y,0,-2])
pressed=pygame.key.get_pressed()
如果按下[pygame.K_w]:
y-=2
如果按下[pygame.K_s]:
y+=2
如果按下[pygame.K_a]:
x-=2
如果按下[pygame.K_d]:
x+=2
对于范围内的i(len(火球)-1,-1,-1):
fb=火球[i]
fb[0]+=fb[2]
fb[1]+=fb[3]
如果fb[1]<0:
德尔火球[i]
屏幕填充((255255))
玩家(x,y)
对于火球中的fb:
火球(fb[0],fb[1])
pygame.display.update()
首先从玩家和火球中删除pygame.display.flip()
。那是闪烁的。在应用程序循环结束时,一个pygame.display.update()
就足够了。
注意,火球必须在(x,y)
而不是(fb\u x,fb\u y)
def播放器(x,y):
屏幕光点(播放图像,(x,y))
def火球(x,y):
屏幕。blit(火球图像,(x,y))
fireball_state=“准备就绪”
进一步使用/控制每秒的触发器(FPS
):
clock=pygame.time.clock()
#主回路
运行=真
运行时:
时钟滴答声(FPS)
添加火球列表:
火球=[]
按下空格键时生成新火球:
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
fireballs.append([x,y,0,-2])
更新并在循环中绘制火球:
火球中fb的:
fb[0]+=fb[2]
fb[1]+=fb[3]
火球中fb的:
火球(fb[0],fb[1])
请参见示例:
火球=[]
FPS=60
clock=pygame.time.clock()
运行=真
运行时:
时钟滴答声(FPS)
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
运行=错误
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_空间:
fireballs.append([x,y,0,-2])
pressed=pygame.key.get_pressed()
如果按下[pygame.K_w]:
y-=2
如果按下[pygame.K_s]:
y+=2
如果按下[pygame.K_a]:
x-=2
如果按下[pygame.K_d]:
x+=2
对于范围内的i(len(火球)-1,-1,-1):
fb=火球[i]
fb[0]+=fb[2]
fb[1]+=fb[3]
如果fb[1]<0:
德尔火球[i]
屏幕填充((255255))
玩家(x,y)
对于火球中的fb:
火球(fb[0],fb[1])
pygame.display.update()
你想让它移动到一个特定的位置,还是移动到它碰到什么东西?移动到它碰到什么东西是我最后想做的。现在我的问题是火球正在传送到这个位置,而不是慢慢地移动到它。你应该看看@rabbi76答案,但除此之外,你应该把火球和玩家(可能后来是你的敌人)分成不同的类别,而不是把他们的所有信息(x,y,change,等等)都放在上面。最好看看pygames Sprite类,因为它对这类事情非常有帮助。你想让它移动到一个特定的位置,还是移动到它碰到什么东西?移动到它碰到什么东西是我最后想做的。现在我的问题是火球正在传送到这个位置,而不是慢慢地移动到它。你应该看看@rabbi76答案,但除此之外,你应该把火球和玩家(可能后来是你的敌人)分成不同的类别,而不是把他们的所有信息(x,y,change,等等)都放在上面。最好看看pygames Sprite类,因为它对这类事情非常有帮助。嘿,伙计,非常感谢!我是在你的代码的帮助下弄明白的,但我必须承认,一开始我真的很想抵制使用它,因为我很难理解结局到底是什么。你能解释一下(如果你不介意的话)for语句和下面的代码吗?或者特别是两个for语句。@kr4ck3d_是_s4dfirebolls=[]
是一个列表<代码>火球。追加([x,y,0,-2])
向列表中追加一个包含4个元素的列表。因此,您创建了一个列表,每个元素也是一个列表