2016-07-17 5 views
1

나는 내 게임을위한 물리 엔진을 만들고 싶었고, 먼저 힘을가 져야한다고 결정했다. 파이썬에서 파이 게임을 사용하고 있습니다.Python Pygame forces

예를 들어, 개체에 작용하는 특정 크기의 힘을 프로그래밍 할 수 있기를 원합니다. 나는 이것을 할 어떤 방법을 생각할 수 없었다. 기본적인 전략을 세운 후에는 힘의 힘을 빼고 모든 종류의 다양한 속성을 추가하는 것이 쉬워야합니다. 지금 내 소스 코드는 다음과 같습니다.

import pygame 

pygame.init() 

display_width = 800 
display_height = 600 

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

x = display_width/2 
y = display_height/2 


gameExit = False 

def force(): 
    # force function 
    # Code here 

y_change = 0 
x_change = 0 

while not gameExit: 



    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      quit() 
     elif event.type == pygame.KEYDOWN: # check for key presses 
      if event.key == pygame.K_LEFT: # left arrow turns left 
       x_change = -10 
       y_change = 0 
      elif event.key == pygame.K_RIGHT: # right arrow turns right 
       x_change = 10 
       y_change = 0 


    y += y_change 
    x += x_change 

    print(x, y) 

    gameDisplay.fill((255, 255, 255)) 
    pygame.draw.rect(gameDisplay, (255, 0, 0), [x, y, 30, 30]) 
    pygame.display.update() 

    clock.tick(25) 

pygame.quit() 
quit() 

현재로서는 왼쪽 및 오른쪽으로 움직이는 빨간색 사각형입니다. 화살표 키를 누르고 있으면 움직이며, 놓으면 멈 춥니 다. 나는 이벤트에서 부울을 사용하여 시도했지만 작동하지 않는 것 같습니다.

간단한 중력 요소를 구현하고 싶습니다.

독서에 감사드립니다.

답변

1

내가 볼 수있는 몇 가지 점이 있습니다. 첫째, 키를 누르고있는 동안 효과가 발생하기를 원한다면 누르지 말고 해당 키가 눌려져 있는지 쿼리해야합니다. KEYDOWN 이벤트를 무시하고 대신 http://www.pygame.org/docs/ref/key.html#pygame.key.get_pressed 을 사용하십시오. 둘째, 위치, 속도 등을위한 라이브러리 클래스를 정의하거나 사용해야합니다. 그러면 구체적인 작업 세트가 제공됩니다.

는 거기에서 기본적인 아이디어는, 키를 쿼리 속도로 기존 위치를 업데이트하여 가속 된 속도 설정 위치를 업데이트하여이 업데이트의 것과 가속과 중력, 설정 속도를 설정하고, 영원히 반복하는 것입니다.

0

힘을 가하면 힘 방향의 질량으로 대상에 가속도가 추가됩니다.

우선, 개체의 질량, x 및 y 속도 및 x 및 y 합력 구성 요소에 대한 변수를 만드는 것이 좋습니다. 힘이 객체에 추가되면 x 및 y 구성 요소의 측면에서 더 쉽게 추가 할 수 있습니다 (힘을 각도 및 크기로 정의하려는 경우 opposite = sin(angle) * hypotenuseadjacent = cos(angle) * hypotenuse을 사용하여 구성 요소로 힘을 분할 할 수 있음). 조심스럽게 - math 모듈은 라디안을 사용하고 pygame은 각도를 사용합니다.

(즉 당신의 x_changey_change의) 당신은 객체의 x 및 y 가속도를 찾을 force = mass * acceleration을 사용하고 개체의 x와 y 속도에 대한 변경 사항을 적용 할 수 있습니다, 화면에 힘을 적용합니다. 그런 다음 대상의 위치에 x 및 y 속도를 적용합니다.

픽셀 및 프레임 대신 미터 및 초 단위로 작동 시키려면 전환을 수행해야합니다. 즉, clock.tick 값을 사용하여 초당 프레임 수를 계산하면 미터당 픽셀 값을 구성 할 수 있습니다.

중력의 경우, 적용되는 힘 = 질량 * 중력장 (지구상의 중력장 강도는 9.81 뉴톤/킬로그램 임). 이 수식을 사용하면 다른 힘과 같이 객체에 중력을 추가 할 수 있습니다. 중력 가속도는 항상 다른 수직력이 적용되고 있지 않은 경우 유용 할 수 있지만 중력장 강도와 동일합니다.