2013-05-26 78 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

相關問題