2015-11-18 68 views
2

我正在使用PyGame創建自動移動單位。 這些單位可以給兩個元素(x, y)類型元組的目的地和單位有一個靜態速度。計算自上次打勾後的x和y座標變化

我打電話給units.update(dt),其中dt是自上次更新以來的時間(以毫秒爲單位)。我需要計算自上次更新以來單位已經移動了多少。這是我的Unit類:

class Unit(pygame.sprite.Sprite): 
    def __init__(self, image, speed): 
     self.image = pygame.image.load(image) 
     self.rect = self.image.get_rect() # This rect contains x and y for the Unit 
     self.speed = speed 
     self.destination = None 

    def update(self, dt): 
     if self.destination is not None and self.speed > 0: 
      dist = self.speed * dt 

這樣我可以得到hypotenusa(dist),但我需要self.rect.xself.rect.y各個方向。如何從dist獲得dxdy

而且,這裏是我的main.py

import unit 
import pygame 

pygame.init() 
display = pygame.display.set_mode((960, 720)) 
units = pygame.sprite.Group() 
my_unit = unit.Unit('my_image.png', 3) 
units.add(my_unit) 
my_unit.destination = (150, 150) 
clock = pygame.time.Clock() 

running = True 
while running: 
    dt = clock.tick(30) 
    units.update(dt) 
    display.fill((0, 0, 0)) 
    units.draw(display) 
    pygame.display.update() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 

回答

-1

你會得到大如圖像的矩形。這個矩形將始終從0開始,寬度爲0。和高度與圖像大小相同。因此,通過這些信息,您可以自行計算dx和dy。不幸的是,沒有像get_rect_x()這樣的功能。

+0

呃......顯然我會從'(0,0)'中多次移動單位,我只是不想在這裏發佈一個完整的遊戲。我真的不知道如何計算它們*給定的'dt' *。幸運的是有'rect.x'和'rect.y' –

0

您可以在Unit類中添加一個變量,將當前位置存儲爲元組,就像方向一樣。我猜它會在(0,0)初始化?

每更新一次,計算從當前位置到目的地的角度。一些基本的三角學會給你dx/dy,正如你所說你已經有了斜邊。
我無法幫助你更多地瞭解這個部分,因爲它取決於你的單位如何移動(對角線),速度代表什麼,... 不要忘記在之後更新當前位置。