저는 cocos2d에서 기본 게임을 만들려고하고 있으며, 영웅 스프라이트의 위치에 따라 배경을 스크롤하려고 시도하고 있습니다. . 주인공은 GameplayLayer라는 클래스의 컨트롤과 함께 만들어졌으며 스크롤되지 않은 배경에서 모두 잘 작동합니다.ObjC : 외부에서 사용자 정의 클래스의 ivar에 액세스 할 수 없습니다.
필자가 따라하는 책은 내 캐릭터가 완벽한 것처럼 보이는 중간 지점을 통과 할 때를 기준으로 스크롤링 작업을 수행하는 데 필요한 몇 가지 샘플 코드를 제공하지만 실행 중이 지 않은 것으로 보아 이것이 다른 내 영웅 클래스의 인스턴스입니다. 인스턴스와 화면에 표시되는 인스턴스 사이에는 아무런 연관이 없습니다.
내 영웅의 작업 인스턴스를 배경 스크롤링 클래스 (YrrasCoastBackgroundLayer라고도 함)에서 액세스 할 수 있도록하여이를 해결할 수 있다고 가정하고 있지만 두뇌 블록을 가지고있어 얻을 수 없습니다. 그것을보기 위해. @property를 시도했지만 Xcode는 다른 클래스에서 그것을 볼 수 없습니다. 여기
컨트롤에 매여 영웅이 작성 될 GameplayLayer 클래스, /, 등 :#import "CCLayer.h"
#import "cocos2d.h"
#import "CommonProtocols.h"
#import "SneakyJoystick.h"
#import "SneakyButton.h"
#import "SneakyJoystickSkinnedBase.h"
#import "SneakyButtonSkinnedBase.h"
#import "HeroMale.h"
#import "GameCharacter.h"
@interface GameplayLayer : CCLayer <GameplayLayerDelegate> {
CCSprite *playerSprite;
SneakyJoystick *playerJoystick;
SneakyButton *jumpButton;
CCSpriteBatchNode *sceneSpriteBatchNode;
HeroMale *heroMale;
}
@property (nonatomic, readonly) SneakyJoystick *playerJoystick;
@property (nonatomic, readonly) SneakyButton *jumpButton;
@property (nonatomic, assign) HeroMale *heroMale;
@end
YrrasCoastBackgroundLayer.h 파일이 확실히 여기 GameplayLayer.h를 수입하고,이 내용의에서 .H 파일입니다 난 그 *의 heroMale의 바르에 액세스 할 수있게하려면 YrrasCoastBackgroundLayer.m 파일의 방법을 :
- (void) adjustLayer {
float heroXPosition = heroMale.position.x;
CGSize screenSize = [[CCDirector sharedDirector] winSize];
float halfOfTheScreen = screenSize.width/2.0f;
CGSize levelSize = [[GameManager sharedGameManager] getDimensionsOfCurrentScene];
if ((heroXPosition > halfOfTheScreen) && (heroXPosition < (levelSize.width - halfOfTheScreen))) {
float newXPosition = halfOfTheScreen - heroXPosition;
[self setPosition:ccp(newXPosition, self.position.y)];
}
}
나는 heroMale이 선언되지 않은 식별자했다는 설명은 float heroXPosition = heroMale.position.x
회선에 자동 엑스 코드 오류를 받고 있어요. 어떻게 사용할 수 있습니까? 문제를 해결할 수 있습니까?
는 UPDATE :
여기 YrrasCoastBackgroundLayer에 대한 .H 파일입니다 :
#import "YrrasCoastBackgroundLayer.h"
@implementation YrrasCoastBackgroundLayer
@synthesize gameplayLayer;
- (id) init {
self = [super init];
if (self != nil) {
// Web Tutorial
backgroundNode = [CCParallaxNode node];
[self addChild:backgroundNode z: -1];
backgroundImage = [CCSprite spriteWithFile:@"yrras-coast-ipad-hd.png"];
CGPoint dustSpeed = ccp(0.1, 0.1);
[backgroundNode addChild:backgroundImage z:0 parallaxRatio:dustSpeed positionOffset:ccp(1024, [[CCDirector sharedDirector]winSize].height/2)];
self.gameplayLayer = gameplayLayer;
[self scheduleUpdate];
}
return self;
}
- (void)update:(ccTime)deltaTime {
// Web Tutorial
// CGPoint backgroundScrollVel = ccp(-1000, 0);
// backgroundNode.position = ccpAdd(backgroundNode.position, ccpMult(backgroundScrollVel, deltaTime));
CCArray *listOfGameObjects = [sceneSpriteBatchNode children];
for (GameCharacter *tempChar in listOfGameObjects) {
[tempChar updateStateWithDeltaTime:deltaTime andListOfGameObjects:listOfGameObjects];
}
[self adjustLayer];
}
// Book Tutorial
- (void) adjustLayer {
float heroXPosition = gameplayLayer.heroMale.position.x;
CCLOG(@"heroXPosition is %f", gameplayLayer.heroMale.position.x);
CGSize screenSize = [[CCDirector sharedDirector] winSize];
float halfOfTheScreen = screenSize.width/2.0f;
CGSize levelSize = [[GameManager sharedGameManager] getDimensionsOfCurrentScene];
if ((heroXPosition > halfOfTheScreen) && (heroXPosition < (levelSize.width - halfOfTheScreen))) {
float newXPosition = halfOfTheScreen - heroXPosition;
[self setPosition:ccp(newXPosition, self.position.y)];
}
}
@end
내 문제를 해결하지 않은 것처럼 여전히 스크롤 코드가 내장 그래서 HeroMale 클래스 .. 그리고 그 속성 ... –