Я использую учебник , чтобы сделать одно простое приложение. И в отличие от примера приложения, я хочу показать свой снаряд / объект с самого начала, а не на ощупь. Для того же, я делаю так:
-(id) init
{
if((self=[super init]))
{
[[SimpleAudioEngine sharedEngine]setEnabled:TRUE];
winSize = [CCDirector sharedDirector].winSize;
projectile = [CCSprite spriteWithFile:@"abc.png"];
projectile.position = spriteOffset;
self addChild:projectile];
self.isTouchEnabled = YES;
//some other code
}
}
И затем при прикосновении к тому же объекту / снаряду, мне нужно переместить его в направлении, в котором я его переместил. Я делаю ниже для того же:
- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
// Choose one of the touches to work with
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
// Determine offset of location to projectile
int offX = location.x - projectile.position.x; //Projectile returns 0X0 here
int offY = location.y - projectile.position.y;
float scalarX = 1.0f;
if (offX < 0.0f)
scalarX = -1.0f;
int realX = scalarX * (winSize.width + (projectile.contentSize.width/2));//winSize.width + (food.contentSize.width/2);
float ratio = (float) offY / (float) offX;
int realY = (realX * ratio) + projectile.position.y;
CGPoint realDest = ccp(realX, realY);
int offRealX = realX - projectile.position.x;
int offRealY = realY - projectile.position.y;
float length = sqrtf((offRealX*offRealX)+(offRealY*offRealY));
float velocity = 480/1; // 480pixels/1sec
float realMoveDuration = length/velocity;
[projectile runAction:[CCSequence actions:
[CCMoveTo actionWithDuration:realMoveDuration position:realDest],
[CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)],
nil]];
[_projectiles addObject:projectile]; //ERROR SIGABRT
}
В приведенном выше коде, в этой строке int offX = location.x - projectile.position.x;
мой спрайт возвращается в 0X0. Я не понимаю, где я делаю ошибку. Сначала он показывает объекты на экране, но при сенсорном событии он исчезает. Я также синтезировал CCSprite, но в Vail. Есть ли какой-то другой путь или какая-то ошибка, которую я совершаю? Пожалуйста, помогите, если есть идеи. Спасибо.
ERROR : Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'