<p>首先,我建议使用一个类来控制你的播放器。
这使得绘制和检测碰撞更容易。
一种简单的方法是:</p>
<pre><code>class Player:
def __init__(self, x, speed):
self.x = x
self.speed = speed
self.moveright = 0
self.moveleft = 0
def update(self, time_passed):
if self.moveright:
self.x += self.speed * time_passed
if self.moveleft:
self.x -= self.speed * time_passed
</code></pre>
<p>然后,一个类似的类来控制你的敌人。在</p>
^{2}$
<p><strong>这里,
time_passed是Clock()对象的刻度值。
屏幕是你的pygame.display表面。</strong></p>
<p>现在您已经将敌人对象化了,您可以创建一个列表来存储敌方类的实例。在</p>
<p>正如我所建议的,使用这个机制可以使你的游戏更加流畅。
不建议对每个KEYDOWN事件使用增量。在</p>
<p>创建一个列表来存储敌方实例并创建玩家实例:</p>
<pre><code>Enemylist = []
Player1 = Player(<SomeXValue>,0.1)
</code></pre>
<p>继续创造随机敌人。
如果你需要创建,每n个循环就有一个螺丝钉(即敌人()),
您可以创建在该间隔内激活的标志。
你可以用一个变量'count'来决定这一点。
初始值可以是0,然后在每个循环中增加1。
(例如:如果你想让一个敌人每5个循环产卵一次,用5替换n。)</p>
<pre><code>if count % n == 0:
Enemylist.append(Enemy(random.randint(0,<YourScreenSize>),0.1))
if count > 1000:
count = 0
</code></pre>
<p>也就是说,在屏幕的任意位置生成一个敌人,并让他们向下移动。
0.1只是一个采样速度。在</p>
<p>现在,到循环部分。。。
for event循环应该有KEYDOWN和KEYUP检查,以确保单次按键。
这里,Player1是Player类实例的名称。在</p>
<pre><code>for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_RIGHT:
Player1.moveright = 1
if event.key == K_LEFT:
Player1.moveleft = 1
if event.type == KEYUP:
if event.key == K_RIGHT:
Player1.moveright = 0
if event.key == K_LEFT:
Player1.moveleft = 0
</code></pre>
<p><strong>添加检查以确保播放机不会离开屏幕。</strong></p>
<p>玩家的动作现在完成了,符合游戏的要求。在</p>
<p>调用玩家、敌人的update()函数并翻转屏幕。在</p>
<pre><code>Player1.update(time_passed)
<blit background image or color here>
screen.blit(<image_name>, (Player1.x, <PlayerYPosition>))
for enemy in Enemylist:
enemy.update(time_passed)
screen.blit(<image_name>, (enemy.x, enemy.y))
count += 1
pygame.display.update()
</code></pre>
<p>现在,添加碰撞检查以完成游戏。
此外,您可以删除已从屏幕中传递出去的实例以节省内存。在</p>