2016-06-29 5 views
0

Я работаю с Python 2.7 и pygame на клонах космических захватчиков. Я могу заставить мой танк двигаться, стрелять пулями, а чужие корабли удаляются, поэтому обнаружение столкновений работает нормально. Я создал группу спрайтов, и я надеялся, что смогу переместить все корабли, используя эту группу. Я также попробовал «unionall», но это, похоже, не работает с группой. я могу перебрать все корабли, как это:Перемещение группы спрайтов как один

shipXpos = [] 
for ship in shipList: 
    shipXpos.append(ship.rect.x) 

Затем

shipXMax = max(shipXpos) 
shipXMin = min(shipXpos) 

Таким образом, я хочу, чтобы найти границу кораблей (хотя я предполагаю rect.right и rect.left было бы лучше) по сравнению с краями, если экран, чтобы я мог изменить направление судна.

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

Надеюсь, это имеет смысл и ясен. Спасибо.

+0

Хмм, описание тега «движение» говорит «НЕ ИСПОЛЬЗУЙТЕ - неоднозначно» ... вы уверены, что хотите его использовать? Это может быть неоднозначно, imo :) –

ответ

0

В классе Sprite для инопланетных кораблей напишите функцию update, которая перемещает инопланетный корабль. Вы можете передать ему любые параметры, которые могут вам понадобиться (например, направление тока влево или вправо). Затем используйте pygame.sprite.Group.update() в своей основной программе, чтобы обновить все спрайты сразу.

В зависимости от желаемого поведения вам может не потребоваться проверка сторон экрана при столкновении. Я предполагаю, что вы хотите переместить все инопланетные корабли в унисон, то есть, если крайний ударит по краю, вы хотите, чтобы все корабли изменили направление. Исходные космические захватчики делают это, даже если самый внешний корабль был уничтожен, что означает, что оставшиеся корабли не будут перемещаться к внешнему краю, но остаются на своем предопределенном пути. В этом случае каждый корабль перемещает заданное количество пикселей вправо перед сменой влево, и вам просто нужно отслеживать этот цикл в функции update.

+0

Это имеет смысл спасибо. Тем временем мне удалось немного по-другому. Я написал функцию, чтобы найти максимальные и минимальные позиции всех кораблей. Поэтому я передал текущий список кораблей в функцию и вернул максимальные и минимальные позиции. Затем они в сочетании с направлением судна были отправлены в оператор if, который решает следующий ход, основанный на текущей позиции. Спасибо за это, а также я не знал, что оригинальная игра сделала это. Большой ответ еще раз. – alfo35x