我想在我的游戏中添加不同的关卡。虽然玩游戏得分会上升并达到一定的分数然后水平将会改变。这是我的计划,但我写了一个像'spiderupdate:(cctime)delta'的代码,如果你能看到代码。我很确定当我没有把'if'放在那里并且只使用一个级别时它就是问题cus,它可以解决崩溃问题。 任何人都可以帮我弄清楚如何解决它。
并且错误就像这个'NSInvalidArgumentException',原因:' - [播放纹理]:无法识别的选择器发送到实例0xf57da10'
Play是我的类名,纹理应该是方法,但我没有任何名为texture的方法。
-(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;
}
答案 0 :(得分:0)
这是一个链接http://www.cocos2d-iphone.org/api-ref/0.99.0/interface_c_c_sprite.html 告诉CCCsprite的属性,你可以看到没有属性作为纹理,所以如果你愿意,请检查并使用textureRect属性。
希望有所帮助