这是我的代码。
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
CGPoint boxPosition = CGPointMake(100,100);
SKSpriteNode *box = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithRed:0.18 green:0.702 blue:0.91 alpha:0.5] size:CGSizeMake(35,25)];
box.position = boxPosition;
[self addChild:box];
}
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
for (UITouch *touch in touches) {
CGPoint touchPoint = [touch locationInNode:self];
if (CGRectContainsPoint(box.frame, touchPoint)) {
// DO SOMETHING;
}
}
}
我想在box
方法中访问touchesBegan
,但我不能。我真的不确定为什么。
答案 0 :(得分:1)
问题是您的变量仅在if (self = [super initWithSize:size])
范围内。有几种方法可以解决这个问题。您可以像其他答案一样建议并创建一个属性,您可以使用该属性从该类的实例访问该变量。或者,您可以利用SKNode
的{{1}}属性:
name
然后,您可以使用SKSpriteNode *box = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithRed:0.18 green:0.702 blue:0.91 alpha:0.5] size:CGSizeMake(35,25)];
[box setName:@"aCoolName"];
的{{1}}在触摸开始时获取对该子节点的引用。
SKNode
答案 1 :(得分:0)
因为它是initWithSize:
方法中的局部变量(实际上是该方法中if
块的本地变量),所以,在该方法完成后,该变量不可访问。创建的对象已添加为child
,因此您可以搜索它...
您需要创建一个实例变量(`@property')并设置它,然后您可以在任何实例方法中访问它。这可能是在.h文件中(其他类需要访问它),或者在.m文件中(如果其他类不需要访问,则最好在延续类别中)。
答案 2 :(得分:0)
在* .h文件中定义SKSpriteNode *框
@property (nonatomic, retain) SKSpriteNode *box;
然后用你的* .m文件中的touchesBegan访问它
@synthesize box
* .m中的代码将如下所示。
box = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithRed:0.18 green:0.702 blue:0.91 alpha:0.5] size:CGSizeMake(35,25)];
或者如果您愿意,可以在* .h文件中将其定义为
@interface v1ViewController : UIViewController
{
SKSpriteNode *box;
}
然后像
一样使用它_box = [SKSpriteNode spriteNodeWithColor:[SKColor colorWithRed:0.18 green:0.702 blue:0.91 alpha:0.5] size:CGSizeMake(35,25)];