从iPhone&;中的类类型(+;)方法访问对象;Cocos2d?
我有一个类方法,在其中创建并返回类对象。 但我想访问同一类中该对象的某些属性。作为一个类方法,我不能在.h文件中声明变量,以后也不能在其他方法中访问它。下面是代码 如何在下面的实例方法中访问backsprite或hudlayer对象的值从iPhone&;中的类类型(+;)方法访问对象;Cocos2d?,iphone,ios,cocos2d-iphone,Iphone,Ios,Cocos2d Iphone,我有一个类方法,在其中创建并返回类对象。 但我想访问同一类中该对象的某些属性。作为一个类方法,我不能在.h文件中声明变量,以后也不能在其他方法中访问它。下面是代码 如何在下面的实例方法中访问backsprite或hudlayer对象的值 // class 1 +(id)HUDWithBackgroundSprite:(NSString *)spriteName withRect:(CGRect)rect atPoistion:(HUDPosition)pos { HUDlayer
// class 1
+(id)HUDWithBackgroundSprite:(NSString *)spriteName withRect:(CGRect)rect atPoistion:(HUDPosition)pos
{
HUDlayer *hud = [[HUDlayer alloc] init];
CCSprite *backSprite = [CCSprite spriteWithFile:spriteName];
[backSprite setContentSize:CGSizeMake(rect.size.width,rect.size.height)];
[backSprite setPosition:ccp(rect.origin.x,rect.origin.y)];
[backSprite setTag:100];
[hud addChild:backSprite];
[hud setTag:2];
return [hud autorelease];
}
// access it here
-(void)AddButtonToHUDWithImage:(NSString *)imageName selector:(SEL)selector withDisabledImage:(NSString *)disbdImageName
{
HUDlayer *hud = (HUDlayer *)[self getChildByTag:2];
CCMenuItem *menuItem1 = [CCMenuItemImage itemFromNormalImage:imageName selectedImage:imageName disabledImage:disbdImageName target:self selector:@selector(selector)];
CCMenu *menu = [CCMenu menuWithItems:menuItem1,nil];
CCSprite *sprite = (CCSprite *)[hud getChildByTag:100];
CGPoint pos = sprite.position;
//pos =[[CCDirector sharedDirector]convertToGL:pos];
[menu setPosition:ccp(pos.x+160,pos.y-30)];
[hud addChild:menu];
}
// class 2
+(CCScene *) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
HUDlayer *hud = [HUDlayer node];
// [scene addChild:hud z:1];
// 'layer' is an autorelease object.
HelloWorldLayer *layer = [[[HelloWorldLayer alloc]initWithHUD:hud]autorelease];
// add layer as a child to scene
[scene addChild: layer];
id mainHuds = [HUDlayer HUDWithBackgroundSprite:HUDBackground withRect:CGRectMake(160,450, 300,60) atPoistion:pos_Top];
SEL callOnClick;
[mainHuds AddButtonToHUDWithImage:ButtonBackground selector:callOnClick withDisabledImage:disabledBackground];
[scene addChild: mainHuds];
// return the scene
return scene;
}
我无法通过标记访问它,因为+方法中的HUDlayer对象未添加到此处,而是添加到调用该方法的另一个类中。没有理由不能在.h文件中将该对象声明为变量: hud图层*hud 这正是该类的方法访问它的方式。如果您遇到错误,我只能假设您的.h文件的布局是错误的。我通常会这样设置场景和层:
@interface ExampleLayer : CCLayer
{
//vars
}
//methods
@end
@interface ExampleScene : CCScene
{
ExampleLayer *layer;
}
@end
静态方法中只能使用静态变量。。。 将.h文件中的对象声明为Static HUDlayer*hud; 并使用类名访问它。。。
我仍然无法理解为什么要创建这么多静态方法,因为它们非常重,而且即使您不需要该类,它们也是预加载的。…如果您有指向该类实例的指针/引用,您绝对可以在该类的静态方法中访问该类的实例/成员变量。这里有一个简单的例子。。。抱歉,如果有输入错误 //哈德勒
@interface HUDLayer : CCLayer
{
NSString* aString;
}
@property (nonatomic, retain) NSString* aString;
+(void)modifyInstanceString:(HUDLayer*)hud;
//哈德勒
@implementation HUDLayer
@synthesize aString;
-(id)init
{
if ((self=[super init]))
{
self.aString = @"initial value";
}
CCLOG(@"Initial value = %@", self.aString);
return self;
}
+(void)modifyInstanceString:(HUDLayer*)hud
{
hud.aString = @"Something else";
CCLOG(@"Modified aString via static method = %@", hud.aString);
}
@end
//HelloWorldLayer.m(或任何位置)
我不太明白。。为什么不能在.h文件中声明?唯一的访问方法是,如果变量在.h文件中..否,那么这将是一个实例变量,在类方法中不会被访问。。仅在实例方法中说在
静态方法中只能使用静态变量是不准确的。这里可以使用在堆上分配的对象。如果它将该对象引用返回给调用者,然后添加到视图层次结构中(,并隐式保留),则以后的例程可以从层次结构中检索。在jer answer的帮助下找到了更好的方法。。我想只有两种静态方法可以实现
HUDLayer* hud = [[HUDLayer alloc] init];
[HUDLayer modifyInstanceString:hud];