【发布时间】:2015-04-26 14:50:02
【问题描述】:
我正在使用 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 时,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];
}
【问题讨论】:
-
您不应编辑答案以扩展您的问题或提出其他问题。如果我的回答为您的问题提供了答案,请检查它是否正确。如果您希望在其原始范围内扩展您的问题,请编辑您的问题。如果您还有其他问题,您应该提出其他问题,而不是编辑您当前的问题以包含它。
-
火花影响行为发生了巨大变化,火花现在像月球一样围绕着地球!我无法将节点放置在正确的位置,当炸弹随机进入场景时,如果它向上移动,两个节点之间的距离会增加,向下并减小,以至于炸弹节点从底部移动页面的火花实际上是在正确的位置?我已经编辑了我的原始问题并添加了完整的课程。请解释这种奇怪的行为。
-
尝试取出线_bombSpark.targetNode = _mainLayer;看看会发生什么。
-
是的,在你最初的回答之后,我确实尝试了这个,但行为仍然相同,唯一改变的是火花更密集,就像它的重复一样,一个在另一个之上。
标签: ios objective-c sprite-kit skspritenode skemitternode