Я никогда не работал с livewires, но в играх вам обычно нужен - более или менее - бесконечный цикл игры .
Смысл игрового цикла в том, что вы всегда хотите знать, где находится мышь или какие клавиши нажимаются, а не только один раз! Поэтому вы должны спрашивать Where is the mouse?
снова и снова. И чтобы достичь этого, вы используете цикл , который проверяет все, что вы хотите, каждый раз, когда он выполняется.
В первом примере игровым циклом является функция main
. Поток приложения выглядит так:
Импорт необходимых библиотек
from livewires import games
Инициализация игрового экрана
games.init(screen_width = 640, screen_height = 480, fps = 50)
Объявить спрайт, который может отображаться на экране
class Pan(games.Sprite):
""" A pan controlled by the mouse. """
def update(self):
""" Move to mouse coordinates. """
self.x = games.mouse.x
self.y = games.mouse.y
Объявите основной метод и настройте фон экрана игры
def main():
wall_image = games.load_image("wall.jpg", transparent = False)
games.screen.background = wall_image
Добавьте указанный выше спрайт на экран и переместите его в положение курсора мыши
pan_image = games.load_image("pan.bmp")
the_pan = Pan(image = pan_image,
x = games.mouse.x,
y = games.mouse.y)
games.screen.add(the_pan)
Сделать курсор мыши невидимым и активировать события
games.mouse.is_visible = False
games.screen.event_grab = True
Запуск mainloop . Вызов этого метода говорит: Run me
( function
main
)
over and over!
games.screen.mainloop()
Вызовите главный впервые
main()
Во втором примере нет цикла игры. Ход приложения (более плотный) выглядит так:
Импорт библиотек, инициализация игрового экрана, объявление спрайта
from livewires import games,color
games.init (screen_width = 640, screen_height = 480, fps = 50)
class Pan (games.Sprite):
def moved (self):
self.x = games.mouse.x
self.y = games.mouse.y
Установить фон экрана игры и добавить спрайт
myscr = games.screen
myscr.set_background (games.load_image ("wall.jpg", transparent = False))
pan_image = games.load_image ("pan.bmp")
le_pan = Pan (image = pan_image,
x = games.mouse.x,
y = games.mouse.y)
myscr.add(le_pan)
Отключить курсор мыши, включить события
games.mouse.is_visible = False
myscr.event_grab = True
Запуск mainloop . Вызов этого метода говорит: Run me
( function
undefined
)
over and over!
myscr.mainloop()
И вот точка преткновения! Вы не можете вызвать код, который находится в корне Python-файла! Функция mainloop
не знает, где вернуться или с чего начать. Звонок теряется, ваша программа зависает. Экран игры не может быть обновлен, потому что ничто не говорит ему, как он должен обновляться.
Вывод: Вы должны иметь функцию для вашего игрового цикла!