Pygame侧卷轴拱廊

时间:2015-06-05 15:43:27

标签: python pygame

我正在编写一个侧滚动街机游戏,你可以控制火箭,你必须避免小行星。我想让小行星从右到左移动屏幕的最后一部分还没有用完。这是我到目前为止的代码,但是当我运行时,没有任何反应。我也尝试了一下,然后所有的小行星同时出现了。非常感谢帮助。

import pygame as pg
from random import *



pg.init()

asteroidgif = pg.image.load("Asteroid.gif")
asteroidimg = pg.transform.scale(asteroidgif, (75,75))

#Setup screen and define colors
res = (1000,800)
screen = pg.display.set_mode(res)
pg.display.set_caption('Rocket game')

#pg.image.load("space.jpg")
black = (0,0,0)
white = (255,255,255)
background1 = pg.image.load("space.jpg").convert()
background2 = pg.image.load("space.jpg").convert()


#Generate random asteroids.
Nasteroid = 1
i = 0
x = 999
y = randint(1,800)
dx = 10                 #pixel step for asteroid
dy = 0
while i < Nasteroid:
    x = x - dx
    y = y

    pg.event.pump()
    screen.blit(asteroidimg,(x,y))
    pg.display.flip()
    i = i + 1
pg.quit()

1 个答案:

答案 0 :(得分:2)

使用Pygame的项目需要一个明确的&#34; mainloop&#34;游戏 - 代码的一部分,每个帧都会反复运行 (甚至更频繁地)您的申请。

并且 - 为了移动所有小行星,你需要遍历所有小行星 小行星,在每一帧。

在你的学习阶段,你已经混淆了对两个不同循环的需求 - 那么你的&#34;永恒&#34;一旦你对所有小行星进行交流,主循环就会退出:

while i < Nasteroid:
    x = x - dx
    y = y
    ...
    pg.display.flip()
    i = i + 1
pg.quit()

见上文?在你的第一次通过我cotains&#34; 2&#34;,你的循环退出。 作为第一步,在你的游戏真正实现互动之前,你至少需要:

while True:
    i = 0
    pg.event.pump()
    while i < Nasteroid:
        x -= dx
        #y = y
        screen.blit(asteroidimg,(x,y))
        i = i + 1
    pg.display.flip()
    pg.time.delay(30)
pg.quit()

这应该足以让你在应用程序退出之前看到一个小行星在你的屏幕上飞镖一次 - tehre还有几个步骤才能让它可玩,但你应该一次接近一件事。作为下一个不会起作用的东西:你显然可以使用全球&#34; x&#34;和&#34; y&#34;多个小行星的变量 - 基本方法是将所有的asterois都放在容器中 - 比如Python列表或pygame精灵组,并让每个小行星保持自己的坐标。