我有像 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];
}
谢谢,我希望这会得到解决......
答案 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体,所以当世界步进时精灵被移动到一个位置屏幕外。修复是在我将精灵放置在场景中时设置物体的位置。