我在cocos2dv3中的项目正在抛出 ARC Sematic问题
名为' setRotation的多种方法:'发现结果不匹配,参数类型或属性
归档(发布模式)。它在部署到模拟器/设备(调试模式)时运行良好。
在发布模式下,编译器在UIRotationGestureRecognizer
和CCNode
中的轮换实现之间混淆。
当我在CCBAnimationManager.m
中收到错误时,我将调用选择器setRotation的对象类型化为(CCNode
*),但随后错误在CCActionInterval
中爬升。我希望有更好的解决方案,而不是在cocos2d库中进行类型转换。
我做错了什么? 谢谢你的时间。
修改
@interface CCAction : NSObject <NSCopying> {
id __unsafe_unretained _originalTarget;
id __unsafe_unretained _target;
NSInteger _tag;
}
@property (nonatomic,readonly,unsafe_unretained) id target;
@property (nonatomic,readonly,unsafe_unretained) id originalTarget;
@property (nonatomic,readwrite,assign) NSInteger tag;
in
CCAction.m
@synthesize tag = _tag, target = _target, originalTarget = _originalTarget;
-(void) startWithTarget:(id)aTarget
{
_originalTarget = _target = aTarget;
}
-(void) startWithTarget:(id)aTarget
{
_originalTarget = _target = aTarget;
}
类层次结构
@interface CCActionFiniteTime : CCAction <NSCopying>
@interface CCActionInterval: CCActionFiniteTime <NSCopying>
@interface CCBRotateTo : CCActionInterval <NSCopying>
CCBRotateTo.m {
-(void) startWithTarget:(CCNode *)aTarget
{
[super startWithTarget:aTarget];
startAngle_ = [self.target rotation];
diffAngle_ = dstAngle_ - startAngle_;
}
-(void) update: (CCTime) t
{
[self.target setRotation: startAngle_ + diffAngle_ * t];
}
}
答案 0 :(得分:7)
这个问题让我头疼不已。虽然我已经为我的旧项目将cocos2d升级到v2.2版本(太复杂而无法更新到v3),但我仍然收到了此警告。我创建的任何动画在SpriteBuilder中使用旋转确实很奇怪,正如我在这里描述的那样: Rotation animation issue on iPhone5S with cocos2d 2.0
最后我在CCBAnimationManager.m
中使用了类型转换来解决它@implementation CCBRotateTo
-(void)startWithTarget:(CCNode *)aTarget
{
[super startWithTarget:aTarget];
starAngle_ = [(CCNode *)self.target rotation];
diffAngle_ = dstAngle_ - startAngle_;
}
-(void)update:(ccTime)t
{
[(CCNode *)self.target setRotation: startAngle_ + diffAngle_ * t];
}
有了这个改变,现在我也可以支持arm64了。
答案 1 :(得分:0)
将您的cocos2dv3更新为最新版本(目前为RC4)。
我正在使用Xcode 5.0和cocos2dv3 RC1没有问题。 但是将Xcode更新为5.1我遇到了这个问题。 所以我将cocos2dv3更新为RC4,现在工作正常。
您可以在here找到cocos 2d最新版本。