我在我的应用程序中遇到 NSInvalidArgumentException 错误...任何擅长此操作的人请帮助我

Posted

技术标签:

【中文标题】我在我的应用程序中遇到 NSInvalidArgumentException 错误...任何擅长此操作的人请帮助我【英文标题】:i Got NSInvalidArgumentException error in my app... anyone good at this please help me 【发布时间】:2012-04-02 17:10:31 【问题描述】:

我正在尝试在我的游戏中添加不同的关卡。在玩游戏时分数会上升并达到一定分数然后级别会改变。那是我的计划,但我写了一个类似'spiderupdate:(cctime)delta'的代码,如你所见。我很确定这是问题所在,当我不放“如果”并且只使用一个级别时,它不会崩溃。 谁能帮我弄清楚如何解决它。

错误是这样的 'NSInvalidArgumentException',原因:'-[Play texture]: unrecognized selector sent to instance 0xf57da10'

Play 是我的类名,纹理应该是方法,但我没有任何名为纹理的方法。

-(void) spidersUpdate:(ccTime)delta 
// Try to find a spider which isn't currently moving. 
for (int i = 0; i < 10; i++)

    int randomSpiderIndex = CCRANDOM_0_1() * [spiders count]; 
    CCSprite* spider = [spiders objectAtIndex:randomSpiderIndex];
    // If the spider isn't moving it won’t have any running actions.
    if ([spider numberOfRunningActions] == 0)
       
        if(currentScore<=30)
            [self level1:spider];
        else if(31<=currentScore<=60)
            [self level2:spider];
        else if (61<=currentScore<=90) 
            [self level3:spider];
        
        else if (91<=currentScore<=120) 
            [self level4:spider];
        
        else if (120<=currentScore) 
            [self level5:spider];
        
        break;
        // Only one spider should start moving at a time.
        

 


-(void) level1:(CCSprite*)spider 
// Slowly increase the spider speed over time. 
numSpidersMoved++;
if (numSpidersMoved % 8 == 0 && spiderMoveDuration > 2.0f) 
    spiderMoveDuration -= 0.2f; 
CGPoint belowScreenPosition = CGPointMake(spider.position.x,
                                          -10);
CCMoveTo* move = [CCMoveTo actionWithDuration:spiderMoveDuration

                                     position:belowScreenPosition]; 
CCCallFuncN* callDidDrop =[CCCallFuncN actionWithTarget:self selector:@selector(spiderDidDrop:)];
CCSequence* sequence = [CCSequence actions:move, callDidDrop, nil];
if ([spider runAction:sequence])

    currentScore++;




-(void) level2:(CCSprite*)spider

numSpidersMoved++;
if (numSpidersMoved % 8 == 0 && spiderMoveDuration > 2.0f) 
    spiderMoveDuration -= 0.2f; 

// Slowly increase the spider speed over time. 
CGPoint belowScreenPosition = CGPointMake(spider.position.x,
                                          -10);
CCMoveTo* move = [CCMoveTo actionWithDuration:spiderMoveDuration position:belowScreenPosition];
CCActionEase*esay=[CCEaseExponentialIn actionWithAction:move];
CCCallFuncN* callDidDrop =[CCCallFuncN actionWithTarget:self selector:@selector(spiderDidDrop:)];
CCSequence* sequence = [CCSequence actions:esay, callDidDrop, nil];
if ([spider runAction:sequence])

    currentScore++;


-(void) level3:(CCSprite*)spider

numSpidersMoved++;
if (numSpidersMoved % 8 == 0 && spiderMoveDuration > 2.0f) 
    spiderMoveDuration -= 0.2f; 

// Slowly increase the spider speed over time. 
CGPoint belowScreenPosition = CGPointMake(spider.position.x,
                                          -10);
