Ben bir oyunda bir karakter var nereye konumlandırılması ve bir kurşun ateş gerekiyordu değil. Karakter için her şeyi hazırladım ve merminin geçmesi için yolu ayarladım.SKSprite o
//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];
Bu yukarıda kullanıyorum ben NSLogs ne olsun edilmektedir: İşte kullanıyorum kodu
myposition: {122,58448028564453, 109,20420074462891}
nozloc: {145,24272155761719 , 77,654090881347656}
Bullet pozisyonu: {145,24272155761719, 77,654090881347656}
Her şey yolunda, değil mi? Ama sahip olduğum konu, mermilerin biraz farklı bir yerden çekilmesidir. Aşağıdaki resimden görebilirsiniz: Ben karakter hizalanmış
, mermi ortada o küçük meydanından başlayıp böylece. Bu şekilde merminin başlayacağı mesafeyi (karakterimin tuttuğu silahın önünde) ve ekranın ortasındaki kareyi görebilirsiniz.
Mermiler düz bir çizgi üzerinde doğru şekilde ilerler ve çizgi açısı yolun meleği ile aynıdır (yol ve çizgi mermi formları, resimde görebileceğiniz gibi paraleldir). Hattımı hareket ettirdiğimde mermiler de aynı şekilde hareket eder. Ben sorunu düğümler arasındaki nokta dönüşüm olduğunu düşünüyorum, ama merminin için tamamen aynı başlangıç noktasında hepsi sonuç, ancak her ikisi de
[self convertPoint:myCharacter.nozzleLocation fromNode:myCharacter]
[bullet convertPoint:nozzleLoc fromNode: self]
[self convertPoint:nozzleLoc toNode:bullet]
denedim. Neden bu sorunu yaşıyorum biliyor musunuz? Bu, setScale
'u kullanarak (karakterimi 0.3 değerine ayarlıyorum) karakter kalıbımın küçültülmesinden mi kaynaklanıyor?
Yardımlarınız için teşekkürler şimdiden çok.
Yine harika bir cevap Dion! Pozisyon için kod satırını aldım ve işe yaradı! Çok teşekkürler! – Septronic