У меня есть персонаж в игре, и он должен выстрелить в пулю. Я настроил все для персонажа и установил путь прохождения пули. Вот код, я использую:SKSprite не позиционируется там, где он должен
//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];
Это то, что я получаю от NSLogs Я использую выше:
myposition: {+122,58448028564453, +109,20420074462891}
nozloc: {+145,24272155761719 , 77,654090881347656}
Пуля Позиция: {+145,24272155761719, 77,654090881347656}
Итак, все должно работать, не так ли? Но проблема, с которой я столкнулась, заключается в том, что пули снимаются из немного другого места. Вы можете видеть на картинке ниже:
Я выровнен характер, так что пули начинаются с этой маленькой площади в центре. Таким образом, вы можете увидеть расстояние от пули, которое должно начинаться (перед пистолетом, который мой персонаж держит), и квадрат посередине экрана.
Пули перемещаются правильно по прямой, а угол линии такой же, как у ангела пути (путь и форма пули параллельны, как вы можете видеть на картинке). Когда я перемещаю свою линию, пули тоже движутся одинаково. Я думаю, что проблема является преобразование точки между узлами, но я пытался как
[self convertPoint:myCharacter.nozzleLocation fromNode:myCharacter]
[bullet convertPoint:nozzleLoc fromNode: self]
[self convertPoint:nozzleLoc toNode:bullet]
Однако, все они результат в том же отправную точку для пули. Вы знаете, почему у меня такая проблема? Это потому, что я уменьшаю свой характер спрайт, используя setScale
(я устанавливаю его в 0.3)?
Большое спасибо за вашу помощь.
Еще один отличный ответ Дион! Я закончил тем, что взял строку кода для позиции, и это сработало! Большое спасибо! – Septronic