不兼容的块指针 SKSpriteNode
Posted
技术标签:
【中文标题】不兼容的块指针 SKSpriteNode【英文标题】:Incompatible block pointer SKSpriteNode 【发布时间】:2015-11-07 15:02:03 【问题描述】:这是我的代码
- (void) update:(NSTimeInterval)currentTime
[self.children enumerateObjectsUsingBlock:^(SKSpriteNode * child, NSUInteger idx, BOOL *stop)
child.position = CGPointMake(child.position.x-self.scrollingSpeed, child.position.y);
if (child.position.x <= -child.size.width)
float delta = child.position.x+child.size.width;
child.position = CGPointMake(child.size.width*(self.children.count-1)+delta, child.position.y);
];
我收到一个错误
Incompatible block pointer types sending 'void (^)(SKSpriteNode *__strong, NSUInteger, BOOL *)' to parameter of type 'void (^ _Nonnull)(SKNode * _Nonnull __strong, NSUInteger, BOOL * _Nonnull)'
我不知道为什么。我尝试将其更改为SKNode
,但它说大小不存在。
任何想法将不胜感激。
【问题讨论】:
您需要使用完整且准确的错误消息更新您的问题。发布错误消息时切勿缩写它们。 @rmaddy 抱歉,我现在就添加! 根据错误,只需将SKSpriteNode
改为SKNode
即可。
【参考方案1】:
枚举块语法不正确,需要更改:
[self.children enumerateObjectsUsingBlock:^(SKSpriteNode * child, NSUInteger idx, BOOL *stop)
child.position = CGPointMake(child.position.x-self.scrollingSpeed, child.position.y);
if (child.position.x <= -child.size.width)
float delta = child.position.x+child.size.width;
child.position = CGPointMake(child.size.width*(self.children.count-1)+delta, child.position.y);
];
到
[self.children enumerateObjectsUsingBlock:^(id object, NSUInteger idx, BOOL *stop)
SKSpriteNode *child = (SKSpriteNode *)object;
child.position = CGPointMake(child.position.x-self.scrollingSpeed, child.position.y);
if (child.position.x <= -child.size.width)
float delta = child.position.x+child.size.width;
child.position = CGPointMake(child.size.width*(self.children.count-1)+delta, child.position.y);
];
枚举块的第一个参数的类型是id
而不是SKSpriteNode
。 NSArray 没有这样的实现。
【讨论】:
谢谢它现在完美运行!非常感谢。我开始使用 swift 进行更多开发,但我想试试 OBJ-C! @JamesAnderson:使用 Obj C 进行愉快的编码。以上是关于不兼容的块指针 SKSpriteNode的主要内容,如果未能解决你的问题,请参考以下文章