utilizzando il kit di Sprite Sto cercando di impostare un SKPhysicsBody
muoversi secondo un dato angolo, così per esempio se si voleva lo sprite di viaggiare a destra si dovrebbe specificare 1.571 radianti. Per trasformare l'angolo specificato in una velocità, sto usando il metodo qui sotto per convertire i radianti in un CGVector
. La versione ORIGINALE che ho implementato dalla memoria ha lo strano effetto di compensare tutti gli angoli di 90 gradi. (Cioè se 0 gradi è usato le mosse sprite destra (proprio come si farebbe se si specificati 90degrees)Conversione angolo radianti a CGVector
. Domanda:
Ho fissato questo nella nuova versione scambiando le assegnazioni dx
e dy
La mia domanda è perché questo accade, devo sbagliare in originale (non vi sembrano essere altri facendo in questo modo sul web) o c'è qualche motivo in base al particolare sistema di coordinate utilizzato.
// ORIGINAL
- (CGVector)convertAngleToVector:(CGFloat)radians {
CGVector vector;
vector.dx = cos(radians) * 10;
vector.dy = sin(radians) * 10;
NSLog(@"DX: %0.2f DY: %0.2f", vector.dx, vector.dy);
return vector;
}
// NEW, SWAPPED DX & DY
- (CGVector)convertAngleToVector:(CGFloat)radians {
CGVector vector;
vector.dy = cos(radians) * 10;
vector.dx = sin(radians) * 10;
NSLog(@"DX: %0.2f DY: %0.2f", vector.dx, vector.dy);
return vector;
}
NOTA: anche nell'orologio del kit Sprite le sagge rotazioni sono negative, finora convertAngleToVector
sta facendo rotazioni in senso orario positive (ad es. 1.571 radianti è giusto, dove dovrebbe essere lasciato) Potrei fare solo cos(radians*-1)
e sin(radians*-1)
ma potrebbe esserci qualche motivo sottostante per questo basato su di me scambiare dx e dy.
Ah capisco, quindi l'implementazione originale è giusta? – fuzzygoat