Я потратил около 5 часов, пытаясь заставить эту вращающуюся штуку работать. Совершенно уверен, что я изучил все связанные темы о stackoverflow, но я не могу понять этого, ну, я могу, мой код просто не работает.
Я делаю это приложение MonoGame и хочу чтобы повернуть этот спрайт вместе с прямоугольником, который он использует для столкновения, вокруг центра указанного спрайта. Я следил за учебником по T, и его прямоугольник, кажется, вращается правильно, а мой - нет, у кого-нибудь есть идеи, как исправить? Я пойду спать после того, как опубликую это, потому что сейчас 10 утра, спасибо.
public Item(Texture2D inTex) {
texture = inTex;
position = new Vector2(400, 400);
int scaledWidth = (int)(texture.Width * SCALEFACTOR);
int scaledHeight = (int)(texture.Height * SCALEFACTOR);
rectangle = new Rectangle((int) position.X, (int) position.Y, scaledWidth, scaledHeight);
Origin = new Vector2(scaledWidth / 2, scaledHeight / 2);
UpdateTransformMatrix();
}
Мой конструктор предметов, я делаю что-то вроде системы инвентаря, и мне нужно перетаскивать предметы. *
public virtual void Draw(SpriteBatch spriteBatch) {
spriteBatch.Draw(texture, position, null, Color.White, rot, Origin, SCALEFACTOR, SpriteEffects.None, 0f);
}
public virtual void Update(GameTime gameTime, MouseState _currState, MouseState _prevState, ref Item controlItem) {
ClickCheck(_currState, _prevState, ref controlItem);
if (controlItem == this) {
int diffX = _currState.X - _prevState.X;
int diffY = _currState.Y - _prevState.Y;
position.X += diffX;
position.Y += diffY;
rectangle.X = (int) position.X;
rectangle.Y = (int) position.Y;
UpdateTransformMatrix();
}
}
private void RotateItem(float rotation) {
rot += rotation;
Vector2 tl = Vector2.Transform(Vector2.Zero, transform);
Vector2 tr = Vector2.Transform(new Vector2(scaledWidth, 0), transform);
Vector2 bl = Vector2.Transform(new Vector2(0, scaledHeight), transform);
Vector2 br = Vector2.Transform(new Vector2(scaledWidth, scaledHeight), transform);
Vector2 min = new Vector2(FindSmallest(tl.X, tr.X, bl.X, br.X), FindSmallest(tl.Y, tr.Y, bl.Y, br.Y));
Vector2 max = new Vector2(FindBiggest(tl.X, tr.X, bl.X, br.X), FindBiggest(tl.Y, tr.Y, bl.Y, br.Y));
rectangle = new Rectangle((int) min.X, (int) min.Y, (int)(max.X - min.X), (int)(max.Y - min.Y));
}
private void UpdateTransformMatrix() {
transform = Matrix.CreateTranslation(new Vector3( - Origin, 0)) * Matrix.CreateRotationZ(rot) * Matrix.CreateTranslation(new Vector3(position, 0));
}
Любая помощь приветствуется, я выдергиваю волосы, гадая, что я сделал не так. Вот короткая гифка, показывающая, как мой прямоугольник ломается. https://gyazo.com/10bf61d4c8e18babf6e4be8a2ebc0c95