Я работаю над игрой в Android Studio, у которой есть объект, вращающийся вокруг центра экрана. Моя проблема в том, что по какой-то причине после поворота объекта позиции x и y остались прежними (я предполагаю, потому что, поскольку холст вращается, он все еще имеет те же точки в этом холсте). Для расчета обнаружения столкновений мне нужны координаты x и y. Поняв, что x и y не изменились, я попытался написать функцию, которая вычисляла бы x и y с помощью основного триггера, но по какой-то причине она выплевывала странные значения (также прилагается ниже). Мой вопрос заключается в том, как найти положение x и y этого объекта в основном холсте? Спасибо в продвинутом виде, код ниже.Как я могу получить (x, y) объекта в Android Studio, который был повернут?
`private int x; private int y;
private int rotate;
private int width;
private int height;
private int color = Color.rgb(226, 255, 243);
private Paint paint = new Paint();
public Player(){
rotate = 0;
width = Constants.width/10;
height = Constants.height/50;
x = Constants.width/2 - width/2;
y = Constants.height/2 + Constants.height/8;
}
public void setRotate(int rotate){
this.rotate = rotate;
}
public int getRotate(){return rotate;}
public int getX(){return x;}
public int getY(){return y;}
public int getWidth(){return width;}
public int getHeight(){return height;}
public void update(){
if(rotate >= 360){
rotate = 0;
}
}
public void draw(Canvas canvas){
paint.setColor(color);
canvas.save();
canvas.rotate(rotate, Constants.width/2, Constants.height/2);
canvas.drawRect(x, y, x + width, y + height, paint);
canvas.restore();
}
Код ниже моя попытка найти й и у координаты, но он плюет только странные значения, и я не могу найти проблему. Этот код - мой основной класс.
`
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;
}
use 'android.graphics.Matrix' API – pskink
Он вращает объект, но при этом сохраняет x и y в одном и том же месте, как и с canvas.rotate(); функция. –
чего вы хотите достичь на самом деле? поверните холст, затем нарисуйте что-нибудь, затем ...? – pskink