2015-07-17 2 views
0

Я бы просто хотел прочитать это, сказав, что я действительно искал эту проблему, но у всех, у кого, похоже, была аналогичная проблема, найдено решение, которое не работает Я работаю для меня. Я использую python 3.4.3 64 бит и pygame 1.9.2a и получаю ошибку, указанную в названии. Мой код выглядит следующим образом на данный момент:TypeError: аргумент 1 должен быть pygame.Surface, а не функция

import pygame 

pygame.init() 

display_width = 800 
display_height = 600 

black = (0,0,0) 
white = (255,255,255) 
red = (200,0,0) 
bright_red = (255,0,0) 
green = (0,200,0) 
bright_green = (0,255,0) 
blue = (0,0,200) 
bright_blue = (0,0,255) 

gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('Le jeux') 
clock = pygame.time.Clock() 

thatonething = pygame.image.load('thatonething.png') 

def thatonething(x,y): 
    gameDisplay.blit(thatonething,(x,y)) 

x = (display_width * 0.45) 
y = (display_height * 0.8) 

crashed = False 

while not crashed: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      crashed = True 
     print(event) 

    gameDisplay.fill(white) 
    thatonething(x,y) 
    pygame.display.update() 
    clock.tick(30) 

pygame.quit() 
quit() 

Бег это дает мне это:

Traceback (most recent call last): 
    File "C:/Users/Windows 8/Desktop/Scripts/New folder/Main.py", line 39, in <module> 
    thatonething(x,y) 
    File "C:/Users/Windows 8/Desktop/Scripts/New folder/Main.py", line 24, in thatonething 
    gameDisplay.blit(thatonething,(x,y)) 
TypeError: argument 1 must be pygame.Surface, not function 

Заранее спасибо, и извините, если это звучит как глупый вопрос.

Редактировать: Это стало возможным благодаря Брайану. Для тех, кто с подобным вопросом, который мог бы это увидеть позже, скорректированная версия выглядит следующим образом:

import pygame 

pygame.init() 

display_width = 800 
display_height = 600 

black = (0,0,0) 
white = (255,255,255) 
red = (200,0,0) 
bright_red = (255,0,0) 
green = (0,200,0) 
bright_green = (0,255,0) 
blue = (0,0,200) 
bright_blue = (0,0,255) 

gameDisplay = pygame.display.set_mode((display_width,display_height)) 
pygame.display.set_caption('Le jeux') 
clock = pygame.time.Clock() 

thatonething = pygame.image.load('thatonething.png') 

def somefunction(x,y): 
    gameDisplay.blit(thatonething,(x,y)) 

x = (display_width * 0.45) 
y = (display_height * 0.8) 

crashed = False 

while not crashed: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      crashed = True 
     print(event) #This creates a log of the events that pygame has been handling. 

    gameDisplay.fill(white) 
    somefunction(x,y) 
    pygame.display.update() #Updates everything "pygame.display.flip()" updates just one thing 
    clock.tick(30) #This defines the refresh rate i.e. 30 in brackets gives 30 fps 

pygame.quit() #Closes the game (with the next line) 
quit() 

Ключевым отличием является то, что «thatonething» больше не имя функции.

ответ

1

У вас есть функция:

def thatonething(x,y): 
    gameDisplay.blit(thatonething,(x,y)) 

Когда вы gameDisplay.blit(thatonething,(x,y)), это, интерпретирующих Params как 1: thatonething, 2: (x,y).

Возможно, вы захотели положить что-то еще в качестве входного сигнала gameDisplay.blit, потому что, даже если вы удалите запятую, вы получите бесконечную рекурсию.

Я не уверен, что делает эта функция, но вы можете захотеть перепроектировать ее.

+0

Я недавно начал просматривать [этот путеводитель по пигме] (https://www.youtube.com/watch?v=ZFo4mtLJEWs), и он, похоже, сработал для него (пропустите 18:48, когда он правильно его запустит) , В моей голове такой макет кажется логичным, и я не могу придумать, что бы я заменил. –

+1

Ваша проблема в том, что вы повторно используете имя 'thatonething', рассмотрите возможность использования разных имен для функции и переменной (изображения). Это решило бы проблему. – Brian

+0

Вы правы. Я изменил имя функции на «somefunction», и она работает правильно. Большое спасибо. –

Смежные вопросы