CCMoveTo* move = [CCMoveTo actionWithDuration:spiderMoveDuration position:belowScreenPosition];
CCActionEase*esay=[CCEaseExponentialInOut actionWithAction:move];
CCCallFuncN* callDidDrop =[CCCallFuncN actionWithTarget:self selector:@selector(spiderDidDrop:)];
CCSequence* sequence = [CCSequence actions:esay, callDidDrop, nil];
if ([spider runAction:sequence])

    currentScore++;
    


-(void) level4:(CCSprite*)spider

numSpidersMoved++;
if (numSpidersMoved % 8 == 0 && spiderMoveDuration > 2.0f) 
    spiderMoveDuration -= 0.2f; 

// Slowly increase the spider speed over time. 
CGPoint belowScreenPosition = CGPointMake(spider.position.x,
                                          -10);
CCMoveTo* move = [CCMoveTo actionWithDuration:spiderMoveDuration position:belowScreenPosition];
CCActionEase*esay=[CCEaseExponentialOut actionWithAction:move];
CCCallFuncN* callDidDrop =[CCCallFuncN actionWithTarget:self selector:@selector(spiderDidDrop:)];
CCSequence* sequence = [CCSequence actions:esay, callDidDrop, nil];
if ([spider runAction:sequence])

    currentScore++;


-(void) level5:(CCSprite *)spider
   numSpidersMoved++;
ccTime delayTime=2.5f;
if (numSpidersMoved %8 == 0 && delayTime>1.0f)

    delayTime-=0.2f;

CGPoint dropALittleBit= CGPointMake(spider.position.x, 350);
CGPoint belowScreenPosition= CGPointMake(spider.position.x, -10);
CCMoveTo*move =[CCMoveTo actionWithDuration:0.8 position:dropALittleBit];
CCDelayTime*delay=[CCDelayTime actionWithDuration:delayTime];
CCMoveTo*drop=[CCMoveTo actionWithDuration:0.3f position:belowScreenPosition];
CCCallFuncN*callDidDrop=[CCCallFuncN actionWithTarget:self selector:@selector(spiderDidDrop:)];
   if ([spider runAction:[CCSequence actions:move,delay,drop,callDidDrop, nil]])

   currentScore++;


-(void) spiderDidDrop:(id)sender 
// Make sure sender is actually of the right class.
NSAssert([sender isKindOfClass:[CCSprite class]], @"sender is not a CCSprite!"); 
CCSprite* spider = (CCSprite*)sender;
// move the spider back up outside the top of the screen
CGPoint pos = spider.position;
CGSize screenSize = [[CCDirector sharedDirector] winSize];
pos.y = screenSize.height + [spider texture].contentSize.height; 
spider.position = pos;

【问题讨论】:

我在大量源代码转储中看到的对“texture”的唯一引用是您尝试在spiderDidDrop: 方法中分配pos.y 的位置。那是抛出异常的地方吗? sry 伙计们,我正在使用纹理来计算敌人和玩家的大小。我想问的是,当我只使用“level1:”方法时没有问题,但是如果我使用其他方法,即使我单独使用其他级别方法也会带来错误。 【参考方案1】:

这是一个链接http://www.cocos2d-iphone.org/api-ref/0.99.0/interface_c_c_sprite.html 其中告诉 CCCsprite 的属性,您可以看到没有属性作为纹理,因此如果您愿意,请查看并使用 textureRect 属性。

希望对你有帮助

【讨论】:

以上是关于我在我的应用程序中遇到 NSInvalidArgumentException 错误...任何擅长此操作的人请帮助我的主要内容,如果未能解决你的问题,请参考以下文章

我在我的项目中运行 Nodemon 时遇到问题[关闭]

我在我的页面的 php 登录中添加一个简单的记住我功能时遇到问题?

在我的 Windows 窗体应用程序中遇到 Sqlcompact 数据库问题

在我的 css 中不断遇到资产预编译错误...不知道为啥

在我的刮刀中使用 lambda 函数时遇到问题

我在我的 Discord 机器人上添加“自动审核”功能时遇到问题