Форум сайта python.su
0
Всем доброго времени суток! В Pygame через def сделана отрисовка спрайтов при событии:
def player_upd(): if v_c_rand1 == 100: player=Player() #переменная из класса для спрайта all_sprites.add(player) player_group.add(player) global all_spr all_spr += 1 #счетчик
Отредактировано Rad.89 (Июнь 14, 2022 07:28:50)
Офлайн
61
Ну наверное покажите больше кода - не гадат же нам как и откудова вы получаете ошибку
Офлайн
0
сократил, как оно идет по программе по порядку и все связанное с данным img:
#грузим картинку player = pygame.image.load(os.path.join(img_folder, 'player.png')) # даем класс: class Plyer (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = player self.image = pygame.transform.scale(player,(25,25)) self.rect = self.image.get_rect() self.rect.center=((pl_pos), (pl_x+15)) player = pygame.sprite.Group() # далее в программе вызываем функцию def player_upd(): player = (pl_pos), (pl_x+15) #получаем координаты, где появится новый клон спрайта if v_c_rand1 == 100: player=Player() all_sprites.add(player) player_group.add(player) global all_pl all_pl += 1 # клоны спрайтов создаются исправно. Теперь нужна функция, убирающая # спрайт, если на нем нажать. # попытка сделать это через отловку событий event: if event.type == pygame.MOUSEBUTTONDOWN: m_pos_x,m_pos_y = pygame.mouse.get_pos() m_position=(m_pos_x,m_pos_y) if event.button == 1: if player.rect.collidepoint(m_position): print ('----')#индикатор, что команда сработала # как только происходит нажатие вылетает ошибка: # ~ Traceback (most recent call last): # ~ File "тут путь до файла", line 231, in <module> # ~ if player.rect.collidepoint(m_position): # ~ NameError: name 'player' is not defined
Отредактировано Rad.89 (Июнь 14, 2022 12:36:19)
Офлайн
568
self.image = player self.image = pygame.transform.scale(player,(25,25))
сократилдавайте без сокращений лучше, а то тут трудно понять, это автор по пояс деревянный или просто сократил неудачно
Офлайн
0
Приношу извинения, если код нафарширован визуальными ошибками. Пока только изучаю принцип работы. Если файлы нужны: могу скинуть.
import pygame import time import random import os import sys # ~ инициализация фона pygame.font.init() pygame.font.SysFont('arial', 15) # ~ инициализация звука pygame.mixer.init() # ~ инициализация дисплея pygame.display.init() # ~ окно: screen=pygame.display.set_mode((600,600)) # ~ фуллскрин: # ~ screen=pygame.display.set_mode((0, 0), pygame.FULLSCREEN) # ~ получение размеров дисплея sW, sH = screen.get_size() # ~ функция сохранения пути файлов для формовки ехе def resource_path(relative_path): try: base_path = sys._MEIPASS except Exception: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) game_folder = os.path.dirname(__file__) ######################################################################## # ~ загрузка звука kluv_sound = pygame.mixer.Sound("sound/1kick.mp3") s_back = pygame.mixer.Sound("sound/back_sound.mp3") chikin_voice = pygame.mixer.Sound("sound/chikin_voice.mp3") # ~ загрузка файлов изображений img_folder = os.path.join(game_folder, 'sprites') player_img1 = pygame.image.load(resource_path('sprites/chikin.png')) player_img2 = pygame.image.load(resource_path('sprites/chikin_3.png')) player_img3 = pygame.image.load(resource_path('sprites/chikin_2.png')) player_img_dead = pygame.image.load(resource_path('sprites/chikin_dead.png')) btn_food = pygame.image.load(resource_path('sprites/btn_food.png')) btn_energy = pygame.image.load(resource_path('sprites/btn_energy.png')) bg = pygame.image.load(resource_path('sprites/background.png')) player_poo_img = pygame.image.load(resource_path('sprites/poo.png')) # ~ вариант загрузки файла без дампирования для компиляции health_img = pygame.image.load(os.path.join(img_folder, 'hart1.png')) energy_img = pygame.image.load(os.path.join(img_folder, 'energy1.png')) food_img = pygame.image.load(os.path.join(img_folder, 'food.png')) # ~ Переменные: FPS=29 BLACK=(0,0,0) WHITE=(255,255,255) GRAY=(192,192,192) YELLOW=(255,255,0) Health_point=100 Energy_point=100 Food_point=100 hourse=0 years=0 seconds=0 pl_pos=dm=sW/2 pl_x=(sH/4)*3 speed=2 dm_time=dm_time_rand=0 t=0 n=0 scale=(80,80) s=1 v_c_rand1=0 v_c_rand2=200 all_player_poo = 0 f1 = pygame.font.Font((os.path.join(img_folder, 'vcrosdmonorusbyd.ttf')), 15) class Player (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = player_img1 self.image = pygame.transform.scale(self.image,(scale)) self.rect = self.image.get_rect() self.rect.center=((int(pl_pos)), (pl_x)) class Health (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = health_img self.image = pygame.transform.scale(health_img,(20,20)) self.rect = self.image.get_rect() self.rect.center=(10, 85) class Energy (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = energy_img self.image = pygame.transform.scale(energy_img,(20,20)) self.rect = self.image.get_rect() self.rect.center=(10, 55) class Food (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = food_img self.image = pygame.transform.scale(food_img,(20,20)) self.rect = self.image.get_rect() self.rect.center=(10, 25) class Btn_Food (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = btn_food self.image = pygame.transform.scale(btn_food,(50,50)) self.rect = self.image.get_rect() self.rect.center=(sW-50, sH/4) class Btn_Energy (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = btn_energy self.image = pygame.transform.scale(btn_energy,(50,50)) self.rect = self.image.get_rect() self.rect.center=(sW-50, sH/4+70) class Player_poo (pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = player_poo_img self.image = pygame.transform.scale(player_poo_img,(25,25)) self.rect = self.image.get_rect() self.rect.center=((pl_pos), (pl_x+15)) # ~ функция смены изображения во время передвижения def Anim_step(): if t > 2: player.image = player_img1 if n == 1: player.image = pygame.transform.flip(player_img1,False,False) else: player.image = pygame.transform.flip(player_img1,True,False) player.image = pygame.transform.scale(player.image,(scale)) else: player.image = player_img2 if n == 1: player.image = pygame.transform.flip(player_img2,False,False) else: player.image = pygame.transform.flip(player_img2,True,False) player.image = pygame.transform.scale(player.image,(scale)) # ~ функция клевания def Klyvanie(): if t > 2: player.image = player_img1 if n == 1: player.image = pygame.transform.flip(player_img1,False,False) else: player.image = pygame.transform.flip(player_img1,True,False) player.image = pygame.transform.scale(player.image,(scale)) else: player.image = player_img3 if n == 1: player.image = pygame.transform.flip(player_img3,False,False) else: player.image = pygame.transform.flip(player_img3,True,False) player.image = pygame.transform.scale(player.image,(scale)) # ~ функция смерти def Dead (): player.image = player_img_dead player.image = pygame.transform.scale(player.image,(scale)) # ~ функция появления какашек и их учет player_poo_group = pygame.sprite.Group() def player_poo_upd(): player_poo_pos = (pl_pos), (pl_x+15) player_poo=Player_poo() if v_c_rand1 == 100: all_sprites.add(player_poo) player_poo_group.add(player_poo) global all_player_poo all_player_poo += 1 ######################################################################## #инициализация и запуск программы pygame.init() s_back.play(-1) s_back.set_volume(0.008) chikin_voice.set_volume(0.05) clock=pygame.time.Clock() all_sprites = pygame.sprite.Group() player = Player() health = Health () energy = Energy () food = Food () btn_food = Btn_Food() btn_energy = Btn_Energy() all_sprites.add(player, health, energy, food, btn_food, btn_energy) running = True while running: clock.tick(FPS) # ~ выход из игры for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # ~ #управление с клавиатуры if event.type == pygame.KEYDOWN: # ~ if event.key == pygame.K_UP: # ~ if Health_point >0: # ~ Food_point=100 # ~ if event.key == pygame.K_DOWN: # ~ if Health_point >0: # ~ Energy_point=100 if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() # ~ управление с мыши: if event.type == pygame.MOUSEBUTTONDOWN: m_pos_x,m_pos_y = pygame.mouse.get_pos() m_position=(m_pos_x,m_pos_y) print (m_position) if event.button == 1: if btn_energy.rect.collidepoint(m_position): if Health_point >0: Energy_point=100 if btn_food.rect.collidepoint(m_position): if Health_point >0: Food_point=100 if player_poo.rect.collidepoint(m_position): print ('-----') # ~ #движение птички и разворот в направлении if pl_pos > dm+1: pl_pos -=speed pl_pos=int(pl_pos) Anim_step() player.rect.center=(pl_pos,pl_x) t+=1 if t >= 7: t = 0 n=1 # ~ модуль голоса курочки v_c_rand1=random.randint(0,v_c_rand2) if v_c_rand1 == 100: chikin_voice.play() v_c_rand2=200 if pl_pos < dm-1: pl_pos +=speed pl_pos=int(pl_pos) Anim_step() player.rect.center=(pl_pos,pl_x) t+=1 if t >= 7: t = 0 n=0 # ~ модуль голоса курочки v_c_rand1=random.randint(0,v_c_rand2) if v_c_rand1 == 200: chikin_voice.play() v_c_rand2=100 # Дефикация курочки player_poo_upd() # ~ #задержка на позиции if pl_pos == dm+1 or pl_pos == dm-1 or pl_pos == dm: dm_time+=1 t+=1 if t >= 10: t = 0 Klyvanie() #звук клевка if t == 9: kluv_sound.play() if dm_time >= dm_time_rand: dm = int(random.randint(20, sW)) dm_time_rand = int(random.randint(10, 70)) dm_time=1 # ~ #зависимость здоровья от еды и энергии # ~ снижение еды и энергии if Food_point>0: Food_point-=0.01 if Energy_point<=0: Energy_point=0 Food_point-=0.03 if Energy_point>0: Energy_point -=0.03 if Food_point <=0: Food_point=0 Energy_point -=0.05 # ~ Снижение здоровья if Food_point <= 1 and Energy_point <= 1: Health_point -=1 speed=1 elif Food_point <= 1 or Energy_point <= 1 or all_player_poo > 20: Health_point -=0.02 speed=1 # ~ #восстанавливаем здоровье if Food_point >90 and Energy_point >90 and Health_point <= 99: Health_point +=1 speed=2 # ~ #Птичка сдохла if Health_point < 1: Health_point=0 dm=pl_pos Dead() screen.blit(text5, (300, 20)) # ~ Счетчик прожитого времени if Health_point > 0: hourse=pygame.time.get_ticks()/10000 else: hourse = hourse if hourse > 365: years +=1 all_sprites.update() # отрисовка фона bg = pygame.transform.scale(bg,(sW,sH)) screen.blit(bg,(0,0)) # отрисовка текста на экране text1 = f1.render(("Жрачка: " + str(round(Food_point))), True,(180, 0, 0)) text2 = f1.render(("Энергия: " + str(round(Energy_point))), True,(YELLOW)) text3 = f1.render(("Здоровье: " + str(round(Health_point))), True,(180, 0, 0)) text4 = f1.render(("прожито :" + str(round(years)) + " лет и " + str(round(hourse)) + " дней "), True,(180, 0, 0)) text5 = f1.render("СДОХ =(" , True,(180, 0, 0)) if Health_point < 1: screen.blit(text5, (sW/2, sH/2)) screen.blit(text4, (300, 20)) else: screen.blit(text1, (25, 20)) screen.blit(text2, (25, 50)) screen.blit(text3, (25, 80)) screen.blit(text4, (sW/2, sH/30)) all_sprites.draw(screen) pygame.display.flip() pygame.quit()
Офлайн
0
и вот тут, когда нужно вызвать print ('—–') по щелчку мыши, вылезает ошибка:
# ~ управление с мыши: if event.type == pygame.MOUSEBUTTONDOWN: m_pos_x,m_pos_y = pygame.mouse.get_pos() m_position=(m_pos_x,m_pos_y) print (m_position) if event.button == 1: if btn_energy.rect.collidepoint(m_position): if Health_point >0: Energy_point=100 if btn_food.rect.collidepoint(m_position): if Health_point >0: Food_point=100 if player_poo.rect.collidepoint(m_position): ###Здесь пишет, что нет 'player_poo' print ('-----')
Офлайн
568
Rad.89
совершенно справедливо пишет
я тоже не нашел в какой строке кода определена переменная player_poo, её просто нет в вашем коде
Офлайн
0
файлы для “Курочки”:
https://disk.yandex.ru/d/edEgQKw7x1HaCg
Офлайн
0
FishHookок. Добавил. Но тогда у нас print('—-') работает по мышке только в точке первоначального появления курочки. На рандомно-возникшие продукты жизнедеятельности реакции нет. я уже 2й день голову ломаю(( Подскажите куда искать((
Rad.89совершенно справедливо пишетя тоже не нашел в какой строке кода определена переменная player_poo, её просто нет в вашем коде
Офлайн
568
Rad.89
вы сами программу писали, скажите честно?
Офлайн