2015-01-21 4 views
0

Я разрабатывающих Kit игры Sprite с помощью Swift, свободно следуя учебники Ray Wenderlich нашел here и here, и включающие в SKTUtils module, что позволяет легко сложение/умножение/деление и т.д. из CGPoint с.Умножение CGPoints с использованием SKTUtils

Проблема, которую я нахожу, заключается в том, что вся онлайн-документация относится к более старой версии модуля Objective-C, тогда как код в Github был переписан для использования Swift, и нет соответствующих руководств по использованию.

В учебнике (написаны с использованием Objective-C) указывает, что следующий код должен работать:

- (void)update:(NSTimeInterval)delta { 
    CGPoint gravity = CGPointMake(0.0, -450.0); 
    CGPoint gravityStep = CGPointMultiplyScalar(gravity, delta); 
    self.velocity = CGPointAdd(self.velocity, gravityStep); 
    CGPoint velocityStep = CGPointMultiplyScalar(self.velocity, delta); 
    self.position = CGPointAdd(self.position, velocityStep); 
} 

Который, в свободном переводе на Свифта, приравнивается к:

func update(delta:NSTimeInterval) { 
    let gravity:CGPoint = CGPointMake(0.0, -450.0); 
    var gravityStep:CGPoint = CGPointMultiplyScalar(gravity * delta) 
    self.velocity = self.velocity + gravityStep; 
    let velocityStep:CGPoint = CGPointMultiplyScalar(self.velocity, delta) 
    self.position = self.position + velocityStep; 
} 

Однако функция CGPointMultiplyScalar было изменено на *. Там нет сопроводительной документации, что я могу найти о том, как реализовать редеет, и мои подходы не работают:

func update(delta:NSTimeInterval) { 
    ... 
    var gravityStep:CGPoint = CGPoint(gravity * delta); // nope 
    var gravityStep:CGPoint = gravity * delta; // nope 
    ... 
} 

Кто-нибудь там есть опыт работы с этим и может сказать мне, где я неправильно?

ответ

2

Расширения CGPoint выглядит следующим образом:

public func * (point: CGPoint, scalar: CGFloat) -> CGPoint { 
    return CGPoint(x: point.x * scalar, y: point.y * scalar) 
} 

Скалярное параметр нужно CGFloat, но вы пытаетесь умножить его с NSTimeInterval, и так как нет ни одного неявного преобразования, вы должны сделать

var gravityStep:CGPoint = gravity * CGFloat(delta) 

, чтобы заставить его работать.

+0

Отлично! Большое спасибо, я рвал волосы! – MassivePenguin

+0

Добро пожаловать, я рад, что смог помочь :) –

Смежные вопросы