М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет184/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   180   181   182   183   184   185   186   187   ...   334
Байланысты:
Изучаем Python

settings.py
class Settings():
"""Класс для хранения всех настроек игры Alien Invasion."""
def __init__(self):
...
# Настройки корабля
self.ship_speed = 1.5
Переменной 
ship_speed_factor
присваивается значение 1.5. При перемещении 
корабля его позиция изменяется на 1,5 пиксела вместо 1.
Дробные значения скорости позволят лучше управлять скоростью корабля при 
последующем повышении темпа игры. Однако атрибуты прямоугольников (такие, 
как 
x
) принимают только целочисленные значения, поэтому в 
Ship
необходимо 
внести ряд изменений:
ship.py
class Ship():
"""Класс для управления кораблем."""

def __init__(self, ai_game):
"""Инициализирует корабль и задает его начальную позицию."""
self.screen = ai_game.screen
self.settings = ai_game.settings
...
# Каждый новый корабль появляется у нижнего края экрана
...
# Сохранение вещественной координаты центра корабля.

self.x = float(self.rect.x)
# Флаги перемещения
self.moving_right = False
self.moving_left = False
def update(self):
"""Обновляет позицию корабля с учетом флагов."""
# Обновляется атрибут x, не rect.
if self.moving_right:


256
Глава 12 • Инопланетное вторжение

self.x += self.settings.ship_speed
if self.moving_left:
self.x -= self.settings.ship_speed
# Обновление атрибута rect на основании self.x.

self.rect.x = self.x
def blitme(self):
...
В точке 

в 
Ship
создается атрибут 
settings
, чтобы он мог использоваться 
в 
update()
. Так как позиция корабля изменяется с нецелым приращением пикселов, 
ее следует присвоить переменной, способной хранить дробные значения. Формаль-
но атрибутам 
rect
можно присвоить дробные значения, но 
rect
сохранит только 
целую часть этого значения. Для точного хранения позиции корабля определяется 
новый атрибут 
self.x
, способный хранить дробные значения 

. Функция 
float()
используется для преобразования значения 
self.rect.x
в вещественный формат 
и сохранения этого значения в 
self.x
.
После изменения позиции корабля в 
update()
значение 
self.x
изменяется на 
величину, хранящуюся в 
settings.ship_speed

. После обновления 
self.x
новое 
значение используется для обновления атрибута 
self.rect.x
, управляющего по-
зицией корабля 

. В 
self.rect.x
будет сохранена только целая часть 
self.x
, но 
для отображения корабля этого достаточно.
Теперь можно изменить значение 
ship_speed
; при любом значении, большем 1, 
корабль начинает двигаться быстрее. Эта возможность ускорит реакцию корабля 
на действия игрока, а также позволит нам изменить темп игры с течением времени.


Достарыңызбен бөлісу:
1   ...   180   181   182   183   184   185   186   187   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет