Xcode Cocos2D精灵约束到屏幕
我对Cocos2D有问题。我试图让一个精灵在屏幕上移动(我已经做到了),但不要让它被屏幕边缘夹住 如果我是正确的,精灵将作为矩形(spriteWithFile:@“filename.ext”rect:CGRectMake(0,0,X,Y);)导入图层 到目前为止,我唯一能弄明白的事情是设置代码来检测精灵的矩形是否超出了“背景”层,如果超出了,则进行相应的调整 到目前为止,这就是我所拥有的,但它似乎工作不正常:Xcode Cocos2D精灵约束到屏幕,xcode,ios,cocos2d-iphone,Xcode,Ios,Cocos2d Iphone,我对Cocos2D有问题。我试图让一个精灵在屏幕上移动(我已经做到了),但不要让它被屏幕边缘夹住 如果我是正确的,精灵将作为矩形(spriteWithFile:@“filename.ext”rect:CGRectMake(0,0,X,Y);)导入图层 到目前为止,我唯一能弄明白的事情是设置代码来检测精灵的矩形是否超出了“背景”层,如果超出了,则进行相应的调整 到目前为止,这就是我所拥有的,但它似乎工作不正常: - (void)panForTranslation:(CGPoint)translat
- (void)panForTranslation:(CGPoint)translation {
CGSize winSize = [CCDirector sharedDirector].winSize;
float maxX = winSize.width - selSprite.contentSize.width/2;
float minX = selSprite.contentSize.width/2;
float maxY = winSize.height - selSprite.contentSize.height/2;
float minY = selSprite.contentSize.height/2;
if (selSprite.position.x > maxX)
{
selSprite.position = ccp(maxX, selSprite.position.y);
}
else if (selSprite.position.x < minX)
{
selSprite.position = ccp(minX, selSprite.position.y);
}
if (selSprite.position.y > maxY)
{
selSprite.position = ccp(selSprite.position.x, maxY);
}
else if (selSprite.position.y < minY)
{
selSprite.position = ccp(selSprite.position.x, minY);
}
CGPoint newPos = ccpAdd(selSprite.position, translation);
selSprite.position = newPos;
}
-(void)panForTranslation:(CGPoint)translation{
CGSize winSize=[CCDirector sharedDirector].winSize;
float maxX=winSize.width-selSprite.contentSize.width/2;
float minX=selSprite.contentSize.width/2;
float maxY=winSize.height-selSprite.contentSize.height/2;
float minY=selSprite.contentSize.height/2;
if(selSprite.position.x>maxX)
{
selSprite.position=ccp(maxX,selSprite.position.y);
}
else if(selSprite.position.xmaxY)
{
selSprite.position=ccp(selSprite.position.x,最大值);
}
else if(selSprite.position.y
有没有什么明显的东西我遗漏了?如果我拖动精灵,它们会一直从屏幕上移开,我一辈子都想不出来。试试这个:
float maxX = winSize.width - selSprite.contentSize.width/2;
float minX = selSprite.contentSize.width/2;
float maxY = ...;
float minY = ...;
if (selSprinte.position.x > maxX)
{
selSprite.position = ccp(maxX, selSprite.position.y);
}
else if (selSprinte.position.x < minX)
{
selSprite.position = ccp(minX, selSprite.position.y);
}
if (selSprinte.position.y > maxY)
{
selSprite.position = ccp(selSprite.position.x, maxY);
}
else if (selSprinte.position.y < minY)
{
selSprite.position = ccp(selSprite.position.x, minY);
}
float maxX=winSize.width-selSprite.contentSize.width/2;
float minX=selSprite.contentSize.width/2;
浮点最大值=。。。;
浮肉馅饼=。。。;
if(selSprinte.position.x>maxX)
{
selSprite.position=ccp(maxX,selSprite.position.y);
}
else if(selSprinte.position.xmaxY)
{
selSprite.position=ccp(selSprite.position.x,最大值);
}
else if(selSprinte.position.y
为y添加相同的代码。我有一个比屏幕大的精灵。我用了这个:
node.position = CGPointMake(MIN(MAX(size.width - node.contentSize.width /2,node.position.x), node.contentSize.width / 2),
MIN(MAX(size.height - node.contentSize.height/2,node.position.y), node.contentSize.height / 2));
使用这段代码,我的精灵角要么在屏幕外面,要么在屏幕边缘,这有助于我通过滚动查看完整的图像
在这里:
当我在第一行和第二行上构建时,出现错误('CGSize'没有名为'x'的成员)。我在方法(CGSize winSize=[CCDirector sharedDirector].winSize;)的顶部添加了这一行,以允许它进行构建。我想问题是因为我没有在X或Y中定义精灵的contentSize,我会用与窗口相同的方式来定义吗?(CGSize selSprite=[CCDirector sharedDirector].selSprite;)@John:my mystake。CGSize具有名为width和height的属性。我编辑了答案,效果很好,谢谢!我在必要时对Y坐标做了同样的操作(将宽度更改为高度,将X更改为Y/反之亦然),但当我将精灵移动到屏幕的顶部或底部(对于Y代码),它们要么滞后于边缘,要么循环到屏幕的另一侧。我把我原来的代码编辑成现在的样子。@John:我已经编辑了我的答案。你应该独立地检查x和y。我把我的帖子更新为我开始工作的代码。错误来自于我最后两行的elseif{}语句,而不是一起在if循环之外。非常感谢安德鲁!
node = CCSprite
size = [[CCDirector sharedDirector] winSize]