我为使用SKEmitterNode在屏幕上旋转和滚动的炸弹创建火花效果。我已经找到了一个难点,因为我无法正确定位火花效果。当炸弹旋转时,我可以让SKEmitterNode和spriteNode一起移动到屏幕上以及位于炸弹中心的火花效果。我希望实现的效果是当炸弹旋转时火花正确定位在炸弹的末端。
第一段代码来自myScene:
MCBomb *_multiUp = [MCBomb spriteNodeWithImageNamed:@"MultiShotPowerUp"];
[_mainLayer addChild:_multiUp];
// Create spark.
NSString *bombSparkPath = [[NSBundle mainBundle] pathForResource:@"BombSpark" ofType:@"sks"];
SKEmitterNode *_bombSpark = [NSKeyedUnarchiver unarchiveObjectWithFile:bombSparkPath];
_bombSpark.targetNode = _mainLayer;
[_mainLayer addChild:_bombSpark];
_multiUp.spark = _bombSpark;
接下来的两段代码来自班级.m
-(void)updateSpark {
if (self.spark) {
self.spark.position = self.position;
}
和.h
@interface MCBomb : SKSpriteNode
@property (nonatomic) SKEmitterNode *spark;
-(void)updateSpark;
只要我将CGPointMake添加到混音中,例如
self.spark.position = CGPointMake(0.9, 0.9);
调用时,spriteNode在屏幕上浮动,并且SKEmitterNode显示为左下角静态。
或者如果我这样做:
self.spark.position = CGPointMake (self.size.width +50 , self.size.height + 400);
SKEmitterNode在新位置是静态的,spriteNode在屏幕上浮动。 或者,如果我这样做:
self.spark.position = CGPointMake (self.size.width +50 , self.size.height + 400);
self.position = self.spark.position;
我将spriteNode和EmitterNode都置于新的位置。
正如你所看到的,在我的沮丧中,我抓着稻草!这种定位对于情感来说是极端的,我还在学习,可以就如何获得正确的影响提出一些建议。
以下是完整的课程,请参阅新评论:
-(void)spawnMultiShotPowerUp {
// Setting up Texture Atlas.
SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"Parts"];
MCBomb *_multiUp = [MCBomb spriteNodeWithImageNamed:@"MultiShotPowerUp"];
_multiUp.name = @"multiUp";
_multiUp.position = CGPointMake(-_multiUp.size.width, randomInRange(150, self.size.height -100));
_multiUp.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:16.0];
_multiUp.physicsBody.categoryBitMask = mCMultiUpCategory;
_multiUp.physicsBody.collisionBitMask = 0;
_multiUp.physicsBody.velocity = CGVectorMake(10, randomInRange(-40, 40));
_multiUp.physicsBody.angularVelocity = M_PI;
_multiUp.physicsBody.linearDamping = 0.0;
_multiUp.physicsBody.angularDamping = 0.0;
[_mainLayer addChild:_multiUp];
// Create spark.
NSString *bombSparkPath = [[NSBundle mainBundle] pathForResource:@"BombSpark" ofType:@"sks"];
SKEmitterNode *_bombSpark = [NSKeyedUnarchiver unarchiveObjectWithFile:bombSparkPath];
_bombSpark.targetNode = _mainLayer;
_bombSpark.position = CGPointMake(20, 0);
_multiUp.spark = _bombSpark;
[_multiUp addChild:_bombSpark];
}
答案 0 :(得分:0)
您正在创建这两个节点:
MCBomb *_multiUp = [MCBomb spriteNodeWithImageNamed:@"MultiShotPowerUp"];
[_mainLayer addChild:_multiUp];
// Create spark.
NSString *bombSparkPath = [[NSBundle mainBundle] pathForResource:@"BombSpark" ofType:@"sks"];
SKEmitterNode *_bombSpark = [NSKeyedUnarchiver unarchiveObjectWithFile:bombSparkPath];
_bombSpark.targetNode = _mainLayer;
[_mainLayer addChild:_bombSpark];
但是你正在向mainLayer添加你的火花,这对你想要做的事情是不正确的。你需要将火花作为孩子添加到你的炸弹而不是mainLayer。
[_multiUp addChild:_bombSpark];
请记住_bombSpark定位现已更改,因为它是_multiUp的子项。这意味着_bombSpark的位置0,0等于_multiUp节点的中心位置。
为_bombSpark添加一个位置,如下所示:
_bombSpark.position = CGPointMake(20,0);
这使火花从_multiUp的中心向上20点。使用精确的x,y坐标值进行游戏,直到达到它必须的位置。