从不同的类(“addChild”)呈现SKSpritenode

时间:2015-06-11 00:15:22

标签: ios sprite-kit

我的Sprite有一个Class,我正在尝试从该类添加.Child。问题是它呈现它并且不会崩溃 - 我只是看不到图像。我知道图像位置是正确的,因为创建并添加了gameScene类中的子项并且它已经工作和加载。

  • 我认为这不起作用,因为它不是SKscene的子类,这就是我从gameScene添加主节点但没有解决问题的原因。

  • 我设置了一个“mainNode”节点

  • keys只是精灵的名称及其类名

  • 我知道正在渲染的图像由于某种原因而无法显示。

我知道这是因为如果我没有添加图像名称而不是“key_green”并将其更改为空。我得到一个控制台消息说它无法找到该图像。

  

gameScene.m

#import "GameScene.h"
#import "Keys.h"

@implementation GameScene

@synthesize mainNode;


-(void)didMoveToView:(SKView *)view {

   self.backgroundColor = [UIColor whiteColor];

   mainNode = [SKNode node];

   [self addChild:mainNode];


   Keys * KeysOBJ =[[Keys alloc] init];
   [KeysOBJ initKeys];


}
  

keys.h

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

@interface Keys : SKSpriteNode{

SKSpriteNode * key1;

}


@property SKNode* mainNode;



-(void)initKeys;
-(void)loadKeys;
  

keys.m

#import "Keys.h"
#import "GameScene.h"

@implementation Keys{


 }
 @synthesize mainNode;




  -(void)initKeys{


   key1 = [SKSpriteNode spriteNodeWithImageNamed:@"key_red"];
   key1.position = CGPointMake((self.frame.size.width)-  (self.frame.size.width)+350, (self.frame.size.height)-(self.frame.size.height)+50);


   [mainNode addChild:key1];

 }

1 个答案:

答案 0 :(得分:0)

您的主要节点在您的密钥中为零,因为您在调用initKeys之前从未设置过它。理论上这将使它发挥作用。

Keys * KeysOBJ =[[Keys alloc] init];
KeysOBJ.mainNode = mainNode;

[KeysOBJ initKeys];

还要考虑这个

key1.position = CGPointMake((self.frame.size.width)-  (self.frame.size.width)+350, (self.frame.size.height)-(self.frame.size.height)+50);

self没有大小,因为你刚刚调用了init并且从未提供纹理或大小。这意味着你的精灵位置可能是350,50。

有了这样说,你已经过度复杂了。如果你永远不会为它设置纹理,你的键不应该是SKSpriteNode的子类。它应该是一个SKNode。

希望这有点意义,让你指向正确的方向。