Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
grandsss
1 / 1 / 0
Регистрация: 04.11.2016
Сообщений: 3
1

Реализовать синхронное движение спрайтов

04.04.2017, 17:52. Просмотров 151. Ответов 0
Метки нет (Все метки)

Сломал голову, объясните как реализовать движение рядов вниз, вправо-влево двигаются нормально(вместе), а вверх-вниз, только одним рядом.
Вот код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import sys
import pygame
from pygame.sprite import Sprite
from pygame.sprite import Group
 
 
class Settings():
    """Настройки."""
    def __init__(self):
        self.screen_width = 1200
        self.screen_height = 600
        self.bg_color = (255, 255, 255)
        self.caplia_speed_factor = 1
        self.caplia_drop_speed = 10
        self.caplia_twist = 1
        
 
 
class Caplia(Sprite):
    """Описание капли."""
    def __init__(self, ai_settings, screen):
        super(Caplia, self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings
        self.image = pygame.image.load('caplia.png')
        self.rect = self.image.get_rect()
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height
 
        self.x = float(self.rect.x)
        self.y = float(self.rect.y)
 
    def blitme(self):
        self.screen.blit(self.image, self.rect)
 
    def check_adges(self, ai_settings):
        if self.rect.right >= ai_settings.screen_width.right:
            return True
        elif self.rect.left <= 0:
            return True
 
    def update(self):
        self.x += self.ai_settings.caplia_speed_factor
        self.rect.x = self.x
        
 
def key_event():
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_q:
                sys.exit()
 
def screen_update(ai_settings, screen, caplias):
    screen.fill(ai_settings.bg_color)
    caplias.update()
    caplias.draw(screen)
    pygame.display.flip()
 
 
def caplias_view(screen, ai_settings, caplias):
    caplia = Caplia(ai_settings, screen)
    caplia_width = caplia.rect.width
    caplia_height = caplia.rect.height
    number_caplias_x = int((ai_settings.screen_width - (2 * caplia_width)) / (2 * caplia_width))
    number_caplias_rows = int((ai_settings.screen_height - (2 * caplia_height)) / (2 * caplia_height))
    for row in range(number_caplias_rows):
        for caplias_number in range(number_caplias_x):
            caplia = Caplia(ai_settings, screen)
            caplia.x = caplia_width + (2 * caplia_width) * caplias_number
            caplia.rect.x = caplia.x
            caplia.rect.y = caplia_height + (2 * caplia_height) * row
            caplias.add(caplia)
 
 
def game():
    pygame.init()
    ai_settings = Settings()
    screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
    pygame.display.set_caption('Капли.')
    caplias = Group()
    caplias_view(screen, ai_settings, caplias)
 
    while True:
        key_event()
        screen_update(ai_settings, screen, caplias)
 
 
game()
Добавлено через 1 час 6 минут
Разобрался сам, убрал метод update() из класса Caplia(Sprite)
Python
1
2
3
def update(self):
     self.x += self.ai_settings.caplia_speed_factor
     self.rect.x = self.x
добавил функцию update_caplias()
Python
1
2
3
def updata_caplias(screen, caplias, ai_settings):
    for caplia in caplias.sprites():
        caplia.rect.y += ai_settings.caplia_speed_factor
Подскажите может как-то по другому можно решить задачу и почему не работает обычное смещение по rect.y
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2017, 17:52
Ответы с готовыми решениями:

Реализовать систему автоматической генерации индивидуальных задач на движение по шаблонам
Некоторые школьники списывают решения из готовых домашних заданий (ГДЗ). Чтобы...

Прозрачность у спрайтов, pygame
Здравствуйте. Помогите, кто может. Вкратце дело обстоит так: начал писать игру...

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

Плавное движение спрайтов в DirectDraw
В простой программе, использующей DirectDraw, необходимо создать плавное...

Синхронное движение двух шариков навстречу друг другу
Суть задания такова, два шарика идут навстречу друг другу, сталкиваются и затем...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2017, 17:52

Как реализовать Синхронное выполнение двух функций при вызове AsyncTask
как сделать так чтобы при нажатии на BUTTON с начало выполнилась функция ...

Не получается реализовать движение
Не получается реализовать движение

Реализовать движение змейки
Помогите сделать курсовую из turbo pascal в ABC! uses crt,graph; {подключаем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru