如何解决PythonPygame及时产生
我正在用Pygame制作游戏(我对python和Pygame还是很陌生,我知道一些基本知识,但这已经足够了),但是当我尝试生成敌人时,它们会在不同的时间出现(他们应该出现在同一行并同时向下移动)
这是给我麻烦的部分:
blocks_list = [enemy_pos]
block_speed = 10
gameover = False
def dropper(blocks_list):
if len(blocks_list) <= random.randint(5,10):
dropper.x_pos = (random.randint(1,13) * p_size) + 10
dropper.y_pos = 0
blocks_list.append([dropper.x_pos,dropper.y_pos])
def move_blocks():
for enemy_pos in blocks_list:
enemy_pos[1] = enemy_pos[1] + block_speed
def draw_blocks(blocks_list):
long = len(blocks_list)
print(long)
for enemy_pos in blocks_list:
pygame.draw.rect(screen,RED,(enemy_pos[0],enemy_pos[1],p_size,p_size))
def drawing(blocks_list):
screen.fill(BLACK)
draw_blocks(blocks_list)
move_blocks()
While not gameover:
drawing(blocks_list)
THIS are photos of what is happenning
我尝试将其放入while循环中,以查看它是否一次全部显示。
完整代码:
#IMPORT THE IMPORTANT
import pygame
import sys
import random
pygame.init()
#screen size
SW = 320
SH = 600
#colors
RED = (255,0)
GREEN = (0,255,0)
BLUE = (0,255)
BLACK = (0,0)
WHITE = (255,255)
#Barier vars
barrier1x = SH/20
barrier1y = SH
barrier2x = SW
barrier2y = SH/20
#player vars
p_size = 20
p_x = (SW/2)-(p_size/2)
p_y = (SH/20 * 17)
p_speed = 20
screen = pygame.display.set_mode((SW,SH))
#falling? blocks vars
enemy_pos = [-30,0]
blocks_list = [enemy_pos]
block_speed = 10
gameover = False
clock = pygame.time.Clock()
#functions
def draw_player():
pygame.draw.rect(screen,GREEN,(p_x,p_y,p_size))
def dropper(blocks_list):
if len(blocks_list) <= random.randint(5,dropper.y_pos])
def move_blocks():
for enemy_pos in blocks_list:
enemy_pos[1] = enemy_pos[1] + block_speed
def draw_blocks(blocks_list):
long = len(blocks_list)
a=1
print(long)
for enemy_pos in blocks_list:
pygame.draw.rect(screen,p_size))
def barrier():
pygame.draw.rect(screen,BLUE,(0,barrier1x,barrier1y))
pygame.draw.rect(screen,barrier2x,barrier2y))
pygame.draw.rect(screen,(SW-barrier1x,SH-barrier2y,barrier2y))
def collision_always():
global p_x
global p_y
global gameover
if p_x <= SW/20:
p_x = p_x + p_speed
if p_x >= SW-barrier1x:
p_x = p_x - p_speed
if p_y <= SW/20:
p_y = p_y + p_speed
if p_y >= SH - (SH/20):
gameover = True;
print("u ded");
def drawing(blocks_list):
screen.fill(BLACK)
barrier()
draw_player()
draw_blocks(blocks_list)
move_blocks()
pygame.display.update()
def controls():
global p_y
global p_x
global p_speed
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
p_x = p_x - p_speed
elif event.key == pygame.K_RIGHT:
p_x = p_x + p_speed
elif event.key == pygame.K_UP:
p_y = p_y - p_speed
elif event.key == pygame.K_DOWN:
p_y = p_y + p_speed
#main loop
while not gameover:
dropper(blocks_list)
controls()
collision_always()
drawing(blocks_list)
clock.tick(30)
解决方法
由于每次循环迭代都调用[
{
"_index":"tags","_type":"_doc","_id":"s0tOBHUBeQiv5rwb5JPA","_score":0.6931472,"_source":{
"tags_slug":"term_a"
},"matched_queries":[ <---
"term_a"
]
},{
"_index":"tags","_id":"tEtPBHUBeQiv5rwbAZPt","_source":{
"tags_slug":"term_b"
},"matched_queries":[ <---
"term_b"
]
}
]
,所以它会不断向屏幕添加敌人。如果在一个迭代中添加一些敌人,它们会下降一点,然后在下一个循环迭代中添加更多的敌人,它们将比上一个迭代中创建的敌人更高。 dropper(blocks_list)
意味着不一定会在第一次迭代中添加所有敌人。每次迭代都会添加一个随机量。
因此,为了使所有敌人同时掉落,一种选择是在开始循环之前立即将所有敌人全部添加。例如将if len(blocks_list) <= random.randint(5,10)
移到dropper(blocks_list)
上方。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。