雪碧突然消失了Cocos2d

时间:2012-01-12 03:19:52

标签: iphone ios cocos2d-iphone

我有像 doodlejump

这样的游戏

我在播放器上插入了一些怪物和子弹

玩家发射子弹并删除目标

我向两者插入了一个nslog,所以我知道子弹是否会触发并且目标显示

所有在模拟器ios 4.0中都能顺利运行

但是每当我在设备上安装它时

子弹和目标似乎没有出现(是的,只有那两个游戏仍在顺利运行)

但每次我检查控制台时,我都可以看到子弹和目标的nslog

我尝试了3种不同的手机ios 4.0,5.0和4.2

现在我很困惑,如果似乎是什么问题

我在谷歌检查了同样的问题,但我似乎找不到一个

我还检查了拼写和小问题但仍然在发生。

什么似乎导致了这个问题?


  

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 个答案:

答案 0 :(得分:2)

奇。要快速尝试的事情是:

  • 从设备本身删除应用程序(按住应用程序图标,直到出现'x'并删除它)然后执行干净的构建。这将强制在手机上更换所有资产。

  • 您是否启用了视网膜支持?如果是这样,你的资源中有一个名为'him-hd.png'的文件是否已损坏?如果检测到视网膜设备,它会尝试先加载那个。

  • 在视网膜设备的模拟器上是否会失败?您可以在iOSSimulator菜单栏中更改正在模拟的设备。

  • 当您将图像添加到项目中时,您是否选择了“将项目复制到目标组的文件夹(如果需要)”?这很重要,否则图像将不包含在

  • 最后,您是否检查了图像的目标成员资格,以便将其设置为应用目标?您可以通过在xCode中选择图像并查看File Inspector-&gt; Target Membership来检查这一点。应用程序旁边应该有一个检查。

答案 1 :(得分:1)

之前未提及的一条建议:确保文件名的大小写匹配!

例如,如果文件名是“Him.png”并且您在cocos2d中将图像加载为“him.png”,则这将在模拟器上运行但在设备上失败,因为iOS设备具有区分大小写的文件系统。

顺便提一下,这不仅限于iOS设备。 Mac OS X用户还可以选择安装区分大小写的文件系统,这可能会造成同样的问题。

出于这个原因,最好完全避免使用文件名中的大写字母。

答案 2 :(得分:0)

我有类似的问题,请检查您创建的对象的Z索引。

你可能正在渲染它们但是你正在渲染它们,因为你的背景有更高的值(负数接近0),然后是子弹和目标。

检查你的_targets&amp; _projectiles正在做他们可能正在改变Z值

对于良好的措施,做一个清洁&amp;清洁构建

<强>清洁

产品&gt;清洁

清洁构建

产品&gt;保持选项(在键盘上)&amp;单击清洁(应更改为清洁构建)

答案 3 :(得分:0)

问题已解决:

我不认为这是正确的方法......但我尝试删除actionMoveDone行

当我删除它时精灵正常工作似乎导致了这个问题..

我仍然想知道为什么会这样......

感谢所有回复的人......

答案 4 :(得分:0)

我知道这个问题已经解决了,但这可能有助于其他人...我的问题是将精灵添加到场景中的代码也设置了box2d体,所以当世界步进时精灵被移动到一个位置屏幕外。修复是在我将精灵放置在场景中时设置物体的位置。