2014-01-09 68 views
0

我要定義一個函數來設定速度,以人物在我比賽的節奏,我知道有這個公式:設置字符

rate * time = distance 

1. Establish a rate of movement in whatever units of measure you want (such as pixels per millisecond). 
2. Get the time since the last update that has passed (elapsed time). 
3. Establish the direction of movement . 

我已經tryied定義它實現方法這個:

def speed(self, speed): 
    clock = pygame.time.Clock()  
    milliseconds = clock.tick(60) # milliseconds passed since last frame 
    seconds = milliseconds/1000.0 
    speed = seconds * (self.dx+self.dy) 

但是當我調用這個方法來改變我角色的速度時,沒有任何反應。

有什麼建議嗎?

+0

你對速度做了什麼?你在哪裏調用這個函數? –

+0

你似乎忘了添加'return speed'。 –

+0

這是爲了*設定*速度還是要*取得它?爲什麼它有一個「速度」參數? – jonrsharpe

回答

1

您需要使用self關鍵字,以便在方法中設置類屬性。但在你的方法中,你使用速度作爲參數,我不相信你是如何使用它的。

def speed(self, speed): 
    clock = pygame.time.Clock()  
    milliseconds = clock.tick(60) # milliseconds passed since last frame 
    seconds = milliseconds/1000.0 
    speed = seconds * (self.dx+self.dy) 

該方法需要一定的速度,然後將其設置爲等於某個值,然後超出範圍而無需進行更改。與你將一個方法來設置對象speed屬性:

def set_speed(self): 
    clock = pygame.time.Clock()  
    milliseconds = clock.tick(60) # milliseconds passed since last frame 
    seconds = milliseconds/1000.0 
    self.speed = seconds * (self.dx+self.dy) 

self是從裏面它的一個方法引用的對象的方式。方法之外的self.speed = 10等同於做my_object.speed = 10。使用這種方法:

class Character: 
    def __init__(): 
     self.speed = 0 # your character class needs to have a speed attribute somewhere 

hero = Character() # creates an object that represents your character 
hero.set_speed() # call the method to set the speed attribute of the character class 
+0

這不改變字符的速度 –

+0

更新了代碼。我第一次誤讀了OP。 – IanAuld

+0

如果你不能在內部傳遞速度,你爲什麼要調用hero.set_speed()? –

0

我不知道究竟如何你擁有了一切成立,但在這裏是用2元組(x, y)positionspeed(我想你可能有self.x, self.yself.position和粗糙例如self.dx, self.dyself.speed,但原理是一樣的):

def Character(object): 

    def __init__(self, position): 
     self.position = position # e.g. (200, 100) 
     self.speed = (0, 0) # start stationary 

    def move(self, elapsed): 
     """Update Character position based on speed and elapsed time.""" 
     #       distance = time * rate 
     # position =  old position + distance 
     self.position = (int(self.position[0] + (elapsed * self.speed[0])), 
         int(self.position[1] + (elapsed * self.speed[1]))) 

請注意,您並不需要制定出多遠Character宜遊對於給定速度,當你設置self.speed,正當您嘗試moveCharacter。您可以直接訪問character.speed;具有「setter」方法(例如set_speed(self, speed))是不擴張的。現在

你可以稱之爲:

hero = Character(start_loc) 
framerate = 60 
clock = pygame.time.Clock() 
... 
while True: # main gameplay loop 
    elapsed = clock.tick(60) # update world time and get elapsed 
    ... 
    hero.speed = (2, 0) # travelling horizontally in the positive x-direction 
    hero.move(elapsed) # update the hero's position 

請注意,這裏的速度將是每毫秒像素爲單位。