从当前位置围绕固定点旋转

Posted

技术标签:

【中文标题】从当前位置围绕固定点旋转【英文标题】:Rotating around a fixed point from current position 【发布时间】:2015-05-02 10:06:17 【问题描述】:

需要围绕一个固定点移动一个精灵。需要注意的是,运动应该从精灵的“当前位置”开始。

偏移角度,即使用幻数,并没有真正做到这一点,因为如果精灵和固定点之间的距离发生变化,它会有所不同。

参考图片:

本地 block1Texture = Texture.new("block1.png",true) 本地块1 = Bitmap.new(block1Texture) block1:setAnchorPoint(0.5,0.5) 阶段:addChild(block1) block1:setPosition(50,50) 本地 block2Texture = Texture.new("block2.png",true) 本地块2 = Bitmap.new(block2Texture) block2:setAnchorPoint(0.5,0.5) 阶段:addChild(block2) block2:setPosition(350,450) 本地 block3Texture = Texture.new("block3.png",true) 本地块3 = Bitmap.new(block3Texture) block3:setAnchorPoint(0.5,0.5) 阶段:addChild(block3) block3:setPosition(300,700) 本地计时器 = Timer.new(500, 1) 本地rotateAroundBlock = block2 函数 getCharAngleFromRope(startX, startY, targetX, targetY) 本地 xdiff = targetX - startX 本地 ydiff = targetY - startY 本地 ang = math.atan2( ydiff, xdiff ) ang = math.deg(ang) + 90.0 如果 ang =application:getDeviceWidth()) 那么 --打印(“1”) --px = block3:getX() 结尾 如果(py=应用程序:getContentHeight())然后 --打印(“2”) --py = block3:getY() --px = block3:getX() 结尾 block3:setPosition(px,py) 结尾 dist = math.sqrt((rotateAroundBlock:getX()-block3:getX())^2+(rotateAroundBlock:getY()-block3:getY())^2) 角度 = getCharAngleFromRope(block3:getX(),block3:getY(),rotateAroundBlock:getX(),rotateAroundBlock:getY()) 计时器:addEventListener(Event.TIMER_COMPLETE,onTimerComplete) 函数 startMoving() 计时器:开始() 结尾 阶段:addEventListener(Event.TOUCHES_BEGIN,startMoving)

【问题讨论】:

和往常一样:翻译、旋转、翻译。 如果你只使用 a+rCos(t), b+rSin(t),并从 0 - 360 开始 t,那么它会从那个点开始移动 (a,b)。需要它从当前位置移动,所以我试图计算精灵和固定点之间的当前角度,但我错过了一些东西,因为它现在没有从确切的当前位置开始。 那是因为旋转不是围绕当前位置发生,而是围绕原点发生。 【参考方案1】:

解决了。对于其他对此感到困惑的人,对于 math.cos 和 math.sin,参数值必须是弧度而不是度数。像魅力一样工作。

【讨论】:

以上是关于从当前位置围绕固定点旋转的主要内容,如果未能解决你的问题,请参考以下文章

旋转时固定位置

如何围绕指定的锚点旋转 2D 容器小部件?

旋转平面使其具有一定的法向量

设置后更改固定的 Physicsbody 位置

前端如何实现div在固定角度缩放

Unity3D视图中心 ( 视图中心概念 | 围绕游戏物体旋转 | 添加游戏物体到游戏场景的位置 )