2012-10-06 4 views
0

내가 얻으려고하는 것은 레벨 도우미를 사용하여 만든 LHSprite의 동작을 제어하기 위해 Cocos2d SneakyInput SneakyJoystick을 사용하는 것입니다. 내 box2d/cocos2d 게임.레이어의 SneakyJoystick을 사용하여 다른 레이어의 게임 캐릭터를 제어

하지만 조그마한 조이스틱 조이스틱은 내 게임 플레이와 같은 레이어에 있으며 내 게임 화면이 캐릭터를 따라 다니는 것처럼 보입니다. 조이스틱은 실제로 카메라에서/화면이 이동되었습니다.

저는 별도의 레이어 ('MyUILayer')에서 조이스틱을 설정하고이를 사용하여 'GameLayer'에서 내 캐릭터를 제어하려고했습니다. 내가 액세스 시도 GameLayer '에서 지금

@interface MyUILayer : CCLayer { 
    SneakyJoystick *leftJoystick; 
    SneakyButton * jumpButton; 
    SneakyButton * attackButton; 
} 

@property (readonly) SneakyButton *jumpButton; 
@property (readonly) SneakyButton *attackButton; 
@property (readonly) SneakyJoystick *leftJoystick; 

: 나는 다음과 같은 sneakyJoystick 구성 요소를 설정하는 코드가'MyUILayer '에

: 여기

내가이 일을 해봤 어떻게 부적 절한 조이스틱에 의해 생성 된 값은 'MyUILayer'에 'leftJoystick'이라고 부릅니다. 'GameLayer'원 '에서

 //in my INIT method 
{ 
     MyUILayer *UILAYER = [[MyUILayer alloc]init]; 
     characterJoystick = UILAYER.leftJoystick; 
     [self scheduleUpdate]; 
// Define what 'character' is and what 'characterBody' is ('character is a LHSprite, and 'characterBody' is a b2Body) 
} 
//in my tick method 
{  
b2Vec2 force; 
    force.Set(characterJoystick.velocity.x * 10.0f, 0.0f); 

    characterBody->ApplyForce(force, characterBody->GetWorldCenter()); 
} 

난 정말 왜'characterBody '이해할 수 없다 : GameLayer.mm에서

#import "MyUILayer.h" 
    @interface GameLayer : CCLayer { 
    //............. 
     LHSprite *character; 
     b2Body *characterBody; 
     SneakyJoystick *characterJoystick; 
     SneakyButton *jumpButton; 
     SneakyButton *attackButton; 
//............. 
    } 

: 선언 파일 (GameLayer.h)에서

'MyUILayer'의 'leftJoystick'값에 따라 이동합니다.

죄송합니다. - 프로젝트 파일도 업로드 했으므로 프로젝트 자체를 살펴볼 수 있습니다 : https://dl.dropbox.com/u/2578642/ZOMPLETED%202.zip

도움을 줄 수있는 사람에게 큰 감사를 전합니다!

답변

1

MyUILayer와 GameLayer를 연결하는 방식에 문제가 있습니다. myscene.mm에서, 당신은 MyUILayer와 GameLayer를 생성하고 그것들을 장면에 추가하고 있습니다. 괜찮아. 그런 다음 GameLayer에서 새로운 MyUILayer를 만들고 조이스틱을 연결합니다. 당신과 같이 속성을 사용하여 MyScene.mm에 조이스틱을 연결해야합니다

MyScene.mm에서 GameLayer.mm에서

@property (nonatomic, retain) SneakyButton *jumpButton; 
@property (nonatomic, retain) SneakyButton *attackButton; 
@property (nonatomic, retain) SneakyJoystick *leftJoystick; 

를 추가 GameLayer.h에서

// Control Layer 
MyUILayer * controlLayer = [MyUILayer node]; 
[self addChild:controlLayer z:2 tag:2]; 

// Gameplay Layer 
GameLayer *gameplayLayer = [GameLayer node]; 
gameplayLayer.attackButton = controlLayer.attackButton; 
gameplayLayer.leftJoystick = controlLayer.leftJoystick; 
gameplayLayer.jumpButton = controlLayer.jumpButton; 
[self addChild:gameplayLayer z:1 tag:1]; 

추가

@synthesize jumpButton = jumpButton; 
@synthesize attackButton = attackButton; 
@synthesize leftJoystick = characterJoystick; 

GameLayer.mm에서 init 메서드의 UILAYER 코드를 제거하십시오.

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     //instalize physics 
     [self initPhysics]; 
     [self lvlHelper]; 
     [self characterLoad]; 
     [self runAction:[CCFollow actionWithTarget:character worldBoundary:CGRectMake(0, -100, 870, 420)]]; 
     [self scheduleUpdate]; 
    } 
    return self; 
} 
+0

고맙습니다. - 모두 일하고 있습니다 : D – Harry

관련 문제