Каков наилучший способ сохранить одинаковое расстояние между изображениями, следующими друг за другом?Python

Программы на Python
Ответить
Anonymous
 Каков наилучший способ сохранить одинаковое расстояние между изображениями, следующими друг за другом?

Сообщение Anonymous »

Чтобы внести ясность: поскольку этот вопрос был закрыт из-за того, что он похож на другой вопрос, я не пытаюсь найти скорость x и y врага, движущегося к игроку. Я пытаюсь выяснить, что лучше всего, чтобы один спрайт следовал сразу за другим спрайтом с одинаковым интервалом, независимо от скорости движения исходного изображения (или головы), поскольку любой последующий сегмент должен занять позицию сегмента в перед ним через весь список сегментов.
В следующем базовом коде сегменты-сороконожки образуют более длинный класс многоножек. Поскольку первый сегмент следует за «головой», а затем второй сегмент следует за первым сегментом и т. д., они должны быть расположены на расстоянии ровно одного размера сегмента друг от друга. По большей части это работает, но в зависимости от того, на какой скорости они у меня есть, интервал иногда не остается согласованным с перекрытием сегментов или расстоянием друг от друга при движении вниз и в обратном направлении.
Что бы было будет ли лучший способ закодировать интервал, чтобы он оставался постоянным независимо от скорости движения?
import pygame
import random

# Initialize Pygame
pygame.init()

# Screen dimensions
SCREEN_WIDTH = 600
SCREEN_HEIGHT = 800
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
clock = pygame.time.Clock()

# Colors
BLACK = (0, 0, 0)
CYAN = (0, 255, 255)

# Centipede settings
SEGMENT_SIZE = 20

class CentipedeSegment(pygame.sprite.Sprite):
def __init__(self, x, y, speed):
super().__init__()
self.image = pygame.Surface((SEGMENT_SIZE, SEGMENT_SIZE), pygame.SRCALPHA)
pygame.draw.circle(self.image, CYAN, (SEGMENT_SIZE // 2, SEGMENT_SIZE // 2), SEGMENT_SIZE // 2)
self.rect = self.image.get_rect(topleft=(x, y))
# self.image = centipedes_sprites[0]
self.rect = self.image.get_rect(topleft=(x, y))
self.speed = speed
self.x_direction = 1 # 1 for right, -1 for left
self.y_direction = SEGMENT_SIZE # 20 for down, -20 for up
self.move_down_next_frame = False # Flag to control down movement after edge collision
self.move_up_next_frame = False # Flag to control up movement after edge collision
self.current_frame = 0 # Set frame counter for images in list

def update(self, mushrooms, delta_time):
# self.image = centipedes_sprites[self.current_frame]
# self.current_frame = (self.current_frame + 1) % len(centipedes_sprites)
# if self.x_direction == -1:
# screen.blit(pygame.transform.flip(self.image, True, False),(self.rect.x,self.rect.y))
# else:
# screen.blit(self.image,(self.rect.x,self.rect.y))
screen.blit(self.image,(self.rect.x,self.rect.y))

if self.move_down_next_frame:
self.rect.y += self.y_direction
self.move_down_next_frame = False
if self.move_up_next_frame:
self.move_up_next_frame = False

# Calculate movement with delta time
self.rect.x += int(self.speed * self.x_direction * delta_time)

# Check for collisions with mushrooms
for mushroom in mushrooms:
if self.x_direction == 1 and self.rect.right >= mushroom.rect.left and self.rect.left < mushroom.rect.left and self.rect.colliderect(mushroom.rect):
self.x_direction = -1
self.move_down_next_frame = True
if self.rect.y >= SCREEN_HEIGHT - 40:
self.y_direction *= -1 # Reverse vertical direction
break
elif self.x_direction == -1 and self.rect.left mushroom.rect.right and self.rect.colliderect(mushroom.rect):
self.x_direction = 1
self.move_down_next_frame = True
if self.rect.y >= SCREEN_HEIGHT - 40:
self.y_direction *= -1 # Reverse vertical direction
break

# Check for screen edges and toggle direction if reached
if self.rect.left = SCREEN_HEIGHT - 40:
self.y_direction *= -1 # Reverse vertical direction
elif self.rect.right >= SCREEN_WIDTH and self.x_direction == 1:
self.x_direction = -1
self.move_down_next_frame = True
if self.rect.y >= SCREEN_HEIGHT - 40:
self.y_direction *= -1 # Reverse vertical direction

# Reverse y_direction logic
if self.y_direction < 0: # Moving up
if self.rect.y

Подробнее здесь: https://stackoverflow.com/questions/792 ... ng-each-ot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»