2017-09-28 17 views
1

我是python和pygame的初學者。玩這款遊戲的相機會有什麼好的濃縮方式? (隨着玩家總是在屏幕中間)我已經嘗試過很多東西,但他們只是不按我想要的方式工作。再次,我是新的,所以如果這是一個愚蠢的問題,讓我知道。在此先感謝任何一個無法回答的人。通過我的播放器模型,攝像機可以移動到什麼程度?

import pygame 
import random 
import time 

pygame.init() 

display_width = 1200 
display_height = 1000 

black = (0,0,0) 
white = (255,255,255) 
red = (255,0,0) 
green = (0,255,0) 
blue = (0,0,255) 


player_width = 24 
player_height = 42 

gameDisplay = pygame.display.set_mode((display_width, display_height)) 
pygame.display.set_caption('Random RPG') 
clock = pygame.time.Clock() 
PMF = ("PlayerModel_Forward.png") 

playerSprt = pygame.image.load(PMF) 

def player(x,y): 
    gameDisplay.blit(playerSprt,(x,y)) 

def enemy1(enemy1x, enemy1y, enemy1w, enemy1h, color): 
    pygame.draw.rect(gameDisplay, color, [enemy1x, enemy1y, enemy1w, enemy1h]) 

def death(): 
    message_display('Game Over') 

    def text_objects(text, font): 
     textSurface = font.render(text, 
           True, black) 
    return textSurface, textSurface.get_rect() 

def message_display(text): 
    largeText = pygame.font.Font('freesansbold.ttf', 115) 
    TextSurf, TextRect = text_objects(text, largeText) 
    TextRect.center = ((display_width/2), (display_height/2)) 
    gameDisplay.blit(TextSurf, TextRect) 

    pygame.display.update() 
    time.sleep(2) 
    pygame.display.update() 
    game_loop() 

def frames(fps): 
    font = pygame.font.SysFont(None, 25) 
    text = font.render(str(fps), True, black) 
    gameDisplay.blit(text,(0,0)) 

def xcoord(x_coord): 
    font = pygame.font.SysFont(None, 25) 
    text = font.render((str(x_coord)), True, black) 
    gameDisplay.blit(text,(display_width/2,0)) 

def ycoord(y_coord): 
    font = pygame.font.SysFont(None, 25) 
    text = font.render((str(y_coord)), True, black) 
    gameDisplay.blit(text,(display_width/2,25)) 

def text_objects(text, font): 
    textSurface = font.render(text, True, black) 
    return textSurface, textSurface.get_rect() 

def game_loop(): 
    x = (display_width/2) 
    y = (display_height/2) 

    x_change = 0 
    y_change = 0 

    enemy1_startx = random.randrange(0, display_width) 
    enemy1_starty = random.randrange (0, display_height) 
    enemy1_x_change = random.randrange (-5,5) 
    enemy1_y_change = random.randrange (-5,5) 
    enemy1_width = 100 
    enemy1_height = 100 



    gameExit = False 
    while not gameExit: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       gameExit = True 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_LEFT: 
        x_change = -5 
       elif event.key == pygame.K_RIGHT: 
        x_change = 5 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
        x_change = 0 

      if event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_DOWN: 
        y_change = 5 
       elif event.key == pygame.K_UP: 
        y_change = -5 
      if event.type == pygame.KEYUP: 
       if event.key == pygame.K_DOWN or event.key == pygame.K_UP: 
        y_change = 0 

     x+= x_change 
     y+= y_change 

     Fps = 30 

     #Logic 
     if gameExit == True: 
      pygame.quit() 
      quit() 

     if x > display_width - player_width or x < 0: 
      death() 

     if y > enemy1_starty and y < enemy1_starty + enemy1_width or y+player_width > enemy1_starty and y + player_width < enemy1_starty + enemy1_width: 

      if x > enemy1_startx and x < enemy1_startx + enemy1_width or x+player_width > enemy1_startx and x + player_width < enemy1_startx + enemy1_width: 

       death() 
       time.sleep(2) 
       game_loop() 


     if enemy1_starty > display_height or enemy1_starty < 0 or enemy1_startx > display_width or enemy1_startx < 0: 
      enemy1_starty = random.randrange (0, display_height) 
      enemy1_startx = random.randrange(0, display_width) 
      enemy1_x_change = random.randrange (-5,5) 

      enemy1_y_change = random.randrange (-5,5) 




     #Drawing: 
     gameDisplay.fill(black) 
     player(x,y) 
     enemy1 (enemy1_startx, enemy1_starty, enemy1_width, enemy1_height, red) 
     enemy1_starty += enemy1_y_change 
     enemy1_startx += enemy1_x_change 
     frames((Fps)) 
     xcoord (x) 
     ycoord (y) 

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

game_loop() 
pygame.quit() 
quit() 
+0

在我已經放棄了早在我的多次嘗試,我曾治療過的相機作爲自己的class,所以你有'camera.x'和'camera.y'。顯示內容的代碼是基於攝像機偏移的,所以如果攝像機處於'(20,0)',那麼'(0,0)'處的內容在'(-20,0)'處繪製。 – Peter

回答

0

你做得很好!我認爲你可能採取了錯誤的方法,因爲不是實際移動相機(這實際上很難實現),而是通過移動屏幕上的其他元素來達到相同的效果。因此,當用戶按下播放器的權利,而不是向右移動,移動的敵人留下!:相關代碼:

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      gameExit = True 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       enemy1_startx = enemy1_startx+10 
      elif event.key == pygame.K_RIGHT: 
       enemy1_startx = enemy1_startx-10 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
       x_change = 0 

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_DOWN: 
       enemy1_starty = enemy1_starty - 10 
      elif event.key == pygame.K_UP: 
       enemy1_starty = enemy1_starty + 10 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_DOWN or event.key == pygame.K_UP: 
       y_change = 0 
相關問題