2017-12-26 15 views
0

私のPythonゲームに問題があります。これは私の最初のプロジェクトです。私はエラーが発生しています(TypeError:integer argument expected、float)。ユーザー定義の関数を挿入すると、これが始まります。どのようにこの問題を解決するか、またはSuperMarioイメージをクラスで円形のオブジェクトを撮影させる。感謝:)TypeError:整数の引数が必要です。浮動小数点型、Python 3.6.3 with pygame

import pygame 
import time 

pygame.init() 

display_height = 600 
display_width = 800 

white = (255,255,255) 

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

bg = pygame.image.load('background.jpg') 
bg = pygame.transform.scale(bg,(800, 600)) 

Img_SuperMario = pygame.image.load('SuperMario.png') 
SuperMario_width = 611 
SuperMario_height = 611 
Img_SuperMario = pygame.transform.scale(Img_SuperMario, (100, 100)) 

def shoot(xshoot): 
    while xshoot < display_width: 
     pygame.draw.circle(gameDisplay, white, (xshoot,50), 20 ,0) 
     xshoot += 10 

def SuperMario(x,y): 
    gameDisplay.blit(Img_SuperMario,(x,y)) 

def gameloop(): 

x = (display_width * 0.1) 
y = (display_height * 0.1) 

x_change = 0 
y_change = 0 

game_exit = False 

while not game_exit: 

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

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       x_change = -5 
      elif event.key == pygame.K_RIGHT: 
       x_change = 5 
      elif event.key == pygame.K_UP: 
       y_change = -5 
      elif event.key == pygame.K_DOWN: 
       y_change = 5 

     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_DOWN or event.key == pygame.K_UP: 
       x_change = 0 
       y_change = 0 


    if x == display_width - 100 or x == 0: 
     x_change = 0 

    if y == (display_height - 100) or y == 0: 
     y_change = 0 


    x += x_change 
    y += y_change 
    xshoot = x 

    gameDisplay.fill(white) 
    gameDisplay.blit(bg,(0,0)) 

    if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_SPACE: 
       while xshoot < display_width: 
        shoot(x) 
    SuperMario(x,y) 

    pygame.display.update() 
    clock.tick(60) 

gameloop() 
pygame.quit() 
quit() 
+2

次回エラーが発生する行を組み込むようにしてください。エラーをトレースするのが簡単になります。 – Tai

+1

は常に問題のフルエラーメッセージ(トレースバック)を(スクリーンショットではなくテキストとして)入れます。その他の有用な情報があります。 – furas

+0

エラーメッセージはどこに問題があるのか​​を表示し、 'print()'と 'print(type(...))'を使って値と型を変数でチェックして 'float'値を持つ変数を見つけ、 'int()'を使うべきです。 – furas

答えて

0

x = int((display_width * 0.1)) y = int((display_height * 0.1)) 多分動作します、intに解析してみてください。

1

関数は整数のみを受け入れますが、x変数は浮動小数点数です。例えば、shoot関数内の整数にxshoot変数を変換します

pygame.draw.circle(gameDisplay, white, (int(xshoot), 50), 20 ,0) 

あなたはまた、メインループとshoot機能でwhile xshoot < display_width:ループを変更する必要があるように見えますが、私はあなたが何をしたいかわかりません達成する。

関連する問題