Спрайт внезапно исчезает Cocos2d - PullRequest
0 голосов
/ 12 января 2012

У меня есть такая игра, как doodlejump

Я вставил несколько монстров и пуль на игрока

игрок стреляет пулей и удаляет цель

я вставил nslog в оба, чтобы я знал, стреляет ли пуля, и цель показывает

все работает гладко в симуляторе ios 4.0

но когда я каждый раз устанавливаю его на устройство

кажется, что пуля и цель не появляются ( да, только эти два, игра все еще работает гладко)

но каждый раз, когда я проверяю консоль, я вижу журнал пули и цели

я пробовал на 3 разных телефонах ios 4.0, 5.0 и 4.2

Теперь я в замешательстве, если кажется, что проблема

Я проверил те же проблемы в Google, но я не могу найти один

Я также проверил наличие орфографии и мини-проблем, но все же это происходит.

Что, кажется, вызывает эту проблему?


PS: приложение, над которым я работаю, устарело, это старая версия COCOS2d. Является ли это повлиять на это? Я пытался обновить, но у меня так много ошибок, что я не знаю, поэтому я возвращаюсь к умолчанию.


Монстры появляются примерно на 0,5 с, а затем внезапно исчезают из-за spriteMoveFinished?

вот коды (цель):

-(void)addTarget {

    Sprite *target =[Sprite spriteWithFile:@"him.png"];


    CGSize winSize = [[Director sharedDirector]winSize];
    int minX = winSize.width/6;
    int maxX = winSize.width - target.contentSize.width/2;
    int rangeX = maxX - minX;
    int actualX = (arc4random() % rangeX) + minX;

    target.position = ccp(actualX,500);
    NSLog(@"Location:%f",target.position);
    [self addChild:target];

    int minDuration = 2.0; int maxDuration = 4.0;
    int rangeDuration = maxDuration - minDuration;
    int actualDuration = (arc4random() % rangeDuration)+minDuration;

    id actionMove = [MoveTo actionWithDuration:actualDuration position:ccp(actualX, -target.contentSize.height/2)];
    id actionMoveDone = [CallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
    [target runAction:[Sequence actions:actionMove,actionMoveDone, nil]];   
    target.tag = 1;
    [_targets addObject:target];
}

(пули):

-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    AtlasSpriteManager *spriteManager = (AtlasSpriteManager*)[self getChildByTag:kSpriteManager];
    AtlasSprite *bird = (AtlasSprite*)[spriteManager getChildByTag:kBird];

    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[Director sharedDirector]convertCoordinate:location];


    Sprite *projectile = [Sprite spriteWithFile:@"psn.png"];

    projectile.position = ccp(bird.position.x,bird.position.y);

    CGSize winSize = [[Director sharedDirector]winSize];

    int offX = location.x - projectile.position.x;
    int offY = location.y - projectile.position.y;

    [self addChild:projectile];

    float scalarX = 1.0f;
    if(offX < 0.0f) scalarX = -1.0f;
    int realX = scalarX * (winSize.width + (projectile.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;
    float realMoveDuration = length/velocity;

    [projectile runAction:[Sequence actions:[MoveTo actionWithDuration:realMoveDuration position:realDest],
                           [CallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)], nil]];
    NSLog(@"Shoot!");
    projectile.tag = 2;
    [_projectiles addObject:projectile];


}

Спасибо, я надеюсь, что это будет решено ...

Ответы [ 5 ]

2 голосов
/ 12 января 2012

Одд.Быстро попытайтесь сделать следующее:

  • Удалите приложение с самого устройства (удерживайте значок приложения до появления символа «x» и удалите его), затем выполните чистую сборку.Это приведет к замене всех активов на телефоне.

  • У вас включена поддержка сетчатки?Если да, есть ли в ваших ресурсах файл с именем 'him-hd.png', который поврежден?Сначала он попытается загрузить его, если будет обнаружено устройство с сетчаткой.

  • Не удается ли на симуляторе для устройства сетчатки выполнить сбой?Вы можете изменить моделируемое устройство в строке меню iOSSimulator.

  • Когда вы добавляли изображения в проект, вы выбирали «Копировать объекты в папку целевой группы (при необходимости)?Это важно, так как в противном случае изображения не будут включены в комплект

  • Наконец, вы проверили целевое членство для изображений, чтобы оно было установлено в качестве цели приложения?Вы можете проверить это, выбрав изображение в xCode и посмотрев File Inspector-> Target Membership.Рядом с вашей заявкой должна быть проверка.

1 голос
/ 12 января 2012

Один совет, который не был упомянут ранее: убедитесь, что регистр имени файла совпадает!

Например, если имя файла «Him.png» и вы загружаете изображение как «him.png» в cocos2d, это будет работать на симуляторе, но не работать на устройстве, поскольку устройства iOS имеют чувствительную к регистру файловую систему.

Кстати, это касается не только iOS-устройств. Пользователи Mac OS X также имеют возможность установить чувствительную к регистру файловую систему, которая может представлять такую ​​же проблему.

По этой причине рекомендуется избегать использования заглавных букв в именах файлов.

0 голосов
/ 12 октября 2012

Я знаю, что эта проблема была решена, но это может помочь другим ... моя проблема заключалась в том, что код, который добавлял спрайтов на сцену, также устанавливал тело box2d, поэтому, когда мир наступал, спрайты перемещались в локациюза кадромИсправлено было установить положение тел, когда я поместил спрайт на сцену.

0 голосов
/ 16 января 2012

решен вопрос:

Не думаю, что это правильный путь ... но я попытался удалить строку actionMoveDone

кажется, это вызывает эту проблему, когда я удалил его, спрайты работают нормально ..

Я все еще хочу узнать, почему это происходит ...

Спасибо всем, кто ответил ...

0 голосов
/ 12 января 2012

У меня была похожая проблема, проверьте индекс Z создаваемых вами объектов.

Что может случиться, если вы визуализируете их, но вы отрисовываете их за своим фоном, потому что у вашего фона больше (отрицательное число ближе к 0), чем у пуль и целей.

Проверьте, что ваши _targets & _projectiles делают, они могут изменять значения Z

Также для хорошего измерения сделайте Clean & Clean Build

Clean

Продукты> Чистые

Чистая сборка

Продукты> Вариант удержания (на клавиатуре) и нажмите «Очистить» (должен измениться на «Чистая сборка»)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...