2013-05-26 70 views
0

当我尝试在xcode模拟器中测试我的游戏时,我在下面看到这些错误。任何人都有一个想法是什么问题。顺便说一句的behaivor是解锁一个新的水平,如果演员与物体碰撞:“类型'objc_object *'和'float'错误的操作数无效?

错误线49:类型“objc_object *”和“浮动”无效操作数 在58行二进制

错误:的类型的 'objc_object *' 和在管线73 '浮动' 二进制

出错无效操作数:ISO C++禁止指针和 整数之间的比较

这里是IOS代码:49 行:

if(([mActor touchedActor] && ([self getGameAttribute:@"Highest Level Completed"] >= [self asNumber:[NSNumber numberWithFloat:_levelnumber]]))) 

行58:

if(([self getGameAttribute:@"Highest Level Completed"] >= [self asNumber:[NSNumber numberWithFloat:_levelnumber]])) 

线73:

if(([mActor touchedActor] && (([self getGameAttribute:@"Highest Level Completed"] <= 5) && [[Game game] purchasedProduct:@"MyID"]))) 

所有行为的代码:

#import <Box2D/Box2D.h> 
#import <AudioToolbox/AudioServices.h> 
#import <Foundation/Foundation.h> 
#import "ActorScript.h" 

#import "Script.h" 

#import "Actor.h" 
#import "ActorType.h" 
#import "Assets.h" 
#import "Behavior.h" 
#import "Collision.h" 
#import "CollisionPoint.h" 
#import "Game.h" 
#import "GameModel.h" 
#import "GroupDef.h" 
#import "FadeInTransition.h" 
#import "FadeOutTransition.h" 
#import "Region.h" 
#import "Runnable.h" 
#import "Scene.h" 
#import "SHThumbstick.h" 
#import "Sparrow.h" 
#import "Transition.h" 



@interface Design_190_190_Clicktoplaylevel : ActorScript 
{ 
    @public 
     NSString* tempHolder; 

Scene* _Scenetoplay; 

NSString* _Levellabel; 

float _levelnumber; 

} 
@end 

@implementation Design_190_190_Clicktoplaylevel 

-(void)load 
{ 
     [self addWhenUpdatedListener:nil func:^(NSMutableArray* list, Script* theScript){ 
Design_190_190_Clicktoplaylevel* self = (Design_190_190_Clicktoplaylevel*) theScript; 

        if(([mActor touchedActor] && ([self getGameAttribute:[self asNumber:[NSNumber numberWithFloat:[[self getGameAttribute:@"Highest Level Completed"] floatValue]]]] >= [self asNumber:[NSNumber numberWithFloat:_levelnumber]]))) 
{ 
       [self setGameAttribute:[[self getGameAttribute:@"Current Level"] floatValue] value:[NSNumber numberWithFloat:[self asNumber:[NSNumber numberWithFloat:_levelnumber]]]]; 
       [self switchScene:_Scenetoplay.ID leave:[self createFadeOut:((1000*1)) color:0] enter:[self createFadeIn:((1000*1)) color:0]]; 
} 

}]; 
    [self addWhenDrawingListener:nil func:^(SPRenderSupport* g, int x, int y, BOOL screen, NSMutableArray* list, Script* theScript){ 
Design_190_190_Clicktoplaylevel* self = (Design_190_190_Clicktoplaylevel*) theScript; 
     if(([self getGameAttribute:[self asNumber:[NSNumber numberWithFloat:[[self getGameAttribute:@"Highest Level Completed"] floatValue]]]] >= [self asNumber:[NSNumber numberWithFloat:_levelnumber]])) 
{ 
      [mActor setAnimation:@"Animation 1"]; 
      [[Game game] setFont:[ self getFont:52] size:1]; 
      [[Game game] drawString:_Levellabel x:(([mActor getWidth] - [[Game game] getWidthForString:[ self getFont:52] string:_Levellabel])/2) y:30]; 
} 

     else 
{ 
      [mActor setAnimation:@"Animation 0"]; 
} 

}]; 
    [self addWhenUpdatedListener:nil func:^(NSMutableArray* list, Script* theScript){ 
Design_190_190_Clicktoplaylevel* self = (Design_190_190_Clicktoplaylevel*) theScript; 
        if(([mActor touchedActor] && (([self getGameAttribute:[self asNumber:[NSNumber numberWithFloat:[[self getGameAttribute:@"Highest Level Completed"] floatValue]]]] <= [self asNumber:[NSNumber numberWithFloat:5]]) && [[Game game] purchasedProduct:@"MyID"]))) 
{ 
       [self setGameAttribute:[[self getGameAttribute:@"Current Level"] floatValue] value:[NSNumber numberWithFloat:[self asNumber:[NSNumber numberWithFloat:_levelnumber]]]]; 
       [self switchScene:_Scenetoplay.ID leave:[self createFadeOut:((1000*1)) color:0] enter:[self createFadeIn:((1000*1)) color:0]]; 
} 

      else if((([mActor touchedActor] && [self sameAs:[self getGameAttribute:[self asNumber:[NSNumber numberWithFloat:[[self getGameAttribute:@"Highest Level Completed"] floatValue]]]] two:[NSNumber numberWithFloat:[self asNumber:[NSNumber numberWithFloat:5]]]]) && !([[Game game] purchasedProduct:@"MyID"]))) 
{ 
       return; 
} 


}]; 

} 




