[英]How I can access Class method variable in instance method OR Use a common variable for both?
我有這個Class方法來創建英雄對象。
+(id)hero
{
NSArray *heroWalkingFrames;
//Setup the array to hold the walking frames
NSMutableArray *walkFrames = [NSMutableArray array];
//Load the TextureAtlas for the hero
SKTextureAtlas *heroAnimatedAtlas = [SKTextureAtlas atlasNamed:@"HeroImages"];
//Load the animation frames from the TextureAtlas
int numImages = (int)heroAnimatedAtlas.textureNames.count;
for (int i=1; i <= numImages/2; i++) {
NSString *textureName = [NSString stringWithFormat:@"hero%d", i];
SKTexture *temp = [heroAnimatedAtlas textureNamed:textureName];
[walkFrames addObject:temp];
}
heroWalkingFrames = walkFrames;
//Create hero sprite, setup position in middle of the screen, and add to Scene
SKTexture *temp = heroWalkingFrames[0];
Hero *hero = [Hero spriteNodeWithTexture:temp];
hero.name =@"Hero";
hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hero.size];
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.categoryBitMask = obstacleCategory | groundCategory | homeCategory;
return hero;
}
我還有另一個實例方法可以為我的英雄執行運行動畫。
-(void)Start
{
SKAction *incrementRight = [SKAction moveByX:10 y:0 duration:.05];
SKAction *moveRight = [SKAction repeatActionForever:incrementRight];
[self runAction:moveRight];
}
現在在Start
方法中使用heroWalkingFrames
變量,以便執行動畫處理,我想在Start
方法中添加此行
[SKAction repeatActionForever:[SKAction animateWithTextures:heroWalkingFrames timePerFrame:0.1f resize:NO restore:YES]];
有什么辦法可以同時使用此變量嗎?
當然,在Hero.h
添加:
@property (nonatomic, retain) NSArray *walkingFrames;
然后,在+(id)hero
方法中,而不是聲明新的數組NSArray *heroWalkingFrames
,請使用:
+(id)hero
{
//Setup the array to hold the walking frames
NSMutableArray *walkFrames = [NSMutableArray array];
//Load the TextureAtlas for the hero
SKTextureAtlas *heroAnimatedAtlas = [SKTextureAtlas atlasNamed:@"HeroImages"];
//Load the animation frames from the TextureAtlas
int numImages = (int)heroAnimatedAtlas.textureNames.count;
for (int i=1; i <= numImages/2; i++) {
NSString *textureName = [NSString stringWithFormat:@"hero%d", i];
SKTexture *temp = [heroAnimatedAtlas textureNamed:textureName];
[walkFrames addObject:temp];
}
//We set hero texture to the first animation texture:
Hero *hero = [Hero spriteNodeWithTexture:walkFrames[0]];
// Set the hero property "walkingFrames"
hero.walkingFrames = walkFrames;
hero.name =@"Hero";
hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hero.size];
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.categoryBitMask = obstacleCategory | groundCategory | homeCategory;
return hero;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.