2015-06-05 6 views
2

im пишущая аркадная игра с прокруткой, где вы управляете ракетой, и вам нужно избегать астероидов. Последняя часть, где я хочу, чтобы астероиды перемещались, экран справа налево еще не работает. Это код, который у меня есть до сих пор, но когда я запускаю это, ничего не происходит. Я также попробовал это немного по-другому, и тогда все астероиды появились одновременно. Помощь очень ценится.Pygame side scroller arcade

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() 
+0

Что вы настроили, когда попробовали немного по-другому? И как именно он не работает, что не появляются астероиды? – SuperBiasedMan

+0

Я использовал другой код, который я уже удалил, и да, действительно, астероиды вообще не появляются, пока я, кажется, их размахиваю на экране. Я довольно новичок в python и pygame. – aeengineer

+0

Даже если он удален, не могли бы вы объяснить, что вы пытались изменить и почему? Это может быть очень полезно для решения вашей проблемы. – SuperBiasedMan

ответ

2

Проекты с использованием Pygame требуют явного «MainLoop» игры - часть вашего кода, который будет работать снова и снова для каждого кадра (или даже чаще) вашего приложения.

И - для перемещения всех астероидов вам необходимо зацикливать все ацтеки в каждом кадре.

В вашей стадии обучения, вы спутали необходимость двух отдельных петель - так что должно быть вашим «вечный» MainLoop покидает, как только вы interate над всеми астероидами:

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

смотри выше? а ваш первый проход i cotains «2», и ваш цикл завершен. В качестве первого шага, прежде чем ваша игра становится действительно интерактивным вам потребуется как минимум:

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() 

Это должно хватить фр увидеть один астероид DART на экране один раз, перед выходом из приложения - Tehre несколько больше шагов, прежде чем получить это, чтобы играть, но вы должны приблизиться к одной вещи за раз. Как одна следующая вещь, которая не сработает: очевидно, вы можете использовать глобальные переменные «x» и «y» для более чем одного астероида. Основной подход заключается в том, чтобы все ваши астероиды были в контейнере, например, в списке Python, или в pygame sprite group, и чтобы каждый астероид имел свои собственные координаты.

+0

Ничего себе! Спасибо, это действительно показало некоторое улучшение. Что происходит сейчас (я добавил свой собственный код), что астероид перемещается справа налево. Однако предыдущая позиция астероида все еще появляется на экране. Как мне избежать этого? Благодарим вас за помощь. – aeengineer

+0

Как я уже сказал, вам предстоит пройти долгий путь, и вам нужно многому научиться в этом проекте, однако, поскольку конкретная проблема, которую вы задали, разрешена, я предлагаю вам задать другие новые вопросы, более новые версии вашего кода. – jsbueno

+0

Все, спасибо за ваш ответ;) – aeengineer