cocos2d中精灵位置的问题

时间:2014-03-13 20:06:29

标签: ios cocos2d-iphone resolution ccsprite

我有一个精灵,我想用作背景图片(使用cocos2d)。

CCSprite *abc =[CCSprite spriteWithImageNamed:@"background.png"];    
abc.position  = ccp(self.contentSize.width/2,self.contentSize.height/2);

第一张图片是原创图片,第二张图片是模拟器的截图。图像分辨率为640/1136。我该怎么做才能适应屏幕的所有空间?我怎么找到它?

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

您可以使用缩放图像以适应设备高度,或者只使用4英寸iPhone和3.5英寸的单独图像

缩放

abc.scaleY = winSize.height/abc.contentSize.height;

特定图片

   if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        if([[UIScreen mainScreen] bounds].size.height == 568)
        {
            // iPhone 5 add different image
        }
        else
        {
            // add 3.5 screen image
        }
    }

答案 1 :(得分:1)

您使用的代码是正确的。

您得到的结果并非您的预期,因为您可能在非Retina屏幕上加载了Retina图像。

点击此处Cocos2d Naming conventions了解详情。

对于您选择太阳的背景图像,我假设您希望它始终位于右上角。 (这对我来说比对中心更有意义。)

现在,实现此目标的优雅解决方案是为您已创建的 4英寸屏幕获取图像,并定义规则以使其左上角始终为在屏幕的左上角。对于 3.5英寸屏幕,这将被剪裁。

现在,首先要将锚点定义为

_background.anchorPoint = ccp(1.0f, 1.0f);

这将告诉Cocos相对于右上角定位背景。

现在你可以继续定位它,使它始终位于屏幕的上角。

background.position = ccp(self.scene.bounds.size.width, self.scene.size.height);

这将是执行此操作的标准和最佳方式。结果和好处:

  • 适用于 3.5和4英寸屏幕,无需特定图像尺寸
  • 简单,没有不必要的代码,特别是UI_INTERFACE_IDIOM测试
  • 大多数人都这样做的方式

另一种定位在右上角的方式

您还可以在reference中查看positionType的新CCNode媒体资源。 CCPositionUnitNormalized可以帮助您定义一个定位规则,类似于将此位置定位到父容器的100%宽度和100%高度。它会是这样的。

_background.positionType = CCPositionUnitNormalized;
_background.position = ccp (1.0f, 1.0f);

并且如果您更喜欢这种语法,则会得到相同的结果。

答案 2 :(得分:0)

我不确定“自我”是什么引用,但我认为它是一个层。您似乎试图将图像置于屏幕中心,或者您需要根据屏幕的大小来偏移它。如果是这样,您应该获得屏幕尺寸,因为无论屏幕的分辨率如何,您都可以正确放置图像。我正在使用Cocos2d 2.1。

CGSize winSize = [CCDirector sharedDirector].winSize

这是winSize的分数。您还可以以像素为单位获取winSize:

CGSize winSizeInPixels = [CCDirector sharedDirector].winSizeInPixels;

使用最适合您的方法。然后,您可以使用以下内容居中图像,例如:

abc.position = ccp(winSize.width / 2, winSize.height / 2);

无论您是否尝试使图像居中,知道屏幕尺寸将允许您根据该屏幕尺寸放置图像,以使其正确显示。

显然,必须解决图像的大小以及是否填满屏幕的问题。

我希望这会有所帮助。