cocos2d-x Actor不会移动到触摸位置

时间:2014-06-07 00:09:57

标签: cocos2d-x

我试图让演员跟随玩家的手指(长时间触摸)。我很肯定我的数学是正确的,但演员无法准确地移动到玩家所触及的位置。

以下是我的问题的说明:

enter image description here

当触摸靠近顶部时,演员超出顶部的可见场景。 当触摸靠近底部时,演员离开底部的可见场景。 左右相同。

当在场景中间执行触摸时,演员完美地移动到触摸。简而言之,触摸远离中间越远,演员与触摸之间的距离越明显。换一种说法;触摸越接近中间,演员越接触触摸。

请注意,当触摸接近底部或顶部时,触摸和演员之间的距离更明显,然后触摸是在右侧或左侧;因为上/下距离中点更远。

以下是用于跟随演员触摸的代码:

郎:卢娜 Lib:Cocosd2-x 3.1

local velocity = 1.4
local x, y = self.sprite:getPosition()
-- self.dest[X/Y] are cached coordinates to where the actor should move next.
local angle = math.atan2(touch.y - y, touch.x - x)
local deltaX = velocity * math.cos(angle)
local deltaY = velocity * math.sin(angle)
local newX = x + deltaX
local newY = y + deltaY
self.sprite:setPositionX(newX)
self.sprite:setPositionY(newY)

我尝试过的事情:

  • 更改了背景图层和精灵的比例。没有变化
  • 更改了用于计算角度的算法。没有变化。
  • 创建一个红点并将其位置设置为精确的触摸x / y,以确定在确定actor的点时是否存在一些奇怪的转换问题。红点总是触手可及。

1 个答案:

答案 0 :(得分:0)

发现了这个问题。当我创建Actor精灵时,我将其z-index设置为100.当我取消注释设置z-index的调用时,一切都运行良好。在我的情况下,这个特殊的精灵必须始终高于所有其他精灵。我为解决这个问题所做的是将z-index设置得比我最初设置的低得多;结果是15岁。

sprite:setPositionZ(15)

根据我的观察,似乎精灵在其位置上应用了某种类型的比例,z-index是精灵中的较大者。

更新1

使用:setPositionZ(int)在某些情况下会不必要地扩展你的精灵。我现在使用:setGlobalZOrder(int)取得了更好的成功:

sprite:setGlobalZOrder(15)