-(void)forwardMessage:(NSString*)msg 
{ 
+0

如果您还发布了那些错误引用的文件的源代码,这将会很有用。 – Juampi

+0

请发布您的getGameAttribute和asNumber方法实现。 –

+0

我不太理解你的意思。 – user2422226

回答

0

它看起来li在所有三种情况下,问题都是一样的 - 你试图比较NSNumber对象。比较运算符(您的案例中的<= & >=)不会超载为接受NSNumber

NSNumber本身有三种方法:isEqualToNumber:,isEqual:compare:;它将比较两个NSNumber实例。

也可以使用floatValueinValue比较NSNumber的价值。因此,例如,你最后的比较可能是:

[self getGameAttribute:@"Highest Level Completed"].intValue <= 5 

或使用方法,而不是财产,语法:

[[self getGameAttribute:@"Highest Level Completed"] intValue] <= 5 

BTW你似乎有你的游戏等级存储为一个浮点数。我显然不知道你的应用程序,但将它作为一个整数存储似乎更合乎逻辑,并避免了浮点舍入(取决于你对它们执行的操作)的问题。

+0

非常感谢您的帮助。我已经修复了其中两个58和73,但不知何故,我仍然得到了第49行的错误。你能告诉我你将如何解决这个问题(第49行)? :if(([mActor touchedActor] &&([self getGameAttribute:@“Highest Level Completed”]> = [self asNumber:[NSNumber numberWithFloat:_levelnumber]])) – user2422226

+0

@ user2422226 - 49中的比较与58分之一,所以需要的变化应该是相同的。你的expr'[self asNumber:[NSNumber numberWithFloat:_levelnumber]]'*看起来很奇怪。它需要一个浮点数(本身很奇怪,请参阅BTW的答案),从它构造一个'NSNumber'对象,然后将它传递给一个返回一个'NSNumber'对象的方法...'asNumber'做什么&你为什么首先使用所有这些'NSNumber'对象?这些q不能从所示的代码中回答。我想你可能会对'NSNumber'对象的使用和需求感到困惑。 – CRD

+0

感谢qucik回复,是的我有点困惑的NSNumber对象,我也是新来的objective-c。顺便说一句,注意到(将从现在开始,但我都完成了这个游戏,所以不会这样做,直到下一个)。我实际上发现58没有正常工作,这是代码行58:'if(([self getGameAttribute:@“Highest Level Completed”]> = [self asNumber:[floatValue:_levelnumber])))' – user2422226

相关问题