Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
19.10.2011, 12:49
Сообщение
#1
|
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Главные администраторы Сообщений: 14349 Регистрация: 12.10.2007 Из: Twilight Zone Пользователь №: 1 |
Добрый…
Хочу рассказать и показать вам свой опыт знакомства с библиотекой pygame — предположительно отличной библиотекой для реализации графичиских приложений (в большей степени игр-аркад) на языке python. Для примера была реализована (частично) игра Doodle Jump. Дисклеймер
Вместо введения Python. Python великолепен в плане документации. Она есть, она понятна, она не лишена отличных примеров. Pygame — не исключение, поэтому предлагаю пока не останавливаться на подробностях реализации этой библиотеки, но необходимо заметить, что ее средства позволяют подгрузить изображение, и просто перемещать его по x и y. Ничего лишнего. Архитектура Постараемся разработатать архитектуру приложения в лучших традициях ООП. Имеем следующую диаграмму классов: ![]() Сторонники MVC модели уже плачут, т.к. и логика и представление засунуты в тело класса. Имеем 3 локации:
Базовый объект Sprite, от которого наследуются все игровые объекты — платформы, кнопки, главный герой и т.д. По схеме все ясно. Ключевые моменты Events def event(self, event): if event.type == QUIT: sys.exit() elif event.type == KEYUP: if event.key == K_ESCAPE: # do something if event.type == MOUSEMOTION: for btn in self.buttons: if btn.rect.collidepoint(pygame.mouse.get_pos()): #pass btn.changeState(1) С помощью механизма эвентов прозрачно перехватываются нажатия клавиш и манипуляции с мышью. Изображения self.img_l = pygame.image.load('img/doodle_l.png').convert() self.image = self.img_l self.image.set_colorkey(self.image.get_at((0,0)), RLEACCEL) self.rect = self.image.get_rect() self.rect.center = (self.x,self.y) Подгружаем картинки для спрайтов. Столкновения self.doodle.getLegsRect().colliderect(spr.getSurfaceRect()) Метода coliderect возвращает true, если прямоугольники, ограничивающие спрайты пересекаются. Пара скриншотов ![]() ![]() ToDo
Вместо послесловия Знакомство с pygame можно считать законченым, дудлер прыгает и радуется жизни, но нагрузка процессора при этом стремится к 50-70%, что не есть гуд. Что это, Исходники на github. Original source: habrahabr.ru (comments, light). Читать дальше -------------------- |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 15.12.2025, 23:31 | |
|
|
||