2014-09-05 70 views
0

我想從我的ViewController.m類調用我的Scene類中的newExplosion方法(在touchesBegan方法中)。問題是它不會將SKEmitterNode添加到視圖(這是newExplosion方法應該執行的操作)。它在touchesBegan方法在Scene類中時起作用,但在我的ViewController類中調用它時不起作用。來自SKScene類的調用方法

這是我的Scene類:

#import "Scene.h" 
#import <SpriteKit/SpriteKit.h> 

@implementation Scene : SKScene 

- (void) newExplosion: (float)x : (float) y { 
    SKEmitterNode *emitter = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"crouchEffect" ofType:@"sks"]]; 
    emitter.position = CGPointMake(x,y); 
    [self addChild:emitter]; 
} 
// This works VVVV 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self newExplosion:100 :100]; 
} 

這是我ViewController.m類SpriteKit相關的東西:

- (void)viewDidLoad{ 
    SKView * skView = _skView; 
    SKScene * scene = [Scene sceneWithSize:skView.bounds.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 
    [skView presentScene:scene]; 
} 
// Doesn't work VVVV 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    Scene * ss = [[Scene alloc] init]; 
    [ss newExplosion:100:100]; 
} 

我在newExplosion方法添加調試消息,看它是否實際上正在運行它並將其打印出來。所以它被調用,但不會將SKEmitterNode添加到視圖。

+0

創建與分配/初始化一個新的場景,你需要使用self.scene並投它 – LearnCocos2D 2014-09-05 07:06:27

回答

0

您正在創建一個新的場景,每次你觸摸屏幕,但你永遠不將其添加到視圖,我想你想要做這樣的事情

//In view controller interface add 
{ 
    Scene * _scene; 
} 

//In implementation, change the following 
- (void)viewDidLoad{ 
    SKView * skView = _skView; 
    _scene = [Scene sceneWithSize:skView.bounds.size]; 
    _scene.scaleMode = SKSceneScaleModeAspectFill; 
    [skView presentScene:_scene]; 
} 
// Doesn't work VVVV 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [_scene newExplosion:100:100]; 
} 
+0

工作很好! PS:SKScene應該是Scene(在實現中)。 – Kyle 2014-09-05 16:57:50

+0

不是問題,我改變它以反映您的評論。很高興爲你工作 – Knight0fDragon 2014-09-05 17:06:03