昨天我发了一个类似的帖子,但几乎没有收到任何回复,可能是因为缺乏细节。我会更彻底。
所以我一直在清理我的类(JoinedMapsLayer),其中添加了我的 tmx 地图并运行更新、绘制等。我尝试将一些方法添加到其他类但没有完全成功。有些创建精灵并成功地在屏幕上显示它们,但 JoinedMapsLayer 似乎无法再识别它们,即使它们来自它的头文件。因此,我不能使用 JoinedMapsLayer 或其他一些类来删除它。我尝试在添加断点后设置断点(无论添加到何处),然后在控制台中键入 po [spritename] ,结果为零。
也许我只是不明白这应该如何完全工作,我必须采取错误的方法。如果有人可以帮助我一劳永逸地理解这一点,将不胜感激!
我遇到了一个很好的例子,我又一次没有成功。这个根本没有出现。
在这里,我可以向您展示我曾经拥有的东西,效果很好:
(in .h) JoinedMapsLayer 的界面我有:
CCSprite *selectionScreenOverlaySprite;
CCSpriteBatchNode * selectionScreenOverlaySpriteSheet;
我的属性:
@property(nonatomic, retain) CCSprite *selectionScreenOverlaySprite;
@property(nonatomic, retain) CCSpriteBatchNode *selectionScreenOverlaySpriteSheet;
声明方法:
-(void) addSelectionScreenOverlay;
(以 .m 为单位)我综合了我的属性:
@synthesize selectionScreenOverlaySprite, selectionScreenOverlaySpriteSheet;
我的方法:
-(void) addSelectionScreenOverlay {
// overlay
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"selectionScreenOverlay.plist"];
selectionScreenOverlaySpriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"selectionScreenOverlay.png"];
NSMutableArray *selectionScreenFrames = [NSMutableArray array];
[selectionScreenFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"selectionScreenOverlay.png"]]];
selectionScreenOverlaySprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"selectionScreenOverlay.png"]];
[selectionScreenOverlaySpriteSheet addChild:selectionScreenOverlaySprite];
[self addChild:selectionScreenOverlaySpriteSheet z:13];
selectionScreenOverlaySprite.position = [self convertToNodeSpace:CGPointMake(512, 384)];
selectionScreenOverlaySprite.scale = 260;
selectionScreenOverlaySprite.opacity = 0;
}
所以效果很好...
但是当我在我的头文件中导入一个名为 SpriteFX.h 的类并调用新方法时,什么也没有发生???
我像这样调用类方法:
[SpriteFX addSelectionScreenOverlayOnLayer:self
withSprite:selectionScreenOverlaySprite
withSpriteSheet:selectionScreenOverlaySpriteSheet];
我在 SpriteFX.h 中声明了这样的方法:
+(void) addSelectionScreenOverlayOnLayer:(CCLayer*)layer
withSprite:(CCSprite*)sprite
withSpriteSheet:(CCSpriteBatchNode*)spriteSheet;
我在 SpriteFX.m 中的方法如下所示:
+(void) addSelectionScreenOverlayOnLayer:(CCLayer*)layer
withSprite:(CCSprite*)sprite
withSpriteSheet:(CCSpriteBatchNode*)spriteSheet {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"selectionScreenOverlay.plist"];
spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"selectionScreenOverlay.png"];
NSMutableArray *selectionScreenFrames = [NSMutableArray array];
[selectionScreenFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"selectionScreenOverlay.png"]]];
sprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"selectionScreenOverlay.png"]];
[spriteSheet addChild:sprite];
[layer addChild:spriteSheet z:13];
sprite.position = [layer convertToNodeSpace:CGPointMake(512, 384)];
sprite.scale = 260;
sprite.opacity = 0;
}
没有豆子
如果我理解正确,因为我将 self 作为 CCLayer 传递,那么我的类方法中的层应该指向 JoinedMapsLayer 中的 CCLayer。此外,传递的精灵和精灵表应该指向 JoinedMapsLayer,所以它应该可以正常工作.. 但事实并非如此。
在 JoinedMapsLayer 中调用类方法后,我检查了 selectionScreenOverlaySprite 上的父对象。它是零。