УДАЛИТЬ

Статус: Offline
Реєстрація: 04.09.2011
Повідом.: 192
УДАЛИТЬ

УДАЛИТЬ
 

Вкладення

  • баг.jpg
    36 КБ · Перегляди: 99
Останнє редагування:
значит нужно маску перед передачей в процедуру тоже поворачивать, также как битмапу, ну и маску соответственно не использовать. А затем уже трансформированную маску передавать туда куда ты уже передаешь.

П.С. скорее всего процедура так и реализована, и маску использует чисто как константный параметр без трансформации.
 
Останнє редагування:

нет вы не поняли всё трансформируется норм. при повороте например на 156 градусов или на 314 и т.д. - ВСЕ НОРМ!
баг вылезает ТОЛЬКО при повороте на 180 градд41ов



Вот собственно с картинка. (в вверхнем левом углу - 181 градус!!!)
 

Вкладення

  • баг.jpg
    36 КБ · Перегляди: 77
Останнє редагування:
тогда без долгого анализа, можно предложить при 180 градусах инвертить маску, и дело с концом. можно конечно и неделю потратить на борьбу с повстанцами, но тут очевидно что проблема внутри, а блэкбоксом можно очень долго искать решение.

пробовали играться с координатами угла маски?
чем транформируете точки?
 
Дело в том что бывает иногда оно выводит и нормально при 180 градусах)))
чем транформируете точки?

p[0].x = int(x0 + (x - x0) * cos(a) - (y - y0) * sin(a));
p[0].y = int(y0 + (y - y0) * cos(a) + (x - x0) * sin(a));

Проблема явно в функции так как для маски я передаю только координаты угла и все. Поэтому подумал что если кто-то пытался делать игры на винапи - то он явно должен был столкнуться с такой проблемой
 
смотрели явно при 180 какие координаты в массиве при дебаге? верны ли они?

если "иногда бывает", то тут попахивает неверным преобразованием типов. Вы преобразуете в int, а в формуле cos,sin возвращают плавающую точку, еще и double. возможно беда в этом
 

Убрал инт:
Код:
p[0].y = y0 + (y - y0) * cos(a) + (x - x0) * sin(a);
НЕ помогло.

Однако проблему решил, только не совсем понял "почему так?".
Переменные x,y, x0, y0 - имели тип double.

Изменил на инт - БАГ ПРОПАЛ!!!!
Только я не пойму в чем подвох? всеравно результат выражения "y0 + (y - y0) * cos(a) + (x - x0) * sin(a)" - будет double
 
почитайте про преобразование типов. при какой операции, в каком приоритете и в какую строну от операнда преобразуются результаты. у вас не только конечный результат, каждая арифметическая операция возвращает результат, и при разности типов операндов приводит результат к какому-то из типов. А вот к какому, можете поковыряться в своем коде если есть желание, и почитать в книжках об этом.
 
ещё один вопрос. У меня в игре есть основной цикл(обработка сообщений от клавиатуры - через GetKeyState(или WM_KEYDOWN) и прорисовка кадра) который выполняется 25 раз в секунду.
Так вот, мне необходимо чтоб при нажатии клавиши создавался объект, однако так как все происходит в цикле то обекты создаются со
скоростью 25штук/сек(если клавиша зажата), а мне необходимо чтоб при зажатой клавиши создавался один объект, независимо от того сколько клавиша была зажата.

Единственное что пришло в голову поставить флаг.
Вот так:
Код:
повторяющийся цикл
{
....
                        if(KEYDOWN(0x57))
			{
				if(keyst == FALSE)
				{
					Создание объекта
					keyst = TRUE;
				}
			}
			if(KEYUP(0x57))
				keyst = FALSE;

...
}
Может есть более удачный способ?
 
Останнє редагування:
врядли на винапи будет лучшее решение. если бы пользовались Фреймворком или инструментами какими, то там бы был какой-нить input controller. Но ничего не мешает вам написать свой, красиво назвать метод и перенести туда реализацию реакции на действия пользователя. И будет у вас уже красиво в одну или несколько строк разруливаться управление
 
Хоть убейте не пойму, нафига изобретать свой лисапед если есть десятки бесплатных 2D движков?
 
Правильно все человек делает. Чтобы раз и навсегда понять что хороший инструментарий продуктивнее чем усидчивость и "мега задрот в программировании", нужно знать что такое "изобретать велосипед" и в результате ничего серьезного не добиться.
 
Я через это прошёл лет так 11-12 назад, только я писал под чистый Direct3D... Потом помню пошла библиотека определения пересечения объектов в пространстве, потом подобие своей физики, потом библиотека физики, потом графический движок, физический, их совмещение... Короче было весело ))) То что сейчас делается 5 минут - раньше занимало месяц
 
Дело в том что бывает иногда оно выводит и нормально при 180 градусах)))
сомневаюсь. скорее всего градусы задаются плавающей точкой, а раз так то надо значение смотреть полностью типа, 180,000001 это уже не 180. Но у тебя оно в радианах 0,57..... или как то так и ты на циферки после запятой не смотришь а надо. имхо.
 

Это мое первое можно сказать графическое приложение, возможно, будет моя первая полноценная игра образца так 92 года
Интересно все сделать самому и с нуля.
Я конечно понимаю если этим заниматься профессионально, то гораздо полезнее знать различные технологии, библиотеки, уметь этим всем пользоваться и не тратить время на ерунду. И думаю в ближайшее время заняться изучением всего этого))), но пока это чисто ради интереса
 
Тогда лучше с 3D начинать... Гораздо интереснее )))
 
Тогда лучше с 3D начинать... Гораздо интереснее )))
и сложней.)
Если "это" закончу нормально, удастся довести до ума и хватит на всё это терпения, обязательно перейду к изучению библиотек для работы с 3д!)
 
А что там сложного? Мне и в голову не приходило начинать игрописательство с 2D )))) Хотя, я пишу только игры определённого жанра, там с 2D делать нечего...
 
сам движек за исключением нюансов практически не отличается. Но по сложности контента отличия есть серьезные. Рисовать плоские мультики для анимации и скелетную анимацию 3д моделей это совершенно разный уровень. А так в основном 3Д и 2Д отличается геймплей. Но 3Д тебя не обязывает сразу делать думоподобные стрелялки, можно камеру сверху прицепить и будет плоский геймплей. А вот с 2Д движком уже возможности урезаются.
 
Это движок. А если с нуля - то отличия более чем внушительные...