Спрайты и списки спрайтов
Спрайт
Спрайт — объект игры с положением, размером и картинкой: игрок, монета, пуля, платформа.
player = arcade.Sprite("player.png", scale=0.5) # из картинки
box = arcade.SpriteSolidColor(40, 40, color=arcade.color.RED) # просто цветной прямоугольник
coin = arcade.SpriteCircle(10, arcade.color.GOLD) # круг радиуса 10
player.center_x = 100 # положение — это центр спрайта
player.center_y = 200
player.position = (100, 200)
Кроме центра у спрайта есть стороны: left, right, bottom, top. Их можно не только читать, но и присваивать — тогда сдвигается весь спрайт:
box.left = 0 # прижать к левому краю окна
box.top = 600 # прижать к верху окна высотой 600
Так удобно не выпускать объект за пределы окна или ставить его вплотную к стене.
Скорость
change_x и change_y — скорость спрайта в пикселях за кадр. Движение обычно пишут в on_update:
def on_update(self, delta_time):
self.player.center_x += self.player.change_x
self.player.center_y += self.player.change_y
Развернуть объект — сменить знак скорости: enemy.change_x = -enemy.change_x. Надёжнее явно задать направление: abs(...) — вправо, -abs(...) — влево. Тогда двойной разворот в одном кадре ничего не сломает.
Списки спрайтов
Спрайты хранят в arcade.SpriteList: он рисует все спрайты одним вызовом видеокарты.
self.coins = arcade.SpriteList()
self.coins.append(coin)
def on_draw(self):
self.clear()
self.coins.draw()
print(len(self.coins))
for c in self.coins:
c.center_y -= 1
Убрать спрайт из всех списков, где он лежит: sprite.remove_from_sprite_lists().
Ловушка. Нельзя удалять элементы из списка, по которому идёт цикл: элементы сдвигаются, и цикл перепрыгивает через соседний. Перебирайте копию:
for b in list(self.bullets): # list(...) — копия
if b.bottom > self.height:
b.remove_from_sprite_lists()
Итог
Sprite,SpriteSolidColor,SpriteCircle; положение —center_x,center_y;- стороны
left,right,bottom,topможно присваивать; change_x,change_y— скорость, её прибавляют вon_update;SpriteList:append,draw,len; удаление —remove_from_sprite_lists(), при обходе — по копии списка.