Страницы

Поиск по вопросам

Показаны сообщения с ярлыком pygame. Показать все сообщения
Показаны сообщения с ярлыком pygame. Показать все сообщения

воскресенье, 12 января 2020 г.

Выпадающее меню в Python (pygame)

#python #pygame


как создать в питоне выпадающее меню с помощью графического модуля pygame? (задача,
есть множество цветов и нужно выбрать один из списка)
    


Ответы

Ответ 1



Попробуйте адаптировать под свои нужды вот эту библиотеку: http://simple-pygame-menu.googlecode.com/svn/trunk/ Пример кода: menu_data = ( 'Main', 'Item 0', 'Item 1', ( 'Things', 'Item 0', 'Item 1', 'Item 2', ( 'More Things', 'Item 0', 'Item 1', ), ), 'Quit', ) PopupMenu(menu_data) for e in pygame.event.get(): if e.type == USEREVENT and e.code == 'MENU': print 'menu event: %s.%d: %s' % (e.name,e.item_id,e.text) if (e.name,e.text) == ('Main','Quit'): quit()

суббота, 11 января 2020 г.

Как замедлить часть кода,но не замедлять весь код?

#python #pygame


Делаю небольшую игру на Pygame. 

В моем коде есть функция, в которой while True запускает меню. В этом меню есть блок,
который постоянно перемещает спрайт на рандомное кол-во пикселей. 

Нужно сделать так, чтоб замедлился не весь код, а только этот блок (чтоб спрайт перемещался
не моментально, а с задержкой в 3 секунды). 

Использовал pygame.time.delay() и time.sleep(), но они замедляют весь код. 
Подскажите, что можно сделать. Если нужно, то скину код. 😁
    


Ответы

Ответ 1



Задержек быть не должно. Чтобы выполнять некоторый код с какой-то периодичностью, надо генерировать события с этой периодичностью и обрабатывать их: import pygame screen = pygame.display.set_mode((300, 200)) clock = pygame.time.Clock() pygame.display.set_caption('Timer demo') MOVE_DOWN_DELAY = 500 MOVE_DOWN_EVENT = pygame.USEREVENT + 1 pygame.time.set_timer(MOVE_DOWN_EVENT, MOVE_DOWN_DELAY) dot = pygame.Rect(150, 10, 10, 10) while True: clock.tick(50) if pygame.event.get(pygame.QUIT): break for e in pygame.event.get(): if e.type == MOVE_DOWN_EVENT: dot.move_ip(0, 10) screen.fill((0, 0, 0)) pygame.draw.rect(screen, (150, 150, 150), dot) pygame.display.flip()

No module named locals. Pygame

#python #pygame


Запускаю скрипт (.py):
import pygame
from pygame.locals import *
pygame.init()
pygame.display.set_mode((640, 480))
pygame.display.set_caption('Fdd')
pygame.draw.line(window,(10,100,100),(10,200),(20,300),2)
pygame.display.flip()
while 1:

     for event in pygame.event.get():
      if event.type == QUIT:
       sys.exit()

Вылетает ошибка:
Traceback (most recent call last):
  File "D:\Pyt\tf.py", line 1, in 
    import pygame
  File "D:\Pyt\pygame.py", line 2, in 
    from pygame.locals import *
ImportError: No module named locals

Как я понял, ошибка в этом: 
from pygame.locals import *

Но когда пишешь в Shell консоли, такой ошибки не возникает.
Может кто-нибудь помочь?    


Ответы

Ответ 1



import pygame from pygame.locals import * А зачем Вы 2 раза одно и тоже импортируете? вам достаточно только import pygame А вообще интерпретатор ищет модули в этих папках import sys print("\n".join(sys.path)) и в текущей директории. Этот модуль должен лежать в одной из этих папок.

Ответ 2



Как я понял вы файл, лежащий в той же директории, что и исполняемый назвали pygame.py В итоге в строке import pygame питон импортирует не библиотеку pygame, а файл pygame.py Не надо называть питоновские файлы разными ключевыми именами и названиями библиотек, а то произойдут ошибки. Из консоли такая ошибка не возникает потому-что рядом с ней уже нет файла с ключевым именем pygame.py и происходит стандартный импорт библиотеки pygame, что вам и надо

четверг, 9 января 2020 г.

Необходимо реализовать регенерацию в игре на python

#python #разработка_игр #pygame


Пишу игру на python с помощью pygame, пытался создать регенерацию единицы здоровья
раз в 5 секунд, если здоровье неполное.

def temp(self):
     while True: # бесконечный цикл
        self.health += 1
        time.sleep(5) # раз в 5 сек

# функция запуска регена хп
def regenerating(self): 
    if self.health < self.max_health:   #если текущее хп меньше максимального
        _thread.start_new_thread(self.temp,()) #новый процес


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


Ответы

Ответ 1



Вот так надо: def temp(self): while self.health < self.max_health: self.health += 1 time.sleep(5) # раз в 5 сек def regenerating(self): if self.health < self.max_health: th = threading.Thread(target=self.temp) th.start()

Ответ 2



вот способ без thread: def regenerating(self): if self.health>self.max_health: self.set_health(self.max_health) detecting_time=pg.time.get_ticks() if self.health < self.max_health and detecting_time%500==0: # в милисекундах 5=500 self.health += 1

четверг, 11 июля 2019 г.

Выпадающее меню в Python (pygame)

как создать в питоне выпадающее меню с помощью графического модуля pygame? (задача, есть множество цветов и нужно выбрать один из списка)


Ответ

Попробуйте адаптировать под свои нужды вот эту библиотеку:
http://simple-pygame-menu.googlecode.com/svn/trunk/
Пример кода:
menu_data = ( 'Main', 'Item 0', 'Item 1', ( 'Things', 'Item 0', 'Item 1', 'Item 2', ( 'More Things', 'Item 0', 'Item 1', ), ), 'Quit', ) PopupMenu(menu_data) for e in pygame.event.get(): if e.type == USEREVENT and e.code == 'MENU': print 'menu event: %s.%d: %s' % (e.name,e.item_id,e.text) if (e.name,e.text) == ('Main','Quit'): quit()