Математическая задача: как правильно перевернуть «повернутую» поверхность на другую - PullRequest
0 голосов
/ 31 октября 2010

надеюсь, что разрешено "кросспостить" между сайтом stackexchange ... Кто-нибудь знает, как решить следующую «математическую» задачу?

https://gamedev.stackexchange.com/questions/5041/correct-blitting-2-surface-problem

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Похоже, ваша проблема в том, что вы бьете башню относительно ее верхнего левого угла, когда вы на самом деле хотите бить ее относительно центра реальной башни. Теперь, предположив, что ваша башня имеет центр в x_1, y_1, вращение ее по часовой стрелке на theta градусов даст вам "новый" центр в x_2=x_1*cos(theta), y_2=y_1*sin(theta). Затем вы должны выровнять это с центром отверстия башни, расположенного в 13,13. Это не должно быть проблемой (имейте в виду, я не очень разбираюсь в C #, так что это, вероятно, синтаксически неправильно):

Point posTurret = new Point(13 + this.X - x1*Math.cos(cannonangle),
                            13 + this.Y - y1*Math.sin(cannonangle));

Где x1 и y1 - координаты центра башни в "tank_turret_long.png".

Я также перейду этот ответ на gamedev .

0 голосов
/ 31 октября 2010

Я не очень увлекаюсь графикой, но раньше я делал что-то подобное, используя маску, а затем изображение, и вам нужно вращать и перетаскивать их обоих. То есть, у вас есть черная «дыра» в форме башни, которая поворачивается и закрывается, чтобы соответствовать повороту, который вы хотите для своего изображения башни.

Другая проблема заключается в том, что пиксели в повернутом изображении не будут совпадать с пикселями в исходном изображении, поэтому вам нужно выполнить некоторую интерполяцию, чтобы оно выглядело правильно.

Хотя я бы подумал, что, вероятно, вы можете использовать библиотеки, которые позаботятся об этом за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...