我正在使用Android Studio中的游戏,该游戏的对象围绕屏幕中心旋转。我的问题是,由于某种原因,在旋转对象后,x和y位置保持不变(我猜是因为画布旋转后它仍然在该画布中具有相同的点)。我需要x和y坐标来计算碰撞检测。在意识到x和y没有改变之后,我试图编写一个函数,它将使用基本的trig来计算x和y但是由于某种原因它也吐出了奇怪的值(也在下面附上)。我的问题是如何在主画布中找到此对象的x和y位置?先谢谢,代码如下。
`private int x; private int y;
private int getPlayerX(int rotation){
double angleA;
double angleC;
double sideC;
double sideA;
angleA = 180 - ((180 - rotation) + 90);
sideC = Constants.width / 2 + Constants.height / 8;
angleC = 180 - rotation;
sideA = ((Math.sin(angleA) * sideC)) / (Math.sin(angleC));
playerx = Constants.width / 2 + (int) sideA;
return playerx;
}
private int getPlayerY(int rotation){
double sideC;
double angleC;
double angleB;
double sideB;
sideC = Constants.width / 2 + Constants.height / 8;
angleC = 180 - rotation;
angleB = 90;
sideB = sideC * (Math.sin(angleB)) / (Math.sin(angleC));
playery = Constants.height + (int) sideB;
return playery;
}
下面的代码是我尝试找到x和y坐标,但它只吐出奇怪的值,我找不到问题。这段代码是我的主要课程。
`
<a id="a1" href="https://www.google.ca">Google</a>
<button onclick="changeAudio(event)">Click Me</>
<script>
var a1 = document.getElementById('a1')
function changeAudio(e){
e.preventDefault()
var audio = document.createElement('audio')
audio.src = a1.href
document.body.appendChild(audio)
}
</script>
答案 0 :(得分:0)
尝试查看矩阵。这是定义对象转换的更好实践。 看这里https://en.m.wikipedia.org/wiki/Transformation_matrix 例如:
public Player(){
//...
//matrix 3x3 with all transformations you need
Matrix3f m;
void rotate(float angle) {
Matrix3f rot = new Matrix3f();
rot.data = {cos(angle), -sin(angle), 0.0,
sin(angle), cos(angle), 0.0,
0.0, 0.0, 1.0 }
m.Multiply(rot);
}
//get the world position of a local point
vec2f getWorld(vec2f inPt) {
vec3f p = vec3f(inPt.x, inPt.y, 1.0);
p = m.Transform(p);
return vec2f(p.x, p.y);
}
//get the local position of a world point
vec2f getLocal(vec2f inPt) {
Matrix3f invM = m.Invert();
vec3f p = vec3f(inPt.x, inPt.y, 1.0);
p = invM.Transform(p);
return vec2f(p.x, p.y);
}
使用Transform,Invert,Multiply等方法的类Matrix3f,vec3f,vec2f你应该自己提供(你可以在网络中找到很多代码示例)