나는 현재 만들고있는 앱으로 거의 끝났지 만, 내가 필요로하는 기능 하나를 찾아내는 데 어려움을 겪고있다. 나는 임의의 간격과 위치에 화면에 떨어지는 5 가지 스프라이트를 가지고있다. 내 문제는 내 코드에서 특정 시간 (예 : 20 초) 동안 한 번에 하나의 스프라이트 만 표시된다는 것입니다. 그런 다음 20 초 후에 더 많은 시간이 동시에 떨어집니다. 스프라이트를 삭제할 때 내 메서드가 어떻게 표시되는지는 다음과 같습니다.스프라이트의 모양을 지연시키는 방법은 무엇입니까?
//The init method
-(id) init
{
if((self=[super init])) {
//Enable touch
self.isTouchEnabled = YES;
//Allocate and initialise
sprites = [[NSMutableArray alloc]init];
CGSize winSize = [[CCDirector sharedDirector]winSize];
//Add the sprites
[self schedule:@selector(scheduleDrop:)interval:2.0];
}
return self;
}
//Method to drop sprites
-(void)spriteDrop
{
CGSize winSize = [[CCDirector sharedDirector]winSize];
int RandomX = (arc4random() % 200);
NSString *strSprite = @"1.png";
switch(arc4random() % 5){
case 1:
strSprite = @"1.png";
break;
case 2:
strSprite = @"2.png";
break;
case 3:
strSprite = @"3.png";
break;
case 4:
strSprite = @"4.png";
break;
case 5:
strSprite = @"5.png";
break;
}
sprite = [CCSprite spriteWithFile:strSprite];
sprite.position = ccp(RandomX, 500);
sprite.scaleX = 40/sprite.contentSize.width;
sprite.scaleY = 150/winSize.height;
int posMinY = sprite.contentSize.width/2;
int posMaxY = winSize.height - sprite.contentSize.height/2;
int range = posMaxY - posMinY;
int actual = (arc4random()%range);
currentPos = actual;
[self addChild:baby];
int minDur = 2.0;
int maxDur = 5.0;
int rangeDur = maxDur - minDur;
int actualDur = (arc4random()%rangeDur) + minDur;
id drop = [CCMoveTo actionWithDuration:actualDur position:ccp(actual, -sprite.contentSize.height/2)];
id dropDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteDropDone:)];
[sprite runAction:[CCSequence actions:drop, dropDone, nil]];
sprite.tag = 1;
[sprites addObject: sprites];
}
//This is the method that schedules the drop
-(void)scheduleDrop:(ccTime)dt
{
[self spriteDrop];}
이 문제를 해결할 수있는 누군가가 있기를 바랍니다.
그것은 내가 변경할 것을 포기 스프라이트의 수입니다. 나는 아직도 cocos2d와 objective-c를 배우고 있으므로 나는 ivar을 어떻게 사용하는지 이해하지 못한다. 좋은 예가있는 예나 링크를 보여 주시겠습니까? – user1597438
ivar는 클래스 와이드 변수입니다. 다음과 같은 메소드보다 먼저 구현 파일에 NSInteger를 정의하면됩니다. NSInteger _nameOfIvar; –
내가 볼 수 있듯이 스프라이트의 번호는 전혀 보내지지 않습니다. 항상 2 초마다 새로운 것을 만드는 것입니다. 아, 그리고 spriteDropDone 메서드는 무엇을합니까? –