我想定义一个函数来设置游戏中的角色速度,我知道有一个公式:
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 .
我试图定义一个实现这个的方法:
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 :(得分: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
答案 1 :(得分:0)
我不确切知道你如何设置所有内容,但这是一个粗略的例子,使用(x, y)
position
speed
和self.x, self.y
(我想你可能会{我的self.position
self.dx, self.dy
和我self.speed
的{{1}} {1}},但原则相同):
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
在给定速度下应该走多远,就在您尝试{{ 1}} move
。您可以直接访问Character
;使用“setter”方法(例如character.speed
)是unpythonic。
现在你可以这样称呼:
set_speed(self, speed)
请注意,此处的速度将以每毫秒像素为单位。