Чтобы внести ясность: поскольку этот вопрос был закрыт из-за того, что он похож на другой вопрос, я не пытаюсь найти скорость 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
Каков наилучший способ сохранить одинаковое расстояние между изображениями, следующими друг за другом? ⇐ Python
Программы на Python
1732945227
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79219312/what-is-the-best-way-to-keep-spacing-consistent-between-images-following-each-ot[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия