2017-08-11 11 views
0

まず、船の写真を読み込み、その位置を初期化しました。その後、プログラムに弾丸を追加します。その後、どのようにデバッグしても、適切な場所に置くことができないことがわかりました。パイゲームの位置エラー

# 1. - import library 
import pygame,sys 
from pygame.locals import * 
from pygame.sprite import Sprite 

class Player(Sprite): 
    def __init__(self): 
     super().__init__() 
     self.image = pygame.image.load('image/pig.bmp') 
     self.rect = self.image.get_rect() 
     self.screen_rect = screen.get_rect() 


class Bullet(Sprite):   
    def __init__(self, player): 
     super().__init__() 
     self.rect = pygame.Rect(0, 0, bullet_width, bullet_height) 
     self.color = bullet_color 
     self.rect.center = player.rect.center 
     self.rect.left = player.rect.right 

# 2. - Initialize the game 
pygame.init() 
width,height = 800,600 
screen = pygame.display.set_mode((width,height)) 
keys = [False,False,False,False] 
playerpos = [0,288] 
bullet_width = 15 
bullet_height = 6 
bullet_color = (200, 200 , 0) 

player = Player() 
bullet = Bullet(player) 

grass = pygame.image.load("image/bg.bmp") 

# 4. - keep looping through 
while True: 
    # 5. - clear the screen before drawing it again. 
    screen.fill(0) 
    # 6. - Draw the screen elements. 
    screen.blit(grass,(0,0)) 
    screen.blit(player.image, playerpos) 

    pygame.draw.rect(screen, bullet.color, bullet.rect) 
    # 7. - update the screen 
    pygame.display.flip() 
    # 8. - loop through the events 
    for event in pygame.event.get(): 
     # check if the event is the X button. 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 

と弾丸が左上 enter image description here

に表示されますなぜ私は弾丸が船の右側に表示されますが、私は(x、y)を座標使用していない場合、私はそれをしないことを願ってどうしたらいいですか?

答えて

0

playerposを使用して、rectの位置と無関係な位置に船を描いています。あなたは弾丸がアクセスできるように、その矩形にリンクされているリンク船の位置を行う必要があります。

# 1. - import library 
import pygame,sys 
from pygame.locals import * 
from pygame.sprite import Sprite 

class Player(Sprite): 
    def __init__(self): 
     super().__init__() 
     self.image = pygame.image.load('image/pig.bmp') 
     self.image.fill((255, 0, 0)) 
     self.rect = self.image.get_rect() 
     self.screen_rect = screen.get_rect() 


class Bullet(Sprite): 
    def __init__(self, player): 
     super().__init__() 
     self.rect = pygame.Rect(0, 0, bullet_width, bullet_height) 
     self.color = bullet_color 
     self.rect.center = player.rect.center 
     self.rect.left = player.rect.right 

# 2. - Initialize the game 
pygame.init() 
width,height = 800,600 
screen = pygame.display.set_mode((width,height)) 
keys = [False,False,False,False] 

bullet_width = 15 
bullet_height = 6 
bullet_color = (200, 200 , 0) 

player = Player() 
player.rect.topleft = [0,288] 
bullet = Bullet(player) 

grass = pygame.image.load("image/bg.bmp") 

# 4. - keep looping through 
while True: 
    # 5. - clear the screen before drawing it again. 
    screen.blit(grass, (0, 0)) 
    # 6. - Draw the screen elements. 
    screen.blit(player.image, player.rect.topleft) 

    pygame.draw.rect(screen, bullet.color, bullet.rect) 
    # 7. - update the screen 
    pygame.display.flip() 
    # 8. - loop through the events 
    for event in pygame.event.get(): 
     # check if the event is the X button. 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 

表面のget_rect()方法は、表面が別のブリットされようとしている何のアイデアを持っていないためですそれで、それは(0、0)のようにその位置を与えます。 get_rect()は、サーフェスの寸法を取得する場合にのみ便利です。

関連する問題