2017-10-21 1 views
0

빈 공간에서 인터넷에 대한 많은 답변이 중력을 추가한다고 말하면서 어떻게 떨어질 지에 대한 몇 가지 메커니즘을 얻지 만, 그들이 어떻게 나에게 무리를 보여줬는지 이해할 수 없었다. 방정식.파이 게임에서 떨어지는 역학 (중력)

또한 이미지를 배경으로 설정하는 방법은 무엇입니까?

import pygame 


pygame.init() 

display_width = 2560 
display_height = 1440 

white = (255,255,255) 

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

filler = pygame.image.load('filleraftergimp.png') 


def fill(x,y): 
    gameDisplay.blit(filler,(x,y)) 


x = (display_width * 0.45) 
y = (display_height * 0.8) 

x_change = 0 
y_change = 0 

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

     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_a: 
       x_change = -5 
      elif event.key == pygame.K_d: 
       x_change = 5 
      elif event.key == pygame.K_s: 
       y_change = 5 
      elif event.key == pygame.K_w: 
       y_change = -5 

     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_a or event.key == pygame.K_d: 
       x_change = 0 
      if event.key == pygame.K_s or event.key == pygame.K_w: 
       y_change = 0 

    x += x_change 
    y += y_change 
    gameDisplay.fill(white) 
    fill(x,y) 


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


pygame.quit() 
quit() 
+0

한 번에 질문 하나만하십시오. 최근에 중력을 어떻게 구현할 수 있는지 설명했습니다 (https://stackoverflow.com/a/46659103/6220679). 예제에서 y_change + = 1과 같이 객체를 가속화하기 위해 각 프레임을 증가시킬 수 있습니다. – skrx

+0

다른 게시물에 대해 설명해 주시겠습니까? 검토 한 결과, 내가 한 일을 파악할 수 없었습니다. 나는 또한 y_change 값을 변경하려고 시도했지만 캐릭터가 느려졌다. 컨트롤 스크립트 부분에서 y_value를 변경하려고 했습니까? –

+0

제 질문에 답변 해 주셔서 감사합니다. –

답변

1

당신이 아래로 조금 더 빨리 개체를 이동할 수 있도록, 당신은 단지의 y_change 변수 각 프레임을 증가시킬 수있다 (2 차원 플랫 포머처럼) 게임에서 중력을 구현하려면 :

여기 내 소스 코드의 매번. 다음 예를 살펴보십시오.

import pygame as pg 


pg.init() 

LIGHTBLUE = pg.Color('lightskyblue2') 
DARKBLUE = pg.Color(11, 8, 69) 

display = pg.display.set_mode((800, 600)) 
width, height = display.get_size() 
clock = pg.time.Clock() 

player_image = pg.Surface((30, 60)) 
player_image.fill(DARKBLUE) 

x = width * 0.45 
y = 0 
x_change = 0 
y_change = 0 
on_ground = False 

# A constant value that you add to the y_change each frame. 
GRAVITY = .3 

done = False 
while not done: 
    for event in pg.event.get(): 
     if event.type == pg.QUIT: 
      done = True 
     elif event.type == pg.KEYDOWN: 
      if event.key == pg.K_a: 
       x_change = -5 
      elif event.key == pg.K_d: 
       x_change = 5 
      elif event.key == pg.K_s: 
       y_change = 5 
      elif event.key == pg.K_w: 
       if on_ground: # Only jump if the player is on_ground. 
        y_change = -12 
        on_ground = False 
     elif event.type == pg.KEYUP: 
      if event.key == pg.K_a and x_change < 0: 
       x_change = 0 
      elif event.key == pg.K_d and x_change > 0: 
       x_change = 0 

    # Add the GRAVITY value to y_change, so that 
    # the object moves faster each frame. 
    y_change += GRAVITY 
    x += x_change 
    y += y_change 
    # Stop the object when it's near the bottom of the screen. 
    if y >= height - 130: 
     y = height - 130 
     y_change = 0 
     on_ground = True 

    # Draw everything. 
    display.fill(LIGHTBLUE) 
    pg.draw.line(display, (0, 0, 0), (0, height-70), (width, height-70)) 
    display.blit(player_image, (x, y)) 

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

pg.quit()