擅长:python、mysql、java
<p><strong>更新回复</strong></p>
<p>下面的伪代码可能会起作用:</p>
<pre><code>...
middleX1 = sprite1.texture.width/2
middleY1 = sprite1.texture.height/2
middleX2 = sprite2.texture.width/2
middleY2 = sprite2.texture.height/2
angle1 = ? #Radians.
vX11 = -cos(angle1)
vY11 = -sin(angle1)
vX12 = -cos(angle1 + math.pi/2)
vY12 = -sin(angle1 + math.pi/2)
angle2 = ? #Radians.
vX21 = -cos(angle2)
vY21 = -sin(angle2)
vX22 = -cos(angle2 + math.pi/2)
vY22 = -sin(angle2 + math.pi/2)
for ...
for ...
...
aX1 = x1 - middleX1
aY1 = j+offy1 - middleY1
aX2 = x2 - middleX2
aY2 = j+offy2 - middleY2
tX1 = vX11*aX1 + vY11*aY1 + middleX1
tY1 = vX12*aX1 + vY12*aX1 + middleY1
tX2 = vX21*aX2 + vY21*aY2 + middleX2
tY2 = vX22*aX2 + vY22*aX2 + middleY2
#Use tX* and tY* for indexing. Remember to multiply tY* with width.
...
</code></pre>
<p>这是可行的,假设角度是时钟方向和弧度,旋转应该发生在每个精灵的中间。基本上,它是一个向量和矩阵的手工编码。一个更简洁、更易于维护的解决方案将使用矩阵,但我对Python了解不多,所以我决定避免使用。在</p>
<p>数学运算的原理是,对于每个图像中的每个点,找到其相对于中间的相对位置,通过将坐标与单位矢量相乘,沿着旋转的新轴旋转,最后将中间点相加,得到非相对坐标。在</p>