2017-02-05 8 views
0

私はパイゲームには非常に新しく、基本的なタワー防衛ゲームを作ろうとしていました。私は周りを見回しましたが、使用している画像から複数のスプライト(塔)を作成する方法を理解することはできません。ここにTDのゲームのための私のコードです。しかし、私はスプライト(タワー)を複数作成する方法を知らない。pygameが複数のスプライトを作成する

import pygame 
import time 
import sys 
import os 
pygame.init() 

WINDOWWIDTH = 1800 
WINDOWHEIGHT = 1800 
os.environ['SDL_VIDEO_WINDOW_POS'] = '%i,%i' % (0,30) 
screen = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT)) 
background_colour = (63,200,70) 

GAMETITLE = "Tower Defence" 
font = pygame.font.SysFont(None, 100) 
def balanceText(balance): 
    screen_text = font.render(str(balance), True, (255,255,255)) 
    screen.blit(screen_text, [1640,0]) 

def main(): 
    balance = 100 


    pygame.display.set_caption(GAMETITLE) 
    clock = pygame.time.Clock() 

    spritegroup =pygame.sprite.Group() 
    sprite =pygame.sprite.Sprite() 
    tower = sprite.image = pygame.image.load("tower.png") 

    sprite.image = tower 
    sprite.rect = sprite.image.get_rect() 

    drawTower = False 
    towerPlaced = False 

    bulletX = 250 
    sprite.add(spritegroup) 

    while True: 


     screen.fill(background_colour) 
     pygame.draw.rect(screen, (255,255,255), ((0, 100), (1100, 90))) 
     pygame.draw.rect(screen, (255, 255,255), ((1010, 100), (100, 600))) 
     pygame.draw.rect(screen, (255,255,255), ((1010, 700), (2400, 90))) 
     pygame.draw.rect(screen, (139,69,19), ((1600, 0), (2400, 18000))) 
     pygame.draw.rect(screen, (128, 128,128), ((300,250), (140,140))) 
     pygame.draw.rect(screen, (128, 128,128), ((600,250), (140,140))) 
     pygame.draw.rect(screen, (128, 128,128), ((800,700), (140,140))) 
     pygame.draw.rect(screen, (128, 128,128), ((1150,500), (140,140))) 
     balanceText(balance) 
     if drawTower: 
      spritegroup.draw(screen) 
     pygame.display.update() 
     clock.tick(30) 


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

       if pygame.mouse.get_pressed()[0] and towerPlaced == False: 

        mousePos = pygame.mouse.get_pos() 
        if mousePos[0] > 300 and mousePos[0] < 450 and mousePos[1] > 250 and mousePos[1] < 400: 
         drawTower = True 
         sprite.rect.center = (370, 320) 
         towerPlaced = True 
         balance -= 50 

        elif mousePos[0] > 600 and mousePos[0] < 750 and mousePos[1] > 250 and mousePos[1] < 400: 
         drawTower = True 
         sprite.rect.center = (670, 320) 
         towerPlaced = True 
         balance-= 50 

        elif mousePos[0] > 800 and mousePos[0] < 950 and mousePos[1] > 700 and mousePos[1] < 850: 
         drawTower = True 
         sprite.rect.center = (870, 770) 
         towerPlaced = True 
         balance-= 50 

        elif mousePos[0] > 1150 and mousePos[0] < 1300 and mousePos[1] > 500 and mousePos[1] < 650: 
         drawTower = True 
         sprite.rect.center = (1220, 570) 
         towerPlaced = True 
         balance-= 50 

      elif event.type == pygame.QUIT: 
       pygame.display.quit() 



main()  

ありがとう!コードがちょっと面倒だと分かっています。

答えて

0

Spriteクラスを適切に使用する必要があります。これを行うには、このように、pygame.sprite.Spriteのサブクラスとして、あなたのスプライトを定義する必要があります。

class Tower(pygame.sprite.Sprite): 
    def __init__(self, x, y): 
     pygame.sprite.Sprite.__init__(self) 
     self.image = tower_img 
     self.rect = self.image.get_rect() 
     self.rect.center = (x, y) 

その後、あなたは別のインスタンスを作成し、グループに追加することで、タワーにあなたが好きな時間を生むことができます:

new_tower = Tower(370, 320) 
spritegroup.add(new_tower) 

私は非常にスプライトのドキュメントを見てお勧めします: http://www.pygame.org/docs/ref/sprite.html - 良い情報の多くはそこにあります。 Pygameでスプライトをどのように使うかについては、多くの良いチュートリアルがあります。ここに私が書いたリンクがあります: http://kidscancode.org/blog/2016/08/pygame_1-2_working-with-sprites/

関連する問題