Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 从当前位置绕固定点旋转_Math_Lua_Rotation_Vectormath_Quadratic Curve - Fatal编程技术网

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

Math 从当前位置绕固定点旋转,math,lua,rotation,vectormath,quadratic-curve,Math,Lua,Rotation,Vectormath,Quadratic Curve,需要围绕固定点移动精灵。需要注意的是,运动应该从精灵的“当前位置”开始 偏移角度(即使用幻数)并不能真正做到这一点,因为在精灵和固定点之间的距离发生变化的情况下,角度会有所不同 参考图像: local block1Texture = Texture.new("block1.png",true) local block1 = Bitmap.new(block1Texture) block1:setAnchorPoint(0.5,0.5) stage:addChild(blo

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

偏移角度(即使用幻数)并不能真正做到这一点,因为在精灵和固定点之间的距离发生变化的情况下,角度会有所不同

参考图像:

local block1Texture = Texture.new("block1.png",true) local block1 = Bitmap.new(block1Texture) block1:setAnchorPoint(0.5,0.5) stage:addChild(block1) block1:setPosition(50,50) local block2Texture = Texture.new("block2.png",true) local block2 = Bitmap.new(block2Texture) block2:setAnchorPoint(0.5,0.5) stage:addChild(block2) block2:setPosition(350,450) local block3Texture = Texture.new("block3.png",true) local block3 = Bitmap.new(block3Texture) block3:setAnchorPoint(0.5,0.5) stage:addChild(block3) block3:setPosition(300,700) local timer = Timer.new(500, 1) local rotateAroundBlock = block2 function getCharAngleFromRope(startX, startY, targetX, targetY) local xdiff = targetX - startX local ydiff = targetY - startY local ang = math.atan2( ydiff, xdiff ) ang = math.deg(ang) + 90.0 if ang =application:getDeviceWidth()) then --print("1") --px = block3:getX() end if(py=application:getContentHeight()) then --print("2") --py = block3:getY() --px = block3:getX() end block3:setPosition(px,py) end dist = math.sqrt((rotateAroundBlock:getX()-block3:getX())^2+(rotateAroundBlock:getY()-block3:getY())^2) angle = getCharAngleFromRope(block3:getX(),block3:getY(),rotateAroundBlock:getX(),rotateAroundBlock:getY()) timer:addEventListener(Event.TIMER_COMPLETE, onTimerComplete) function startMoving() timer:start() end stage:addEventListener(Event.TOUCHES_BEGIN, startMoving)

本地block1Texture=Texture.new(“block1.png”,true) 本地block1=位图.new(block1Texture) 块1:设置锚点(0.5,0.5) 阶段:addChild(区块1) 块1:设置位置(50,50) 本地block2Texture=Texture.new(“block2.png”,true) 本地block2=位图.new(block2Texture) 块2:设置锚点(0.5,0.5) 阶段:addChild(区块2) 块2:设置位置(350450) 本地block3Texture=Texture.new(“block3.png”,true) 本地block3=位图.new(block3Texture) 块3:setAnchorPoint(0.5,0.5) 阶段:addChild(区块3) 块3:设置位置(300700) 本地计时器=新计时器(500,1) 本地rotateAroundBlock=block2 函数getCharAngleFromRope(startX、startY、targetX、targetY) 本地xdiff=targetX-startX 本地ydiff=targetY-startY 局部ang=math.atan2(ydiff,xdiff) ang=数学度数(ang)+90.0 如果ang=application:getDeviceWidth()),则 --打印(“1”) --px=block3:getX() 结束 如果(py=application:getContentHeight()),则 --打印(“2”) --py=block3:getY() --px=block3:getX() 结束 块3:设置位置(px,py) 结束 dist=math.sqrt((rotateAroundBlock:getX()-block3:getX())^2+(rotateAroundBlock:getY()-block3:getY())^2) 角度=getCharAngleFromRope(块3:getX(),块3:getY(),rotateAroundBlock:getX(),rotateAroundBlock:getY()) 计时器:addEventListener(Event.timer\u COMPLETE,onTimerComplete) 函数startMoving() 计时器:开始() 结束 阶段:addEventListener(Event.touch_BEGIN,startMoving)
解决了。对于其他在这方面遇到障碍的人,math.cos和math.sin的参数值必须是弧度,而不是度。像一个符咒一样工作。

和往常一样:平移,旋转,平移。如果你只使用a+rCos(t),b+rSin(t),然后从0-360开始t,那么它从该点开始移动(a,b)。需要它从当前位置移动,所以我试图计算精灵和固定点之间的当前角度,但我遗漏了一些东西,因为它现在不是从确切的当前位置开始的。这是因为旋转不是围绕当前位置发生的,而是围绕原点发生的。