Ich habe einen Charakter in einem Spiel, und es soll eine Kugel schießen. Ich habe alles für den Charakter vorbereitet und den Weg für die Kugel festgelegt. Hier ist der Code Ich verwende:SKSprite nicht positionieren, wo es sollte
//The destination of the bullet
int x = myCharacter.position.x - 1000 * sin(myCharacter.zRotation);
int y = myCharacter.position.y + 1000 * cos(myCharacter.zRotation);
//The line to test the path
SKShapeNode* beam1 = [SKShapeNode node];
//The path
CGMutablePathRef pathToDraw = CGPathCreateMutable();
//The starting position for the path (i.e. the bullet)
//The NozzleLocation is the location of the nozzle on my character Sprite
CGPoint nozzleLoc=[self convertPoint:myCharacter.nozzleLocation fromNode:myCharacter];
CGPathMoveToPoint(pathToDraw, NULL, nozzleLoc.x, nozzleLoc.y);
CGPathAddLineToPoint(pathToDraw, NULL, x, y);
//The bullet
SKSpriteNode *bullet = [SKSpriteNode spriteNodeWithTexture:bulletTexture size:CGSizeMake(6.f, 6.f)];
bullet.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:3 center:bullet.position ];
[bullet.physicsBody setAffectedByGravity:NO];
[bullet.physicsBody setAllowsRotation:YES];
[bullet.physicsBody setDynamic:YES];
bullet.physicsBody.categoryBitMask = bulletCategory;
bullet.physicsBody.contactTestBitMask = boundsCategory;
//These log the correct locations for the character
//and the nozzle Location
NSLog(@"myposition: %@",NSStringFromCGPoint(myCharacter.position));
NSLog(@"nozloc: %@",NSStringFromCGPoint(nozzleLoc));
bullet.position = [bullet convertPoint:nozzleLoc fromNode:self];
[self addChild:bullet];
NSLog(@"Bullet Position: %@",NSStringFromCGPoint(bullet.position));
[bullet runAction:[SKAction followPath:pathToDraw duration:6.f]];
//I'm using this to test the path
beam1.path = pathToDraw;
[beam1 setStrokeColor:[UIColor redColor]];
[beam1 setName:@"RayBeam"];
[self addChild:beam1];
Das ist das, was ich von den NSLogs bekommen verwende ich oben:
MyPosition: {122,58448028564453, 109,20420074462891}
nozloc: {145,24272155761719 , 77,654090881347656}
Einschuss Position: {145,24272155761719, 77,654090881347656}
Also sollte alles funktionieren, oder? Aber das Problem, das ich habe, ist, dass die Kugeln von einem etwas anderen Ort aus gedreht werden. Sie können unten aus dem Bild sehen:
ich den Charakter ausgerichtet, so dass die Kugeln aus dem kleinen Platz in der Mitte beginnen. Auf diese Weise können Sie die Entfernung sehen, von der aus die Kugel starten soll (vor der Waffe, die mein Charakter hält), und das Quadrat in der Mitte des Bildschirms.
Die Kugeln bewegen sich korrekt auf einer geraden Linie, und der Winkel der Linie ist derselbe wie der Winkel des Pfades (der Pfad und die Linienaufzählungsform sind parallel, wie Sie aus dem Bild sehen können). Wenn ich meine Linie bewege, bewegen sich auch die Kugeln auf die gleiche Weise. Ich denke, die Frage der Punkt Konvertierung zwischen dem Knoten ist, aber ich habe versucht, beide
[self convertPoint:myCharacter.nozzleLocation fromNode:myCharacter]
[bullet convertPoint:nozzleLoc fromNode: self]
[self convertPoint:nozzleLoc toNode:bullet]
Doch sie alle Ergebnis in dem exakt gleichen Ausgangspunkt für die Kugel. Weißt du, warum ich dieses Problem habe? Liegt es daran, dass ich mein Zeichen-Sprite unter Verwendung von setScale
verkleinere (ich setze es auf 0,3)?
Vielen Dank im Voraus für Ihre Hilfe.
Noch eine große Antwort Dion! Ich habe die Codezeile für die Position genommen und es hat funktioniert! Danke vielmals! – Septronic