我试图让它变成这样一个粒子,只要玩家被移动,我就会跟随玩家。我试图复制的效果就像你在网站上,并且他们有一些跟随你的鼠标的对象。我尝试通过使粒子移动玩家所做的数量来做到这一点,但它没有再现预期的效果。有什么建议?我的代码:
声明粒子
NSString *myParticlePath = [[NSBundle mainBundle] pathForResource:@"trail" ofType:@"sks"];
self.trailParticle = [NSKeyedUnarchiver unarchiveObjectWithFile:myParticlePath];
self.trailParticle.position = CGPointMake(0,0);
[self.player addChild:self.trailParticle];
移动方法
-(void)dragPlayer: (UIPanGestureRecognizer *)gesture {
if (gesture.state == UIGestureRecognizerStateChanged) {
//Get the (x,y) translation coordinate
CGPoint translation = [gesture translationInView:self.view];
//Move by -y because moving positive is right and down, we want right and up
//so that we can match the user's drag location (SKView rectangle y is opp UIView)
CGPoint newLocation = CGPointMake(self.player.position.x + translation.x, self.player.position.y - translation.y);
CGPoint newLocPart = CGPointMake(self.trailParticle.position.x + translation.x, self.trailParticle.position.y - translation.y);
//Check if location is in bounds of screen
self.player.position = [self checkBounds:newLocation];
self.trailParticle.position = [self checkBounds:newLocPart];
self.trailParticle.particleAction = [SKAction moveByX:translation.x y:-translation.y duration:0];
//Reset the translation point to the origin so that translation does not accumulate
[gesture setTranslation:CGPointZero inView:self.view];
}
}
答案 0 :(得分:14)
试试这个:
1)如果您的发射器位于场景中,请使用此发射器的属性 targetNode 并将其设置为场景。这意味着粒子不会是发射器的孩子,但是你的场景应该留下痕迹......
不确定这是否正确(我在C#中这样做):
self.trailParticle.targetNode = self; // self as Scene
还有一些额外的:
2)我认为你可以将你的发射器作为孩子附加到self.player上,这样它就可以自动与你的玩家一起移动,然后就不需要了:
self.trailParticle.position = [self checkBounds:newLocPart];
self.trailParticle.particleAction = [SKAction moveByX:translation.x y:-translation.y duration:0];
答案 1 :(得分:0)
在您的更新循环中检查您的播放器是否沿X轴移动。 然后在每次发生时创建一个精灵节点。在此示例中,将您的播放器命名为#34; player1" 关键在于您的粒子必须在出生率附近的粒子列中设置最大值。 打击代码对我有用。
-(void)update:(CFTimeInterval)currentTime {
// Find your player
SKNode* Mynode = (SKSpriteNode *)[self childNodeWithName:@"player1"];
// Check if our player is moving. Lower the number if you are not getting a trail.
if (Mynode.physicsBody.velocity.dx>10|
Mynode.physicsBody.velocity.dy>10|
Mynode.physicsBody.velocity.dx<-10|
Mynode.physicsBody.velocity.dy<-10){
// Unpack your particle
NSString *myParticlePath = [[NSBundle mainBundle] pathForResource:@"trail" ofType:@"sks"];
//Create your emitter
SKEmitterNode *myTrail = [NSKeyedUnarchiver unarchiveObjectWithFile:myParticlePath];
// This ensures your trail doesn't stay forever . Adjust this number for different effects
myTrail.numParticlesToEmit=10;
// The length of your trail - higher number, longer trail.
myTrail.particleLifetime = 2.0;
//Set the trail position to the player position
myTrail.position=Mynode.position;
//Add the trail to the scene
[self addChild:myTrail];
}
}