2017-10-24 9 views
1

テキストを表示するプログラムを作成しました。「0 $」とクリックすると、お金が増えて新しいイメージが表示されます。Pygame:テキストサーフェスを別のサーフェスに連続的に埋め込む

あなたは写真を見て理解していない場合は、次の

image

あなたが最初の画像「0 $」が正しく表示されていることがわかり、私はマウスをクリックすると、最初のテキストが解消されないと新しいテキストがその上に描画されます。ここで

は私のコードです:

import pygame 
 
from pygame.locals import * 
 
    
 
#Initialisation de pygame 
 
pygame.init() 
 
taille_fenetre = (960,480) 
 
fenetre = pygame.display.set_mode(taille_fenetre,RESIZABLE) 
 
pygame.display.set_caption("Space Shooter") 
 
    
 
#COULEUR 
 
BLANC = (255,255,255) 
 
NOIR = ( 0, 0, 0) 
 
    
 
#Variables 
 
argent = 0 
 
    
 
#Font 
 
calibri_font = pygame.font.SysFont("Calibri",50) 
 
    
 
#Chargement image,surface 
 
lumiere = pygame.image.load("lumiere_tournante.png") 
 
fond = pygame.image.load("espace.jpg").convert() 
 
avion = pygame.image.load("avion_anim.png").convert_alpha() 
 
    
 
#Transfo sprite 
 
lumiere = pygame.transform.scale(lumiere,(500,550)) 
 
avion = pygame.transform.scale(avion,(1000,550)) 
 
    
 
#Texte 
 
argent_text_surface = calibri_font.render(str(argent) +" $",True,BLANC) 
 
    
 
#Rect 
 
argent_text_rect = argent_text_surface.get_rect() 
 
position_lumiere= rotate_lumiere = lumiere.get_rect() 
 
position_avion = avion.get_rect() 
 
    
 
#Position 
 
argent_text_rect.centerx =750 #en bas à droite 
 
argent_text_rect.centery =425 
 
    
 
#autre 
 
avion_vitesse = (0,0) 
 
    
 
#fonction 
 
def move(vitesse, acceleration): 
 
    vx, vy = vitesse 
 
    ax, ay = acceleration 
 
    vitesse = (vx + ax, vy + ay) 
 
    return vitesse 
 
    
 
    
 
#Boucle événementielle 
 
continuer = True 
 
while continuer: 
 
    #Limitations des fps 
 
    pygame.time.Clock().tick(90) 
 
    for event in pygame.event.get(): #On parcours la liste de tous les événements reçus 
 
     if event.type == QUIT: 
 
       continuer = False 
 
     elif event.type == KEYDOWN: 
 
      if event.key == K_RIGHT: 
 
       avion_vitesse = move(avion_vitesse, (10,0)) 
 
      elif event.key == K_LEFT: 
 
       avion_vitesse = move(avion_vitesse, (-10,0)) 
 
      if event.key == K_UP: 
 
       avion_vitesse = move(avion_vitesse, (0,-10)) 
 
      elif event.key == K_DOWN: 
 
       avion_vitesse = move(avion_vitesse, (0,10)) 
 
     elif event.type == KEYUP: 
 
      if event.key == K_RIGHT: 
 
       avion_vitesse = move(avion_vitesse, (-10,0)) 
 
      elif event.key == K_UP: 
 
       avion_vitesse = move(avion_vitesse, (0,10)) 
 
      elif event.key == K_DOWN: 
 
       avion_vitesse = move(avion_vitesse, (0,-10)) 
 
      elif event.key == K_LEFT: 
 
       avion_vitesse = move(avion_vitesse, (10,0)) 
 
    
 
     elif event.type == MOUSEBUTTONDOWN: 
 
      if event.button == 1: 
 
       argent +=10 
 
       argent_text_surface = calibri_font.render(str(argent) +" $",True,BLANC) 
 
    
 
    
 
     i=0 
 
     for loop in range(1): 
 
      rotate_lumiere = pygame.transform.rotate(lumiere, 1+i) 
 
      i+= 1 
 
    
 
    
 
    
 
    #Logique de jeu 
 
    vx, vy = avion_vitesse 
 
    position_avion.left += vx 
 
    position_avion.top += vy 
 
    
 
    
 
    #L'affichage du jeu 
 
    fond.blit(argent_text_surface, argent_text_rect) 
 
    fenetre.blit(fond, (0,0)) 
 
    fenetre.blit(rotate_lumiere, position_lumiere) 
 
    fenetre.blit(avion, position_avion) 
 
    #Rafraichissement 
 
    pygame.display.flip()

+1

画像を実際の投稿に追加してください。内部ネットワークの制限により、画像のリンクをたどることができません。 – Paul

+0

こんにちはポール、私は申し訳ありません:(私はサイトxで10の評判が必要です) –

+0

誰ですか? plz :::: –

答えて

0

私が正しくあなたを理解していれば、あなたはお金の背景画像/表面上にお金をブリットしたいです。元の背景のコピーを作成し、新しくレンダリングされたテキストをblitしなければなりません。そうしないと、同じ元のサーフェス上にさらに多くのテキストサーフェスがblitされます。

この例では、私はrender_money関数でこれを行い、現在の金額のコピー(money_surf)を返します。次に私はそれをblitするmain関数の変数money_surfに割り当てます。ユーザーが画像をクリックすると、マウスの位置がmoney_rectに衝突するかどうかを確認し、金額を増やしてお金の表面を再描画します。

import pygame as pg 


pg.init() 
CALIBRI_FONT = pg.font.SysFont('Calibri', 50) 
# The money background surface. 
# Replace these two lines with your loaded image. 
MONEY_SURF = pg.Surface((150, 70)) 
MONEY_SURF.fill((0, 60, 120)) 


def render_money(money): 
    """Blit the money onto a copy of the money background image.""" 
    money_text_surf = CALIBRI_FONT.render(str(money)+' $', True, (230, 250, 250)) 
    # Make a copy of your background image, so that the original is not modified. 
    money_surf = MONEY_SURF.copy() 
    money_surf.blit(money_text_surf, (10, 10)) 
    return money_surf 


def main(): 
    screen = pg.display.set_mode((640, 480)) 
    clock = pg.time.Clock() 

    money = 0 
    money_surf = render_money(money) 
    # This rect serves as the blit position and for the collision detection. 
    money_rect = money_surf.get_rect(topleft=(100, 200)) 

    done = False 

    while not done: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       done = True 
      elif event.type == pg.MOUSEBUTTONDOWN: 
       # Check if the rect collides with the mouse pos (event.pos). 
       if money_rect.collidepoint(event.pos): 
        money += 10 
        # Now re-render the money surface. 
        money_surf = render_money(money) 

     screen.fill((30, 30, 30)) 
     screen.blit(money_surf, money_rect) 

     pg.display.flip() 
     clock.tick(60) 


if __name__ == '__main__': 
    main() 
    pg.quit() 
関連する問題