【发布时间】:2012-05-06 08:58:24
【问题描述】:
我昨天发了一个类似的帖子,但几乎没有收到任何回复,可能是因为缺乏细节。我会更彻底。
所以我一直在清理我的类 (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 上的父对象。是零。
【问题讨论】:
标签: ios methods cocos2d-iphone instance sprite