【问题标题】:Cocos2d sprite's parent not reflecting true scale valueCocos2d sprite 的父级不反映真实的比例值
【发布时间】:2013-07-01 08:24:27
【问题描述】:

我在确定 CCSprite 的父节点的比例值时遇到问题。

在我的游戏中,我有一个扩展 CCLayer 并根据游戏触发器扩展自身的类。此 CCLayer 的某些子精灵具有数学计算,一旦我缩放父 CCLayer,就会变得不准确。例如,我有一个坦克精灵,它需要在父节点中确定它的点火点。

每当我缩放图层并询问图层的缩放值时,它们都是准确的。但是,当我轮询图层中包含的精灵以获取其父级的比例值时,它们始终显示为一个。

// From within the sprite
CCLOG(@"ChildSprite-> Parent's scale values are scaleX: %f, scaleY: %f",
      self.parent.scaleX, self.parent.scaleY); // Outputs 1.0,1.0

// From within the layer
CCLOG(@"Layer-> ScaleX : %f, ScaleY: %f , SCALE: %f",
      self.scaleX, self.scaleY,     self.scale); // Output is 0.80,0.80

谁能向我解释为什么会这样?我不明白为什么这些值不同。可能我对 Cocos2d 的内部设计不是很了解。任何帮助表示赞赏。

编辑:这是我用来将精灵插入图层的代码

EarthTank * earthTank = [[EarthTank alloc] initWithWorld:self->world  
atLocation:spawnPointRight withID:pid];
earthTank.tankShaft = shaft; 
[earthTank createInitialArsenal:tempPlayer];
[earthTank addAndAlignTankShaft];
[spriteBatchNode addChild:earthTank z:2];

所以问题是 self.parent(在 sprite 中调用)引用 SpriteBatchNode 而不是层本身。如果您更改对 self.parent.parent 的调用,您可以找到图层的真实比例值。

【问题讨论】:

    标签: ios objective-c cocos2d-iphone


    【解决方案1】:

    听起来 self.parent 实际上并不是层。检查一下。

    【讨论】:

    • 感谢您的回复。这可能与我使用 spritBatchNode 的事实有关吗?这意味着父级是 spriteBatchNode,其比例为 1
    • 好的,将调用更改为 self.parent.parent 并准确反映了比例。感谢您为我指明正确的方向。
    【解决方案2】:

    每个CCNode都有一个独立的尺度,但是从父节点向下(嵌套)的尺度是累积的。

    例如。父母规模将影响其死者的所有对象,但孩子不会影响其父母。

    例如,如果父图层以 50% 的比例缩放,那么所有子图层在显示时都会考虑 50%,即使单个对象的缩放比例为 100%。

    数学存在,0.50 * 1.00 = 0.50

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多